見出し画像

AIとGitHubとSlackで毎日まわす改善サイクル【スマホで周回!#3】

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

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

前回の記事では、GitHub Actions × Slack × yfinance でトレンドテンプレートに合致する銘柄が通知される最小構成を作りました。

今回の目的は、条件を追加すること自体ではありません。
「ChatGPTに依頼 → コードを修正 → 動かす → 確認する → また直す」という改善サイクルを、自分の手で何度か回してみることです。

題材として、前回のトレンドテンプレートチェックに出来高条件や50日高値判定を足していきます。
条件の中身は練習用のシンプルなものです。
ここで大事なのは、条件そのものよりも「サイクルの回し方」を体で覚えることです。

今回は、このサイクルを4回まわします。

- 1回目:出来高条件を追加する
- 2回目:50日高値判定を追加する
- 3回目:スケジュール実行に切り替える
- 4回目:通知フォーマットを見やすくする

前回は「pushしたら動く」でしたが、今回で「毎日自動で届く」になります。

前回の手順がすでに完了している方は今回の作業は1時間もかからないと思います。


1. 今回の題材:出来高と50日高値


※ ここで使う条件はあくまで練習用です。実運用ではもっと多くの要素を組み合わせますが、サイクルを回す感覚を掴むにはこのくらいがちょうどいいです。

トレンドテンプレートに合致しているだけでは「今まさに動き出しているのか」が分かりません。

出来高を伴う上昇は、値動きに市場の支持が集まっているサインとして見られることがあります。
逆に出来高が薄い場合は、たまたま少ない売買で値が動いただけのことがあります。

50日高値の判定も同様です。
直近50日間の高値を更新しているということは、短中期で明確に買われている状態です。
トレンドテンプレートには合致しているけれど、50日高値を更新できていない銘柄は、まだ動き出していない可能性があります。

この2条件を追加するだけで、通知の中身が「今まさに動いている銘柄」に絞られます。


2. サイクル1回目:出来高条件を追加する

まずは1つ目の条件追加です。
前回作った app.py をそのままChatGPTに貼り付けて、以下のプロンプトを送ってください。貼り付け手順は下記のスクショを参考に。

この app.py に、出来高フィルターを追加してください。

条件は以下です。
・既存のトレンドテンプレート判定ロジックはそのまま使う
・yfinance で取得済みの日足データの Volume 列から、直近50営業日の平均出来高を計算する
・直近日の出来高が、その50日平均出来高の1.1倍以上の銘柄だけを通過させる
・最終的に Slack には、トレンドテンプレート合致 かつ 出来高条件も満たした銘柄だけを送る
・Slack通知には、ティッカー、直近終値、出来高が50日平均の何倍かを含める
・最終通過銘柄がない場合でも、トレンドテンプレート通過銘柄は一覧で出す
・その場合、出来高条件を満たした銘柄は「該当なし」と明記する

注意事項
・既存の構成は変えない
・yfinance を使うこと
・Slack Webhook URL は今のまま環境変数から取得すること
・エラーログの出し方は変えない
・不要なリファクタリングはしない
・できるだけ最小限の修正で対応し、既存コードの構造や関数分割は勝手に変更しない
・app.py のファイル全体を省略せずに出力する


コードを受け取ったら、GitHubに反映してpush。
Slackに届いた通知を確認して、前回より銘柄数が減っていればフィルターが効いています。
出来高情報も表示されているはずです。
時期や銘柄によってはフィルターに合致しない場合もありますが、その場合もその旨が表示されているはずです。

これで1サイクル完了です。

githubアプリでapp.pyを開き「共有」からSafariで開く
ファイルの「Download」よりダウンロード
ダウンロードしたファイルを貼り付けて次の改善指示を出しましょう。これはchatGPTの例。

3. サイクル2回目:50日高値判定を追加する


1回目で修正した app.py を、もう一度ChatGPTに貼り付けます。

この app.py に、50日高値判定を追加してください。

条件は以下です。
・既存のトレンドテンプレート判定ロジックはそのまま使う
・既存の出来高条件もそのまま使う
・yfinance で取得済みの日足データから、過去50営業日の高値の最大値を計算する
・直近の終値が、その過去50営業日の最高値を更新した銘柄だけを通過させる
・最終的に Slack には、トレンドテンプレート合致 + 出来高条件 + 50日高値更新 の3つすべてを満たした銘柄だけを送る
・Slack通知には、既存の情報に加えて、50日高値の価格も含める
・最終通過銘柄がない場合でも、トレンドテンプレート通過銘柄と、出来高条件まで通過した銘柄は一覧で出す
・その場合、50日高値更新まで満たした最終通過銘柄は「該当なし」と明記する

注意事項
・既存の構成は変えない
・yfinance を使うこと
・Slack Webhook URL の取得方法は変えない
・エラーログの出し方は変えない
・不要なリファクタリングはしない
・できるだけ最小限の修正で対応し、既存コードの構造や関数分割は勝手に変更しない
・app.py のファイル全体を省略せずに出力する

同じようにGitHubに反映、push、Slack確認。
通知される銘柄がさらに絞られているはずです。
また50日高値の価格が表示されていることも確認してください。
こちらも出来高同様に時期や銘柄によってはフィルターに合致しない場合もありますが、その場合もその旨が表示されているはずです。

ここで気づいてほしいのは、やっていることが1回目とまったく同じ流れだということです。

ChatGPTに依頼 → コードを差し替え → push → 確認。

このサイクルが回せれば、条件の中身を変えるだけでいくらでも改善を重ねられます。


4. サイクル3回目:スケジュール実行に切り替える


ここまでは「pushしたら動く」設定でした。
これを「毎日自動で動く」に切り替えます。

今度は .github/workflows/run.yml をChatGPTに貼り付けて、以下のプロンプトを送ります。

この GitHub Actions の yaml を修正してください。

【変更内容】
・トリガーを push から schedule に変更する
・cron 式で毎日 UTC 6:00(日本時間 15:00)に実行する設定にする
・手動実行(workflow_dispatch)も残しておく
・それ以外の設定は変えない
・yaml 全体を省略せずに出力する

UTC 6:00 は日本時間の15:00です。
前日の終値データを使う分析であればこのタイミングで十分ですが、自分の生活リズムに合わせて調整してください。

yamlを差し替えてpushしたら、GitHub Actionsの画面から「Run workflow」で手動実行して動作確認します。
問題なければ、翌日の指定時刻に自動で通知が届くことを確認してください。

もしエラーが出たり、Slack送信されないなど、想定通り動かない場合は、GitHub ActionsのログをそのままChatGPTに貼って聞くのが最短です。

githubアプリのActionの詳細から「共有」よりSafariから開く
歯車マークよりDownload log archiveでダウンロードしたログを生成aiのチャットに貼り付けて「ちゃんと動いてる?」と聞いてみましょう

5. サイクル4回目:通知フォーマットを改善する


フィルター条件が増えると、通知の情報量も増えます。
そのままだと見づらいので、フォーマットを整えます。

修正済みの app.py をChatGPTに貼り付けて、以下のプロンプトを送ります。

この app.py の Slack 通知部分を改善してください。

【フォーマット要件】
・通知の冒頭に、実行日時と判定条件のサマリーを1行で入れる
・例:「📊 Trend Template + Vol×1.1 + 50D High | 2025-04-06」
・最終通過銘柄は1銘柄1行で、以下の情報を含める
 - ティッカー
 - 直近終値
 - 出来高倍率(50日平均比、小数点1桁)
 - 50日高値の価格
・例:「AAPL|$198.50|Vol ×2.3|50D High $197.80」
・見やすいようコードブロックで囲んで欲しい
・最終通過銘柄がゼロの場合でも、トレンドテンプレート通過銘柄、および出来高条件まで通過した銘柄の明細は送る
・その場合、最終通過銘柄は「該当なし」と明記する
・フォーマット以外のロジックは変えない

【注意事項】
・既存の構成は変えない
・既存の判定ロジックは変えない
・Slack Webhook URL の取得方法は変えない
・エラーログの出し方は変えない
・不要なリファクタリングはしない
・できるだけ最小限の修正で対応し、既存コードの構造や関数分割は勝手に変更しない
・app.py のファイル全体を省略せずに出力する

差し替えてpush。Slackで通知の見た目が整っていれば完了です。

最初よりだいぶ見やすくなりました。
ヘッダーを追加して改行しない程度に幅を調整したらもっと見やすくなるでしょう。

6. 銘柄リストを増やすときのコツ


ここまでで、3条件のフィルターが毎日自動で動くようになりました。
次に気になるのは「もっと多くの銘柄を監視したい」だと思います。

まず、一気に増やしすぎないこと。
yfinanceは無料のライブラリなので、短時間に大量のリクエストを送ると一時的にブロックされることがあります。
最初は20〜30銘柄くらいから始めて、安定して動くことを確認してから徐々に増やす方が安全です。

銘柄リストの選び方は、S&P500やNASDAQ100の構成銘柄をベースにするのが分かりやすいです。
ChatGPTに「S&P500の構成銘柄のティッカーリストをPythonのリスト形式で出して」と頼めば出てきます。

GitHub Actionsの実行時間にも注意してください。
銘柄数が増えると処理時間も増えます。
公開リポジトリの無料枠で収まるかどうかは、銘柄数と処理内容によって変わるので、Actionsのログで実行時間を確認しながら調整してください。


7. ここまでのまとめと、次の話


今までの記事を通して、こういう流れが出来上がりました。

• 第1回:全体像と考え方
• 第2回:最小構成でトレンドテンプレートチェックをSlackに通知
• 第3回(今回):改善サイクルを4回まわして、条件追加・スケジュール実行・通知改善

ここまでで、「ChatGPTに依頼 → GitHubに反映 → 動かす → 確認する → また直す」というサイクルの回し方が掴めたと思います。
このサイクルさえ回せれば、あとは条件を変えたり、通知を整えたり、自分の判断に合った形にいくらでも育てていけます。

次回からは、このサイクルをもっと速く、もっと深く回すための話に進みます。

• AIにコピペで渡す代わりに、リポジトリと直接つないで指示を出せるようにする
• AIへのコードの渡し方を工夫して、理解精度と修正速度を上げる
• コードがグチャグチャになってしまいどうにもならなくなった場合の復旧方法

コストがかかるものもありますが、無料構成で回し方を覚えた今なら、どこにお金をかけると効くかが判断しやすいはずです。


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

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