楽天証券の口座でデイトレの自動売買に挑戦しようと、Windows / Excel 上で動作する マーケットスピード II RSS を利用した Python アプリ (Kabuto) を開発しています。今月は、来るゴールデン・ウィークに存分に強化学習モデルのバックテストができるように準備を進めています。
今日の日経平均株価
| 現在値 | 58,475.90 | -1,042.44 | -1.75% | 15:45 | |
|---|---|---|---|---|---|
| 前日終値 | 59,518.34 | 04/16 | 高値 | 59,381.25 | 09:02 |
| 始値 | 59,255.09 | 09:00 | 安値 | 58,475.90 | 15:30 |
※ 右の 15 分足チャートは Yahoo! Finance のデータを yfinance で取得して作成しました。
【関連ニュース】
- アンソロピック、AIモデル「オーパス4.7」発表-強力で広く利用可能 - Bloomberg [2026-04-17]
- 【欧州市況】ユーロ圏国債上昇、英国債は逆行安-株価は上げ消す - Bloomberg [2026-04-17]
- アンソロピック「ミトス」、トランプ政権が政府機関の使用許可へ - Bloomberg [2026-04-17]
- 【米国市況】S&P500は連日で最高値更新、中東巡る報道意識-原油上昇 - Bloomberg [2026-04-17]
- 植田日銀総裁、中東情勢踏まえた政策判断「難しい」ー方向性は示さず - Bloomberg [2026-04-17]
- 米政権、アンソロピック「ミトス」を政府機関に提供へ=報道 | ロイター [2026-04-17]
- ショックの持続性や経済環境踏まえ、物価目標の観点で政策選択=日銀総裁 | ロイター [2026-04-17]
- プライベートクレジットファンド、ウォール街の銀行からの圧力が強化 - Bloomberg [2026-04-17]
- 政府、ソニーGのイメージセンサー新工場に最大600億円補助 | ロイター [2026-04-17]
- ステランティスとMSがAI提携 100件以上の共同開発目指す | ロイター [2026-04-17]
- オープンAI、生命科学研究向けAIモデル「GPTロザリンド」発表 | ロイター [2026-04-17]
- OpenAIが創薬支援のAIモデル、医療データを活用-グーグルに対抗へ - Bloomberg [2026-04-17]
- アンソロピックが急いだ「ミトス」検証、公開できない新AIの脅威に広がる動揺 - Bloomberg [2026-04-17]
- 日経平均は4日ぶり反落、前日の反動や見極めムードで | ロイター [2026-04-17]
- 【日本市況】円軟調、原油高止まりや日銀利上げ観測後退-株式は反落 - Bloomberg [2026-04-17]
強化学習の沼
月末から始まるゴールデンウィークにゆっくりバックテストができそうなので、それまでにどれだけ強化学習モデルを育てられるかに挑んでいます。
学習環境 TrainingEnv(gymnasium.Env)
学習環境の概略です。
- 行動空間 Action Space
- HOLD : 何もしない
- BUY : 「買建」または「返済」
- SELL : 「売建」または「返済」
- 「返済」を行動空間に加えると学習が進まなかったことを踏まえ「返済」は環境側で制御。ナンピン禁止を行動マスクで制御
- PositionType に対する mask [HOLD, BUY, SELL]
- WARMUP [True, False, False](寄り付き後、売買できない期間を設定)
- NONE [True, True, True ]
- LONG [True, False, True ]
- SHORT [True, True, False]
- 観測空間 Observation Space
- 株価、インジケータなど [-inf, +inf](おまかせ「標準化」)
- Price : 株価
- MA1 : 短周期の移動平均
- MA2 : 長周期の移動平均
- VWAP : 出来高加重平均価格
- Profit : 含み損益
- クロス関連 [-inf, +inf](符号が重要なので「標準化」なし)
- DiffMA : MA乖離率 = (MA1 - MA2) / MA2
- DiffVWAP : VWAP乖離率 = (MA1 - VWAP) / VWAP
- カウンタ関連 [0, +inf](おまかせ「標準化」)
- n_trade : 約定回数
- count_negative : 含み損の継続カウンタ
- ポジションを One-Hot エンコーディング
- SHORT [1. 0. 0.]
- NONE [0. 1. 0.]
- LONG [0. 0. 1.]
- 報酬 Rewards
- 建玉なし : 報酬なし
- 建玉保持 : 含み損益の一定割合を付与+前ステップの含み益からの増減の一定割合を付与
- 買建/売建時 : ゴールデン/デッド クロス・シグナルと一致していれば、約定コストを相殺+αを付与
- 返済時 : 直前の含み損益を付与
- 約定コスト : 建玉、返済時いずれも固定の約定コストを引く
- 連続含み損 : 許容回数を超えたらペナルティを急激に増大
- 終了条件 Episode End
- terminated
- "目的を達成した/失敗した" など、エージェント側の原因で終了
- 終端として扱う(価値は 0)
- なし(「約定回数の上限で終了」を評価予定)
- truncated
- 時間制限・ステップ制限・データ終端など “外的理由” で終了
- 終端ではない(価値を bootstrap)
- ティックデータが最終行に達した時
- 終了時、建玉があれば強制返済。報酬条件、約定コストは同じ
- 約定回数に応じて報酬付与。現在は 25 回が極大になる式を適用(ただし約定回数は偶数)。
今回は、学習時のティックデータの終端の truncated 処理でエピソードを終了する際に、約定回数から下記の式で報酬を与えるようにしました。
\[ \Delta R = r_{\max}\,\frac{n_{\text{trade}}}{n}\,\exp\!\left(1-\frac{n_{\text{trade}}}{n}\right) \]望ましい約定回数 \(n_{\text{trade}}\) で、報酬が極大 \(r_{\max}\) になります。また、約定回数が \(0\) の時は報酬も \(0\) になります。深い根拠はありませんが現在のところ \(n_{\text{trade}} = 25\) としています。
報酬についても妥当な大きさが皆目判らなかったので、\(r_{\max} = 10\) と適当に設定しています。
複数のティックデータで訓練
過去 20 日分のティックデータに対し、最初のティックデータは 100 エピソード、残りは 50 エピソードの学習を実施しました。
学習トレンドを見る限り、約定回数 (transactions) のトレンドが 0 に収束するようには見えません。推論で 100 を超えるようであれば報酬を調節します。
推論 - 今日のティックデータ
まだ推論と呼べるほど立派ではありませんが、過去 20 日分のティックデータで学習したモデルを使って、過去 19 日分のデータ + 今日のティックデータに対して推論しました。
今日のティックデータ分のレビュー
収益結果はマイナスになってしまいましたが、昨日と異なり、まんべんなく売買されています。この週末に学習用と推論用の環境を分けて、推論用環境にロスカットする機能を実装してどうなるか確認したいです。
また、週末は学習終端における約定回数に関連する報酬量を調節して、学習結果の違いも確認します。
参考サイト
- マーケットスピード II RSS | 楽天証券のトレーディングツール
- マーケットスピード II RSS 関数マニュアル
- 注文 | マーケットスピード II RSS オンラインヘルプ | 楽天証券のトレーディングツール
- PythonでGUIを設計 | Qtの公式Pythonバインディング
- Python in Excel alternative: Open. Self-hosted. No limits.
- Book - xlwings Documentation




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