見出し画像

コスト0円でSlackまで届く米国株分析の最小構成【スマホで周回!#2】

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

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

前回の記事では、スマホだけで米国株の自動分析システムを育てていく全体像を書きました。

今回は、そのはじめの一歩です。

いきなり完成形の分析システムを作るわけではありません。
まずは「Slackに1回通知が届く」ところまでできれば十分です。

スマホだけで回る処理を、ひとつ動かせるようになるところまでの流れを実際に1回つなげます。

具体的にはGitHub ActionsとSlackをつないで、分析結果が自動で届くところまでを、最小構成で形にしていきます。

ここでやるのは、最初の1回だけ必要なセットアップです。
少し手は動かしますが、毎回やる作業ではありません。
ここを越えれば、以後は同じ土台の上で少しずつ改善していけます。


1. 利用するサービス

今回使うのはこれだけです。

GitHub
コードと設定ファイルを置く場所。

GitHub Actions
GitHubに置いたコードを自動で実行する仕組み。mainにpushしたら自動で走るようにします。

Slack
実行結果の通知先。Webhook URLを使って、GitHub Actionsから直接メッセージを送ります。

yfinance
Yahoo Financeの公開データ(銘柄毎の価格情報など)をPythonから取得するライブラリ。

この構成で使うものは、基本的にすべて無料で始められます。
Pythonコードを1本動かしてSlackに通知を送るくらいであれば、費用はかかりません。

お金がかかるのは、もっと先の話です。
例えば、
- codexなどで簡単にコード生成したい
- 有料のプレミアムな株価データAPIを使いたい
- github Action処理が増大して実行時間が増えた

これらの場合にはコストかかりますが、
今回の段階ではまだ気にしなくて大丈夫です。

必要最小限の構成

3. セットアップ(最初の1回だけ)

ここから少し設定作業に入ります。
ただし、毎回やる作業ではありません。

最初に一度だけ、
「GitHubに置き場を作る」
「Slackの通知先を作る」
「Webhook URLをGitHubに登録する」
この3つを済ませるだけです。

ここを越えれば、以後は同じ土台の上で改善していけます。

すでにGitHubやSlackのアカウントを持っている、WebhookURLを発行している場合は、該当箇所を読み飛ばしてください。

GitHubアカウントを作る

GitHub にアクセスしてアカウントを作成します。
今回の段階では、アカウントを作ってログインできれば十分です。
こちらの公式ドキュメントに沿ってアカウント作成を進めましょう。

新しいリポジトリを作る

アカウントができたら、今回のコードを置くリポジトリを作ります。
リポジトリは「ファイル一式をまとめて置く箱」です。

名前は自分で分かればなんでもいいですが、たとえば 「stock-alert」や 「daily-alert」 あたりが分かりやすいと思います。
こちらも公式のドキュメントを貼っておきます。


下記の通り公開リポジトリにしておけば、普通の使い方なら無料でGitHub Actionsを利用できます。

「Public」指定して公開リポジトリで作成しましょう。
※スクショはiPhoneのものになります

SlackでWebhook URLを取得する

GitHub ActionsからSlackに通知を送るには、Webhook URLが必要です。
これは外部からSlackにメッセージを送るための専用URLで、通知の鍵のようなものです。

手順はこうです。

1. Slackでアプリを作る
1. Incoming Webhooksを有効にする
1. 通知を送りたいチャンネルを選ぶ
1. 発行されたWebhook URLを控える

※この手順はPC(MAC)で実施をおすすめします
 セットアップなので初回の一回だけで大丈夫

詳しい手順はこちらの記事が非常にわかりやすいので貼らせていただきます。

GitHubのSecretsにWebhook URLを登録する

取得したWebhook URLは、コードに直接書きません。
GitHubのSecretsに登録して、実行時に環境変数として渡します。

先程作成したGitHubリポジトリの Settings → Secrets and variables → Actions から登録できます。
このあと作るコードと一致させるため、名前は 「SLACK_WEBHOOK_URL」 にしましょう。

Valueに自分で取得したwebhook urlを入力

4. ChatGPTにコードを作ってもらう

準備ができたら、実際に動かすファイルをChatGPTに作ってもらいます。
必要なのは3つです。

- app.py — 銘柄リストからトレンドテンプレート合致を抽出してSlackに送るPythonコード
- requirements.txt — 実行に必要なライブラリの一覧
- .github/workflows/run.yml — GitHub Actionsの設定ファイル

一気に全部作らせるより、PythonコードとGitHub Actionsのyamlを分けて依頼した方が失敗しにくいです。

プロンプト1:Pythonコード

Pythonで、米国株のミネルヴィニのトレンドテンプレートに合致する銘柄を抽出してSlackに送る最小構成のコードを書いてください。

条件は以下です。
・固定のティッカーリストをコード内に持つ(30-40程度)
・yfinance を使って各ティッカーの過去1年半分の日足データを取得する
・以下のトレンドテンプレート8条件すべてを満たす銘柄だけを抽出する
  1. 現在価格 > 150日移動平均線
  2. 現在価格 > 200日移動平均線
  3. 150日移動平均線 > 200日移動平均線
  4. 200日移動平均線が少なくとも1ヶ月(20営業日)上昇トレンド
  5. 50日移動平均線 > 150日移動平均線
  6. 50日移動平均線 > 200日移動平均線
  7. 現在価格 > 50日移動平均線
  8. 現在価格が52週安値から少なくとも25%以上高い
・各銘柄の判定結果(価格・各MA値・52週安値比)を見やすい文字列に整形する
・Slack Webhook URL は環境変数 SLACK_WEBHOOK_URL から取得する
・Webhook URL をコードに直書きしない
・python app.py で動く形にする
・エラー時は標準出力に原因が分かるログを出す
・app.py のファイル全体を省略せずに出力する
・必要な requirements.txt の中身も別で出力する

ちなみにトレンドテンプレートとは、伝説的トレーダーであるマーク・ミネルヴィニが提唱する8つの条件で、価格が主要移動平均線(50日・150日・200日)の上にあり、移動平均線同士も正しい順序で並び、200日線が上向きで、52週安値から25%以上離れている状態です。要するに、長期・中期・短期すべてのトレンドが揃って上を向いている”本物の上昇トレンド銘柄”だけを機械的にふるい落とす基準です。​​​​​​​​​​​​​​​​
ですが今の段階では手順を進めることが優先なので、ひとまず読み飛ばしていただいて大丈夫です。


プロンプト2:GitHub Actions yaml

GitHub Actionsで app.py を実行する最小構成の yaml を書いてください。

条件は以下です。

・main ブランチへの push をトリガーにする
・手動実行もできるようにする
・Ubuntu 環境で実行する
・Python をセットアップする
・requirements.txt をインストールする
・python app.py を実行する
・GitHub Secrets の SLACK_WEBHOOK_URL を環境変数として渡す
・ファイルパスは .github/workflows/run.yml を想定する
・yaml 全体を省略せずに出力する
chatGPTのサンプルです。このような形でコード丸ごと作ってくれるので、後続のgithubにコピペしましょう

5. GitHubにファイルを置いて動かす


ChatGPTから受け取ったファイルを、GitHubのリポジトリに置きます。作成は下記の順番で実施しましょう。

① app.py
② requirements.txt
③ .github/workflows/run.yml

リポジトリでファイルを新規作成
作成したファイルに生成したコードをコピペ
を上記順で3回繰り返せば大丈夫です。

ブラウザから作成したgithubのリポジトリを開いてCreate new file
file名を入れてプロンプトの結果をコピペしCommit するだけ。
こちらはスマホアプリ版のgithubでファイル作成するサンプル画面。コード内の「•••」から「ファイル作成」よりファイル名を入力。
プロンプトで依頼したコードを入力してコミット。
codex(有料)を使えば直接AIがファイル作成や更新までしてくれるのでもっと楽です。

3回目、プロンプト2で作ったyamlをmainブランチにコミットすることで、自動でGitHub Actionsの処理が走ります。

もし動かない場合は、まずyamlファイルの配置場所を確認してください。
.github/workflows/ の中に置かれていないと、GitHub Actionsは認識しません。


6. Slackに通知が届いたか確認する


mainにpushできたら、Slackを開いて通知を確認します。

- トレンドテンプレートに合致した銘柄があれば、その一覧が届く
- 該当銘柄がなければ「該当なし」と届く

どちらかが届いていれば成功です。

slack送信内容の例。生成aiの出したコードや処理実施日によって違う表示内容になっているとは思いますが、まずはslackにメッセージが届けばオッケーです。

通知が届いていない場合は、GitHub Actionsの実行ログを見てください。
エラーメッセージが出ていれば、それをそのままChatGPTに貼って聞くのが最短の解決方法です。

Actionの履歴からログファイルをダウンロード
→生成aiにファイルを添付でオッケーです。

スマホのGitHubアプリのGitHub Actions実行結果。上から🟡が実行中、🟢が成功、🔴がエラーの結果。
ちなみに「ワークフローの実行」より手動実行可能です。

7. ここから先の育て方

いかがでしたでしょうか。
生成aiが作ったコードをGitHubに反映し、Actionが実行され、Slack送信さえできれば、一旦は問題ありません。送信内容は最初はなんでもOKです。
こういう流れなんだなというのをなんとなくでも実感してもらえれば大丈夫です。

ここまでで、GitHub → GitHub Actions → Slack の流れがひと通りつながりました。

最初だけ少し手を動かしますが、この土台ができると、以後は毎回セットアップに悩む必要はありません。
スマホだけで淡々と行える改善サイクル、ルーチンに近い運用へ寄せやすくなります。
あとは同じ手順を何度も繰り返すだけです。

今回は少し地味な工程でしたが、毎日の運用を軽くするためには、この最初の一歩が最も大切です。

次は、この土台の上に条件を足して、候補抽出をもう少し実用寄りにしていきます。

たとえば、

- 監視する銘柄リストを増やす
- 出来高の条件を追加する
- 高値判定を足す
- 通知のフォーマットを見やすく整える
- 日次スケジュール実行に切り替える

いきなり全部やる必要はありません。
1つ足して、動かして、確認して、また1つ足す。
前回の記事で書いた「小さい改善の反復で育てる」を、ここから実際に回していく形です。

次の記事では、このトレードテンプレートチェックに出来高条件と高値判定を足して、もう少し実用的な候補抽出に近づけていきます。


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

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