Pythonで日本株の投資支援・自動売買ツールを自作しています。
前回は、100万円の仮想資金でPaper Tradingを行うために、
- 1銘柄への投資上限
- 1日の損失上限
- 異常時に新しい取引を止める仕組み
などを作りました。(前回記事: 100万円でPaper Tradingする前に。日本株自動売買に資金管理と緊急停止を実装)
ただし、この時点ではそれぞれの機能が動いているだけで、
「AIが株を分析して買い候補を出し、人間の確認を経て仮想注文へ進む」
ところまではつながっていませんでした。
そこで今回は、
株価データ
↓
AIが売買判断
↓
買い候補を選ぶ
↓
自分で確認
↓
注文直前にもう一度安全確認
↓
仮想注文
という一連の流れを作りました。
まず「いつの株価で判断するか」を整理した
最初に見直したのが日足データです。
例えば14時にその日の株価を取得しても、まだ市場は動いています。
その時点の株価を「今日の終値」としてAIに渡してしまうと、実際にはまだ完成していないデータで売買判断することになります。
そこで、
取引が終了した営業日の日足だけをAIに渡す
ようにしました。
祝日などもあるため、単純に平日かどうかではなく、日本市場の営業日も判定します。
これで、
確定したデータで判断し、その後の取引日に注文する
という時間関係を明確にしました。
開発中に「2種類の株価」の問題が見つかった
今回、特に重要だったのが株価の扱いです。
バックテストでは、株式分割などを考慮した調整済みの株価を使って分析していました。
一方、証券会社から取得する現在値は、実際に市場で売買されている株価です。
分析だけなら大きな問題にはなりません。
しかし、
「100株買うにはいくら必要か」
を計算するときまで分析用の株価を使うのは危険です。
そこで用途を分けました。
AIが銘柄を分析する
→ 分析用の調整済み株価
実際の注文金額や必要資金を計算する
→ 証券会社から取得した現在の株価
という使い分けです。
無理に2つの価格を変換して合わせることもしません。
分析するための価格と、お金を動かすための価格は別物として扱う
ことにしました。
人間がOKしても、そのまま注文しない
最初のPaper Tradingでは、AIが選んだ銘柄を自動的に注文する予定はありません。
まずAIが買い候補を出し、
最終的に自分で確認する
形にします。
ただし、ここでも問題があります。
例えば10時に株価を見て「買ってよい」と判断しても、数分後には株価が大きく変わっているかもしれません。
そこで、人間による承認には5分間の有効期限を設定しました。
さらに重要なのは、
承認したときの株価をそのまま注文に使わない
ことです。
注文する直前にもう一度最新の株価を取得します。
そして、
- 資金は足りているか
- 1日の損失上限に達していないか
- 投資上限を超えないか
- システムに異常がないか
を再確認します。
つまり、
AIが買いたい
↓
人間もOK
↓
最後にシステムもOK
となって初めて注文へ進みます。
株価データにも有効期限を付けた
注文直前に取得する株価についても、
取得できたから使ってよい
とはしませんでした。
時間が経てば、その株価も古くなるからです。
今回の仕組みでは、注文判断に使う市場データは基本的に5秒以内のものに限定しています。
5秒を超えた場合は、そのまま注文せず新しいデータを取得します。
人間の承認は5分。
注文に使う株価は5秒。
同じ「有効期限」でも、役割によってかなり違います。
これまで作った機能を一本につないだ
ここまで準備して、ようやく一連の流れをつなぎました。
現在は、
完成した日足を取得
↓
AIが分析
↓
買い候補を選ぶ
↓
自分で確認
↓
最新の株価を取得
↓
資金・損失・安全性を再確認
↓
仮想注文を送る
ところまで動きます。
この一連の流れについて6つのケースで確認し、
6ケースすべて正常に通過
しました。
これで、これまで個別に作ってきた機能が、
「AIの判断から仮想注文まで」
一本につながりました。

ただし「注文した」と「買えた」は違う
ここまでが、今回実装した範囲です。
重要なのは、
まだ株を買えたことにはしていない
という点です。
例えば100株の買い注文を出しても、その瞬間に100株保有したことにはしません。
実際の株取引でも、
注文を出す
ことと、
注文が成立する
ことは別だからです。
現在できているのは、
「この条件なら100株を買いたい」という仮想注文を出すところまで
です。
現金や保有株はまだ変化しません。
次は「本当にその価格で買えたのか」を再現する
次の課題はかなり分かりやすくなりました。
例えば、
3,000円で100株買いたい
という注文を出したとします。
では、
- 本当に3,000円で買えたのか
- その価格まで株価が動いたのか
- 注文した瞬間の価格で買えたことにしてよいのか
- 買えなかった場合はどうするのか
を決める必要があります。
Paper Tradingなのに、
注文を出せば必ずその価格で買える
としてしまえば、実際の取引とは離れてしまいます。
次は実際の市場データを使って、
「この注文は本当に成立したことにしてよいか」
を判定する仕組みを作ります。
まとめ
今回は、これまで個別に作ってきた機能をつなぎ、
AIの売買判断から仮想注文まで
を一連の流れとして動かしました。
その途中では、
分析に使う株価と、実際の注文金額を計算する株価は分ける
という重要な修正も行いました。
さらに、
- 完成した日足だけで判断する
- AIの候補を自分で確認する
- 人間の承認は5分で失効
- 注文時には最新の株価を取り直す
- 資金や損失上限をもう一度確認する
- 注文に使う株価は5秒以内
という条件も追加しています。
最終的に、
AI分析 → 買い候補 → 人間の確認 → 安全確認 → 仮想注文
までをつなぎ、6つの確認ケースをすべて通過しました。
ただし、
注文を出せるようになっただけで、まだ約定はさせていません。
次は、
「その注文は実際の市場なら本当に成立したのか」
を判定する仕組みを作ります。(続編記事:仮想注文は本当に約定した?日本株Paper Tradingに約定判定を実装)
自動売買ツール開発の現在地
バックテスト・売買ルールの検証
✓ 完了
↓
証券会社API・実際の市場データ取得
✓ 完了
↓
安全対策・資金管理・緊急停止
✓ 完了
↓
AI判断から仮想注文まで
✓ 今回ここまで
↓
実際の市場データを使った仮想約定
→ 次回
↓
Paper Tradingで継続検証
↓
少額で、注文前に自分で確認する実運用
↓
実運用の結果を確認しながら段階的に自動化



コメント