見出し画像

Slackで毎日チャート画像まで届ける通知の作り方【スマホで周回!#7】

こんにちは、スマホ投資パパです。

スマホだけでできる米国株の自動分析システムの第7回目です。

第4回の時点で、すでに
「銘柄一覧を取得する」
「Slackに通知する」
ところまでは作れています。

ただ、ティッカーが並ぶだけでは、価格の流れまでは分かりません。

結局、
Slackで候補を見つける

証券会社アプリに移動する

1銘柄ずつチャートを見る

またSlackに戻る

この往復が発生します。

これ、地味に面倒です。

もしSlack上で複数銘柄のチャート画像をまとめて見比べられたら、かなり楽になります。
候補銘柄を眺めながら、「どれが一番素直に上がっているか」「どれが押しているか」を一気に確認できるからです。

今回は、既存の仕組みに最小限の追加をして、複数のチャート画像をSlackに送れるようにします。

やることはシンプルです。

1.  Slack Bot Token を取得する  
2. GitHub Secrets に設定する  
3. matplotlib でチャート画像を作る
4. 画像を複数枚まとめてSlackへ送る  

ここまでできれば、今後は業種別チャート、保有銘柄チャート、指数チャートなども横展開しやすくなります。

チャートを一覧表示してみましょう

1. 今回のゴール


今回のゴールは、すでに第4回までで作った「銘柄一覧取得+Slack通知」の仕組みに、チャート画像送信を追加することです。

前提は次の通りです。

- GitHub Actions で Python が動いている  
- yfinance 等で銘柄データが取れている  
- Slackへのテキスト通知はすでにできている  
- あとは画像を作って送るだけ  

つまり今回は、ゼロから作る回ではありません。
既存の流れに「画像化」と「画像送信」を足す回です。

この段階まで来ると、ただの通知ではなく「見るための通知」になってきます。


2. なぜWebhookだけではなく Bot Token が必要なのか


第2回〜第4回あたりでSlack通知を作った方は、Incoming Webhookを使っていると思います。

Webhookはテキスト通知には十分便利です。
ただ、複数の画像ファイルをちゃんと扱おうとすると、 Slack App の Bot Token が必要です。

Bot Token を使うと、

- 親メッセージを投稿する
- そのスレッドに画像を複数枚ぶら下げる
- タイトル付きで画像を送る

という流れが可能になります。

今回の構成はかなりシンプルで、

- まず親メッセージを1本投稿
- その下に銘柄ごとのPNG画像を複数枚アップロード

という形にします。

これならSlack側でも見やすいですし、通知がチャンネル上で散らばりません。

複数銘柄分のチャートをまとめて表示。こちらは過去1年、過去半年でそれぞれ3銘柄の例。

3. 先にやる設定:Slack App と Bot Token


ここは最初だけ少しだけ面倒ですが、一度やれば終わりです。

Slackでアプリを作って、Bot Token を発行します。

流れはこうです。

1. Slack API の管理画面で新しい App を作る  
2. 作成先のワークスペースを選ぶ  
3. OAuth & Permissions を開く  
4. Bot Token Scopes に必要な権限を追加する  
5. ワークスペースにインストールする  
6. 発行された Bot User OAuth Token を控える  

今回必要なのは、まず最低限この2つで十分です。

- `chat:write`
- `files:write`

さらに、投稿先チャンネルにBotを招待しておきます。
ここを忘れると、トークンは正しくても投稿できません。

*こちらの手順はスマホではなくPC(またはMac)での操作をお勧めします。
*下記の記事が非常に綺麗にまとまっていましたのでリンク貼らせていただきます。


そのうえで GitHub Secrets に次の2つを登録します。

- `SLACK_BOT_TOKEN`
- `SLACK_CHANNEL`

`SLACK_CHANNEL` は `#general` のような名前ではなく、チャンネルIDで持っておく方が安定です。

たとえばこんな感じです。

- `SLACK_BOT_TOKEN` = xoxb-...
- `SLACK_CHANNEL` = C0123456789

すでにWebhook通知が動いている人は、Webhookを消す必要はありません。
今回は追加で Bot Token とChannelを足すだけで大丈夫です。

第2回の記事同様にGithub Secretへの登録を行いましょう。登録は初回限りの手順です。

4. 今回の実装方針


ここで大事なのは、いきなり難しいチャートを作らないことです。

最初は「終値の折れ線が見えるだけ」で十分です。

たとえば対象銘柄が

- NVDA
- META
- PLTR
- CRWD

だったら、その4銘柄について直近6か月や1年の終値チャートをPNGで保存し、それをSlackに送るだけでいい。

やることを分けるとこうです。

- 銘柄ごとに株価データを取得
- matplotlib で画像を保存
- 保存した画像をSlackへ送信

最初から移動平均線も出来高も入れたくなりますが、そこは後回しでいいです。
まずは「1枚作れる」「複数枚送れる」を通してください。

ここを越えると、あとは飾りです。


5. ChatGPT に投げるプロンプト

ここからは、今使っている `app.py` (もしくは第4回時点のメインスクリプト)、及びAction実行に使用しているyamlファイルをChatGPTに貼り付けて、下のプロンプトをそのまま投げればOKです。

  この既存コードに、Slackへ複数のチャート画像を送る機能を追加してください。

    前提:
    - 既存の銘柄取得ロジックはそのまま使う
    - 既存のSlackテキスト通知は極力壊さない
    - 新しく追加してよいのは、チャート画像作成とSlack画像送信まわり
    - 余計な新機能は追加しない
    - 標準出力ログは追加してよい

    やりたいこと:
    - 通知対象のティッカー一覧を使って、各銘柄の株価チャート画像をPNGで保存する
    - チャートは matplotlib を使い、まずはシンプルな終値折れ線だけでよい
    - 保存先は charts ディレクトリ配下にする
    - 画像ファイル名は ティッカー_期間.png のようにする
    - Slackにはまず親メッセージを1本投稿し、そのスレッドに各画像を複数枚アップロードする
    - Slack投稿には環境変数 SLACK_BOT_TOKEN と SLACK_CHANNEL を使う
    - 画像アップロードは files.getUploadURLExternal → upload_urlへPOST → files.completeUploadExternal の流れで実装する
    - 画像が存在しない場合やSlack送信に失敗した場合は、処理全体を落とさずログを出してスキップする
    - 既存の入出力形式や既存の通知形式はなるべく変えない
    - requirements.txt に必要なら matplotlib を追加する
    - 省略せず、修正後のコード全文を出してください

このプロンプトのポイントは、「何を残して、何だけ足すか」を明確にしていることです。

生成AIは放っておくと、関係ない所まで触ります。
なので、こういう追加実装では毎回「既存ロジックはそのまま」「余計な機能は足さない」を入れた方が安全です。第5回のガードレールも参考にしてください。


6. 実行して確認する


コードを反映したら、次はGitHub Actionsを手動実行します。

確認ポイントは3つです。

1. PNG画像がちゃんと生成されているか  
2. Slackに親メッセージが投稿されているか  
3. そのスレッドに複数の画像が並んでいるか  

ここでうまくいかない場合、
生成AIにGitHub Actionsのログを渡して調べてもらいましょう。だいたい原因はこのあたりです。

- `SLACK_BOT_TOKEN` の入れ忘れ
- `SLACK_CHANNEL` がチャンネル名になっていてIDではない
- Botがそのチャンネルに入っていない
- `matplotlib` を requirements.txt に追加していない
- 画像保存先ディレクトリを作っていない

特に最後の2つは地味にハマります。

また別途ログに
「画像保存成功」
「Slack親メッセージ投稿成功」
「画像アップロード成功」
のような標準出力を出しておくとことで、スマホでも追いやすくなるのでおすすめです。

Github Actionのログ出力例。生成AIにログ渡して対応時に状況判断しやすい状態にしておきましょう。

7. 最初は“なんでもいいから送る”で十分


今回の目的は、完璧なチャート分析画面を作ることではありません。

まずは、

「候補銘柄データを取る」

「チャート画像を作る」

「Slackに送る」

この一連の流れを通すことです。

最初は、ただの終値折れ線で十分です。

そこから後で、

- 25日線や50日線を足す
- 出来高を足す
- 52週高値ラインを足す
- 保有銘柄だけ送る
- 業種上位だけ送る
- 指数や市場全体チャートも一緒に送る

と広げていけばいい。

最初から完成形を狙うと、だいたい止まります。
動く最小構成をまず通す。
このシリーズはずっとそれです。


8. 今回のまとめ


今回は、Slackにテキストだけでなく、複数のチャート画像を送るところまで進めました。

これができるようになると、通知の価値がかなり上がります。

単なるティッカー一覧ではなく、
「見るべき候補を、その場で見比べられる通知」
に変わるからです。

スマホ運用では、この差が大きいです。

アプリを行ったり来たりする回数が減るだけで、かなり楽になります。
しかも候補の強弱も掴みやすくなります。

次にやるなら、ここで作った仕組みをベースにして、

- 保有銘柄だけを毎日送る
- 候補銘柄上位だけを送る
- 市場全体の地合いチャートも一緒に送る

あたりが自然です。

ただ、まずは今回のところまでで十分実用的です。

ティッカー一覧だけの通知から、一歩進めてみてください。
Slackが「銘柄名を見る場所」から、「そのまま判断材料を見る場所」に変わります。


9. 次回以降の話について

ここまでの連載では、スマホから生成AIに指示を出し、GitHubでコードを直し、GitHub Actionsで実行し、Slackで確認する、という改善サイクルを中心に書いてきました。

次回からはその先です。

小さく動くものを作った後、最終的にどんな仕組みへ育てていくのか。
銘柄をどう選ぶのか。
相場全体をどう見るのか。
保有銘柄をどう管理するのか。
どこで損切りし、どこで利益を伸ばすのか。
そして、その判断材料を毎日どう確認するのか。

こうした部分が整理されていないと、せっかく自動化しても、最後は感覚の売買に戻ってしまいます。

そのため次回以降は、
以下のような内容を順次紹介していきます。

- なぜ私がミネルヴィニ流を選んだのか
- 実際に運用している分析システムの全体像
- 損切りと利確をどうルール化しているか
- ユニバースをどうメンテナンスしているか
- 銘柄スコアをどう集計しているか
- 毎日のSlack通知をどう売買判断につなげているか

細かいコード解説というより、
「この仕組みを実運用にどうつなげていくのか」
を一つずつ整理していく予定です。

最初から完璧なシステムを作る必要はありません。
ただ、目指す形が見えていると、次に何を作るべきか、どこを後回しにしてよいかが判断しやすくなります。

スマホで回す米国株自動分析システムを、実運用にどう育てていくのか。

順次、その中身を順番に紹介していきます。

次回はなぜ私がミネルヴィニ流を選んだのかです。

スキを押してもらえると、続きの公開が早まります。
気になる部分があればコメントで教えてください。


最後にひとつだけ。
この記事は、米国株の売買そのものをおすすめするものではなく、あくまで分析や仕組み作りの考え方をまとめたものです。
実際の投資判断は、ご自身の責任でお願いします。

いいなと思ったら応援しよう!

この記事は noteマネー にピックアップされました

noteマネーのバナー