楽天証券の口座でデイトレの自動売買に挑戦しようと Windows / Excel 上で利用できる マーケットスピード II RSS を活用して Python であれこれ取り組んでいます。この「自動売買への道」のトピックでは、プログラミングの話題にも踏み込んで、日々の活動をまとめていきます。
デイトレ用自作アプリ
以下は株価に関連する情報の流れを示しています。
株価データの流れ(Windows 11)
楽天証券では、Python からネットワーク越しに直接取引できるような API が提供されていないので、マーケットスピード II RSS を介して取引をする構成を取っています。
強化学習のシステム作成
GPT-5 をはじめとした生成 AI に PPO エージェントのサンプルを提案してもらって、運良く良さげな学習効果が得られるものがあれば、そのコードを徹底的にレビューして、自分で使いこなせるようにしようという都合の良いことを考えていました。
強化学習、最初の一歩
やりとりを重ねる中で環境クラスのバグ修正やパラメータ調整などを経て、過去のティックデータ(概ね取引時間中の秒単位のティックデータ、19,270 秒分 )を使って学習曲線を確認できる程度まで改良が進みました。
売買条件の制約が厳しい中で学習が進むとは、ちょっと感激です。生成 AI の力を借りての成果です。しかし、情けない話ですが GPT-5 に提案してもらった PPO エージェント側のコードの理解が進んでいないので、今回は学習曲線の紹介だけです。
対象のティックデータ
今回使用したティックデータは、三菱重工業 (7011) の 2025-08-19 のものです。なぜこの日なのかというと、毎日取得しているティックデータに出来高 (Volume) の情報を加え始めたのがこの日からだったためです。
三菱重工業 (7011) の 2025-08-19 のティックデータ(株価のみ)
ランダム・エージェント
実のところ、前回の環境クラスの設定でも売買アクションが極端な方向に偏ってしまって学習が進みませんでした。
GPT-5 から環境クラスのパラメータの調整を提案されたので、それを反映しています。そのため、前回と同じ方法でランダム・エージェントの結果を確認しています。
今回使用した環境クラスのランダム・エージェントによる報酬分布
なお、ヒストグラムの縦軸は対数スケールです。
学習曲線
最初は 100 回の繰り返しで学習効果を確認したところ、報酬 (reward)、損益 (PnL) 共に変化を確認できたので、1,000 回繰り返して学習曲線をプロットしました。
1000 回繰り返したときの学習曲線(モデルへの報酬と損益)
最初の 100 回の繰り返しで目に見えて報酬 (reward)、損益 (PnL) どちらも増加しましたが、その後は微増の推移に留まってしまいました。そのため手放しでは喜べませんが、それでも学習初期段階でモデル報酬の顕著な変化(つまり、学習が進んだこと)を確認できたことは大きな一歩です。
一方、肝心な損益の変化を見ると、初期段階から話にならないほど損益が悪いわけではないことが気にかかります。建玉を一単位しか持たないという制約のため、有効な売買が進んでいないからなのでしょうが、モデルへの報酬と実際の損益との関係が乖離しています。有効な売買へ誘導するような工夫を報酬設計に加える必要があるのかもしれません。
ただ、ここでの損益は 1 株単位の値なので、今回使用したティックデータの値動きで、もしも +100 円程度の損益を安定的に期待できるのであれば、それはむしろ上出来であるとも言えそうです。学習曲線のばらつきの中で +100 円以上のピークがいくつも存在しているので、そういった状況を安定的に実現できるのであれば、それなりに使い物になるかもしれません。
いずれにしても取引詳細のログを取って評価する必要があります。
ちなみに GPT-5 と学習曲線のプロットを共有すると、下記のような反応でした。
画像ありがとうございます 🙏
学習曲線を拝見すると:
- Reward (上段)
- 初期で大きくマイナスに沈んだあと、すぐにリカバーして 0 付近に収束。
- ただし、その後は Reward がほとんど改善せず「横ばい」。 → 報酬関数がペナルティと利益のバランスで拮抗している可能性があります。
- Reward (スケール調整, 中段)
- -200 前後を中心にランダムノイズっぽい変動。
- 安定はしているが、明確な改善トレンドが見えない。
- 1株収益 (PnL, 下段)
- 学習初期に大きく変動しているが、100 Epoch 以降は 0〜+50 円程度に収束。
- スムージング曲線も安定していて「損はしないが大きく勝ててもいない」状態。
🔎 解釈すると:
- 現状の設定では「安定はしているがリターンが小さい」。
- PPO 自体は暴走していないので「安定版学習ループ」としては良好。
- ただし実運用でプラスを狙うには 報酬設計や探索性 を少し改善する余地あり。
👉 次のステップ候補:
- 報酬設計の調整
- 小さな利益でも積み上げられるように「微益をプラスに強調」する。
- 制約違反ペナルティが強すぎる場合は弱める。
- ハイパーパラメータの再調整
- 学習率 (lr) をもう少し下げると Reward が安定化するかも。
- γ(割引率)を 0.99 → 0.995 へ上げて長期収益を重視。
- 環境の拡張
- 特徴量を増やす(例: 出来高、ボリンジャーバンド、VWAP)。
- 特に「トレンドを掴む」指標が有効かもしれません。
生成 AI は画像を添付しても解釈できたことを客観的にまとめてくれます。その上、改善提案をすぐに出してくれるのはありがたいのですが、素直に従って行動すると、いつの間にか本来考えていたのと違う方向へ進んでしまっている場合があります。
そうならないように、参考にはするものの、一旦、立ち止まって考え直すことにしています。😁
次のステップ
生成 AI に PPO エージェントのサンプルを提案してもらって学習効果が得られるコードが得られたので、次は自分でスクラッチから同様なコードを書けるようにすることです。環境クラスの時とは異なり、こちらは少し時間がかかりそうです。
確認できたことや理解できたことなどを本ブログにまとめていきます。
課 題
現在、課題と考えていることを下記にまとめました[随時更新〗。
- マーケットスピード II RSS による売買
- Excel VBA, Python 側で実際の売買を試す。
- 売買のためのサンプルワーク
- PyTorch を利用した強化学習モデルの実用化
- 環境クラス(gymnasium 準拠)の作成 ✓
- PPO エージェントの作成
参考サイト
- マーケットスピード II RSS | 楽天証券のトレーディングツール
- マーケットスピード II RSS 関数マニュアル
- 注文 | マーケットスピード II RSS オンラインヘルプ | 楽天証券のトレーディングツール
- PythonでGUIを設計 | Qtの公式Pythonバインディング
- PyQtGraph - Scientific Graphics and GUI Library for Python
- Python in Excel alternative: Open. Self-hosted. No limits.
- Book - xlwings Documentation