楽天証券の口座でデイトレの自動売買に挑戦しようと Windows / Excel 上で利用できる マーケットスピード II RSS を活用して Python であれこれ取り組んでいます。この「自動売買への道」のトピックでは、プログラミングの話題にも踏み込んで、日々の活動をまとめていきます。
今日の日経平均株価
| 現在値 | 50,376.53 | -905.30 | -1.77% | 15:30 | |
|---|---|---|---|---|---|
| 前日終値 | 51,281.83 | 11/13 | 高値 | 50,767.74 | 09:00 |
| 始値 | 50,767.74 | 09:00 | 安値 | 50,246.60 | 09:09 |
※ 右の 15 分足チャートは Yahoo! Finance のデータを yfinance で取得して作成しました。
【関連ニュース】
- 米アクティビスト、伊藤忠食品に非公開化要求-株価ストップ高に - Bloomberg [2025-11-14]
- 東レ、発行済み株式の4.2%・500億円上限に自社株買い | ロイター [2025-11-14]
- 日経平均が905円安と大幅反落、取引終了にかけ弱含む=14日後場 速報 | 株式新聞Web [2025-11-14]
デイトレ用自作アプリ
以下は株価に関連する情報の流れを示しています。
楽天証券では、Python からネットワーク越しに直接取引できるような API が提供されていないので、マーケットスピード II RSS を介して取引をする構成を取っています。
現在は、強化学習を利用した取引モデルの開発に取り組んでいます。
取引回数の制限 (2)
過去のティックデータで学習したモデルで推論すると、取引回数が多いほど損失が大きくなるという相関を確認できました。
そこで、取引回数に上限を設定するとして、当初は生成 AI が提案した、取引できる残り回数が少なくなるほど観測値の変化が急になる報酬関数を採用しました。しかし、モデルはその変化に過敏に反応しすぎているように見えたので、今回は直線的にカウントダウンするように観測値を調整しました。。
import numpy as np
def scaled_remaining(trade_counter, max_trade_count):
return trade_counter / max_trade_count
下の観測値の検証用トレンドチャートの、下から 4 番目の TRADE という観測値が取引回数のカウントダウンですが、この例では取引回数が少なすぎてカウントダウンの様子は確認できませんでした。
推論の実行例
過去データ ticks_20251009.xlsx の銘柄 7011 について推論します。
モデル models/ppo_7011.zip を読み込みます。
Wrapping the env with a `Monitor` wrapper
Wrapping the env in a DummyVecEnv.
注文日時 銘柄コード 売買 約定単価 約定数量 損益
0 2025-10-09 09:01:10 7011 買建 4320 1 NaN
1 2025-10-09 09:01:13 7011 売埋 4321 1 1.0
2 2025-10-09 09:01:14 7011 売建 4336 1 NaN
3 2025-10-09 15:24:59 7011 買埋(強制返済) 4203 1 133.0
一株当りの損益 : 134.0 円
モデルへの報酬分布
n: 19391, mean: 2.876, stdev: 1.222
観測数 : 11
マラソンテストのパフォーマンス (3)
三度、過去データ全てで学習をさせて、その学習モデルで同じ過去データを推論させました。
取引回数が 100 回に張り付くこと頻度は少し減りましたがまだまだ多いです。まるで取引回数が 100 回になるように誘導しているみたいです。
あと何回取引できるかを観測値にしてモデルに知らせることが仇になっているような気がしないでもありません。
ちなみに、マラソンテストの前に観測値のトレンドを確認したティックデータをマラソンテスト用の学習済みモデルで推論した結果は以下のようになりました。
推論の実行例
過去データ ticks_20251009.xlsx の銘柄 7011 について推論します。
モデル models/ppo_7011.zip を読み込みます。
Wrapping the env with a `Monitor` wrapper
Wrapping the env in a DummyVecEnv.
注文日時 銘柄コード 売買 約定単価 約定数量 損益
0 2025-10-09 09:01:10 7011 買建 4320 1 NaN
1 2025-10-09 09:01:31 7011 売埋 4317 1 -3.0
2 2025-10-09 09:01:32 7011 買建 4318 1 NaN
3 2025-10-09 09:01:40 7011 売埋 4314 1 -4.0
4 2025-10-09 09:01:42 7011 買建 4311 1 NaN
.. ... ... ... ... ... ...
65 2025-10-09 14:38:42 7011 売埋 4188 1 -2.0
66 2025-10-09 14:39:02 7011 買建 4190 1 NaN
67 2025-10-09 14:40:54 7011 売埋 4188 1 -2.0
68 2025-10-09 14:46:40 7011 買建 4182 1 NaN
69 2025-10-09 15:24:59 7011 売埋(強制返済) 4203 1 21.0
[70 rows x 6 columns]
一株当りの損益 : -100.0 円
モデルへの報酬分布
n: 19391, mean: 0.646, stdev: 0.495
観測数 : 11
報酬分布はプラス方向にしっかり寄っているのにもかかわらず、実際の収益が大きくマイナスになってしまっています。
これは、建玉を長く保持すればするだけ報酬を多く付与しているためです。その結果生じる報酬と収益との乖離も課題です。
しかし、この週末は、まず取引回数をそこそこの回数に抑えることに注力したいと思います。
参考サイト
- マーケットスピード II RSS | 楽天証券のトレーディングツール
- マーケットスピード II RSS 関数マニュアル
- 注文 | マーケットスピード II RSS オンラインヘルプ | 楽天証券のトレーディングツール
- Gymnasium Documentation
- Stable-Baselines3 Docs - Reliable Reinforcement Learning Implementations
- Maskable PPO — Stable Baselines3 - documentation
- PyTorch documentation
- PythonでGUIを設計 | Qtの公式Pythonバインディング
- Python in Excel alternative: Open. Self-hosted. No limits.
- Book - xlwings Documentation








0 件のコメント:
コメントを投稿