株の売買判断をPythonでスコア化してみた|RSI・MACD・出来高を点数化

株の売買判断をPythonでスコア化してみた|RSI・MACD・出来高を点数化【AI株ツール開発】 AIツール

これまでChatGPTを使いながら、プログラミング未経験の状態から日本株の投資支援・自動売買ツールを作っています。株価データを取得したり、テクニカル指標を計算したり、複数の銘柄をまとめて分析したりと、少しずつ機能を追加してきました。

その開発途中でAIから提案されたのが、

「複数のテクニカル指標を点数化して、銘柄ごとに売買スコアを出す」

という方法です。

例えば、

  • RSI
  • 移動平均線
  • 出来高
  • MACD
  • ボリンジャーバンド
  • ADX

などの情報を組み合わせて、銘柄を評価します。

最終的には銘柄ごとに、

SCORE

を表示し、その点数からBUY・HOLD・SELLなどを判定する仕組みです。

今回は、プログラミング未経験の自分がAIと一緒に売買スコアを作っていった過程と、実際に作ってみて感じたことをまとめます。

そもそも「売買判断を点数にする」という発想がなかった

自動売買ツールを作る以上、売買には何らかの条件を設定する必要があることは分かっていました。

ただ、自分の中では、

「RSIが○○以下なら買い」

「移動平均線がこうなったら買い」

といった条件を、一つずつ自分で指定していくイメージでした。

そもそも、

複数の条件を加点・減点して、最終的に一つのスコアとして評価する

という発想自体がありませんでした。

この方法を提案してきたのはAI側です。

RSIや移動平均線などのテクニカル指標を組み合わせ、それぞれの条件に点数を付けて売買判断に使う方法を提案され、

「それなら一度やってみよう」

と採用しました。

自分から一つずつテクニカル指標を指定していくと思っていたので、条件設定の考え方までAI側から提案されたのは少し意外でした。

もちろん、現在使っている条件や点数を完成形だとは考えていません。

今はいったんAIの提案をベースに開発を進め、実際のお金を投入する前にバックテストを重ねながら、条件や点数を変更していく予定です。

最初はシンプルなスコアから作った

いきなり大量の条件を組み込んだわけではありません。

まずは基本的なテクニカル指標を使って、条件に応じてスコアを加点・減点するところから始めました。

例えばRSI。

RSIは、一般的に相場の買われすぎ・売られすぎを見るために使われる指標です。

開発では、RSIの数値に応じて、

条件を満たしたら加点

逆の条件なら減点

という形でスコアへ反映するようにしました。

ここから徐々に、

「RSIだけで判断するのではなく、ほかの指標も組み合わせた方がいいのでは?」

という形で機能を追加していきました。

移動平均線とトレンド判定を追加

次に追加したのが移動平均線です。

開発したデータには、

  • MA5
  • MA25
  • MA75

を持たせています。

さらに、単に移動平均線の数値を見るだけではなく、

上昇トレンドなのか

下降トレンドなのか

も判定するようにしました。

その後、

MA5とMA25の位置関係

もスコアへ反映。

短期の移動平均線が長期の移動平均線を上回っているのか、下回っているのかを見ることで、株価の方向性をスコアに加えるようにしました。

ゴールデンクロス・デッドクロスも判定

さらにMA5とMA25から、

  • GOLDEN
  • DEAD
  • NEUTRAL

を判定する仕組みも追加しました。

いわゆる、

ゴールデンクロス

デッドクロス

です。

最初は単純なRSI中心だったスコアが、徐々に、

現在の株価水準

だけではなく、

株価がどちらへ動いているのか

も見る仕組みに変わっていきました。

出来高もスコアに入れる

株価だけでなく、出来高も見るようにしました。

追加したのが、

20日平均出来高

と、

出来高倍率(VOLUME_RATIO)

です。

普段より出来高が増えているのか、減っているのかを見るための指標です。

同じような値動きでも、

出来高を伴って動いている銘柄

と、

ほとんど出来高がない銘柄

では意味が違う可能性があります。

そこで、出来高も売買判断の材料としてスコアへ組み込んでいきました。

RSIも「数値」だけでなく方向を見る

RSIについても、単純に現在値だけを見るのではなく、

RSI_TREND

を追加しました。

例えば同じRSIでも、

上昇している途中なのか

下降している途中なのか

によって状況は違います。

そのため、現在のRSIだけではなく、その方向性も判定材料として使えるようにしました。

MACDも追加

さらに追加したのがMACDです。

データには、

  • MACD
  • MACD_SIGNAL
  • MACD_HIST
  • MACD_CROSS

などを持たせています。

MACDとシグナル線の位置関係やクロスを使い、トレンドの変化を売買スコアへ反映できるようにしました。

実際の分析結果では、

「MACDがシグナル線より下(-15)」

といった形で、スコアの減点理由として表示されるようになっています。

ボリンジャーバンドも判定材料に

ボリンジャーバンドも追加しました。

データには、

  • BB_UPPER
  • BB_LOWER

を持たせています。

株価がボリンジャーバンドの上限・下限に対してどの位置にあるのかを確認します。

例えば実際の分析結果では、

「株価がボリンジャーバンド下限付近(+15)」

といった形で加点理由として表示されるケースがあります。

単純に「株価が下がっているから悪い」とするのではなく、

現在の株価がテクニカル的にどの位置にいるのか

もスコアへ反映するようになりました。

ADXも追加してトレンドの強さを見る

その後、ADXも分析データへ追加しました。

ADXはトレンドの強さを見るための指標です。

移動平均線やMACDで方向を見るだけではなく、

そのトレンド自体にどの程度の強さがあるのか

という情報も確認できるようにしています。

こうして最初は比較的シンプルだった分析に、

RSI

移動平均線

MAクロス

トレンド

出来高

MACD

ボリンジャーバンド

ADX

などが徐々に追加されていきました。

点数だけでは「なぜ?」が分からない

ここでもう一つ追加したのが、

判定理由の表示

です。

例えば、

SCORE:15

とだけ表示されても、なぜ15点になったのか分かりません。

そこで、各銘柄について、

  • RSI下降中(-10)
  • MACDがシグナル線より下(-15)
  • 株価がボリンジャーバンド下限付近(+15)
  • 下降トレンド(-15)
  • 5日線<25日線(-10)

といった形で、

「何がプラスで、何がマイナスだったのか」

を表示するようにしました。

これによって、

AIが何となく「買い」「売り」と言っている状態

ではなく、

どの条件によってその点数になったのか

を確認できるようになりました。

【AI STOCK MONITORのスコア・SIGNAL・判定理由が分かる実画面】

複数のテクニカル指標を使って銘柄ごとにSCOREとSIGNALを表示。点数だけではなく、なぜそのスコアになったのかも確認できるようにしました。

複数銘柄を同じ基準で比較する

スコアリングを作った理由の一つとして、複数銘柄を同じ基準で比較できるというメリットがあります。

開発では監視対象を複数銘柄へ拡大しました。

それぞれについて同じルールでスコアを計算し、

どの銘柄のスコアが高いのか

を比較します。

さらに分析結果では、

TOP3

や、

BUY候補

SELL候補

といった形で候補を表示できるところまで進めました。

人間が一つずつチャートを開いて確認するのではなく、

まずPythonで候補を絞り、その後詳しく確認する

という使い方を想定しています。

指標を増やせば勝てるようになるのか?

ここまで作ると、一見かなり「それっぽい」売買判定ツールになってきます。

ただし、ここで重要なのが、

スコアが高い銘柄を買えば、本当に良い結果につながるのか?

という問題です。

テクニカル指標をたくさん入れたからといって、それだけで利益が出るとは限りません。

例えば、

RSIを何点にするのか。

MACDを何点にするのか。

どこからBUY判定にするのか。

どこからSELL判定にするのか。

ADXをどう評価へ使うのか。

こうした条件次第で結果は変わります。

今のスコアにはまだ満足していない

当時は、RSIや移動平均、出来高、MACD、ADXなど、見る情報を増やして条件を組み合わせれば、売買判断を改善できるのではないかと考えていました。

ただ、現状の結果に満足しているわけではありません。

また、条件を増やせば必ず精度が上がるとも限りません。

条件を厳しくしすぎれば、

ほとんど売買シグナルが出なくなる

可能性もあります。

さらに、過去のデータに合わせて条件を細かく調整しすぎると、バックテストでは良い結果でも、実際の相場では機能しない可能性があります。

今はいったんツール全体の開発を先に進めていますが、実際のお金を投入する前には、各指標の数値や条件をいろいろ変えて検証する予定です。

その中から、

「どういう条件の組み合わせが有効なのか」

を研究したうえで、実運用に持っていきたいと思っています。

今のスコアリングは完成版というより、

まず開発を前に進めるための暫定版

という位置付けです。

だからバックテストが必要になった

スコアリングを作っただけでは、

その条件が本当に過去の相場で機能していたのか

は分かりません。

そこで過去の株価データを使い、

この条件で買っていたらどうなっていたのか

どの条件で売っていたらどうなっていたのか

を検証します。

実際にバックテストを行った際には、

  • 決済済み取引:12回
  • 勝ち:7回
  • 負け:5回
  • 勝率:58.3%
  • 合計損益:13,310

という結果も出ました。

ただし、試行回数はまだ12回しかありません。

この数字だけで、

「勝率58.3%だから、この売買ルールは使える」

とは考えていません。

今後は対象期間や銘柄、スコア条件などを変えながら、より多くの取引で検証していく必要があります。

※バックテストを初めて実装したときの結果や、勝率58.3%をどう考えたかについては、**「株のバックテストとは?プログラミング未経験者がPythonで実際に試してみた」**で詳しくまとめています。

プログラミング未経験でもここまでは作れた

今回のスコアリング機能も、自分一人でゼロからコードを書いたわけではありません。

基本的には、

「次は何を作ればいい?」

とAIに相談し、

提案された機能について説明を受け、

実装し、

実行結果を確認しながら進めています。

スコアリングという考え方自体もAIから提案されたものでした。

プログラミング経験がないので、自分だけで開発していたら、

RSI → 移動平均 → 出来高 → MACD → ADX

と機能を追加していくところまで進められたかは分かりません。

一方で、AIが提案したものをそのまま信用して実際のお金を投入するつもりもありません。

AIに開発を手伝ってもらうこと

と、

その売買ルールが本当に有効なのか

は別の話です。

ここは実際のデータを使って検証する必要があると考えています。

現在は「完成させる」ことを優先

現時点では、一つ一つのテクニカル指標を徹底的に最適化するより、

まず日本株AI投資支援・自動売買ツール全体を形にする

ことを優先しています。

一通りの機能を実装した後、

バックテスト
↓
条件変更
↓
再テスト
↓
結果比較

を繰り返して、現在の暫定的なスコアを改善していく予定です。

実際のお金を投入するのは、その検証を十分に行ってからです。

まとめ:AIの提案から始まった売買スコアはまだ暫定版

今回は、日本株AI投資支援・自動売買ツールで作っている売買スコアについてまとめました。

最初から自分で、

「RSIを何点、MACDを何点にしよう」

と設計したわけではありません。

そもそも売買判断をスコア化するという発想自体がなく、AIから提案されて採用したのがスタートです。

そこから、

  • RSI
  • 移動平均線
  • MAクロス
  • トレンド
  • 出来高
  • MACD
  • ボリンジャーバンド
  • ADX

などの情報を追加。

さらに、

SCORE

だけではなく、

なぜその点数になったのか

まで確認できるようになりました。

複数銘柄を同じルールで評価し、候補を絞るという形も少しずつできています。

ただし、

今のスコアが完成版だとは考えていません。

むしろ、ここからが重要です。

実際のお金を投入する前に、各指標の条件や加点・減点幅、BUY/SELLの閾値などを変えながらバックテストを繰り返し、

実運用でも有効性が期待できる条件なのか

を検証していきたいと思っています。

現段階では、まずツール全体の開発を前へ進めます。

そして一通り形になったところで、売買条件の検証と改善に戻る予定です。

コメント

タイトルとURLをコピーしました