2026-04-15

自動売買への道 (2026-04-15)

楽天証券の口座でデイトレの自動売買に挑戦しようと、Windows / Excel 上で動作する マーケットスピード II RSS を利用した Python アプリ (Kabuto) を開発しています。今月は、来るゴールデン・ウィークに存分に強化学習モデルのバックテストができるように準備を進めています。

今日の日経平均株価

現在値 58,134.24 +256.85 +0.44% 15:45
前日終値 57,877.39 04/14 高値 58,585.95 10:09
始値 58,265.18 09:00 安値 58,028.75 14:53

※ 右の 15 分足チャートは Yahoo! Finance のデータを yfinance で取得して作成しました。

【関連ニュース】

強化学習の沼

月末から始まるゴールデンウィークにゆっくりバックテストができそうなので、それまでにどれだけ強化学習モデルを育てられるかに挑んでいます。

学習環境 TrainingEnv(gymnasium.Env)

学習環境の概略です。

行動空間 Action Space
  1. HOLD : 何もしない
  2. BUY  : 「買建」または「返済」
  3. 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]
  1. Price - price0 : 株価 - 始値
  2. MA1 - price0   : 短周期の移動平均 - 始値
  3. DiffVWAP       : 乖離率 = (MA1 - VWAP) / VWAP
  4. Profit         : 含み損益
カウンタ関連 [0, +inf]
  1. n_trade        : 約定回数
  2. count_negative : 含み損の継続カウンタ
ポジションを One-Hot エンコーディング
  1. SHORT [1. 0. 0.]
  2. NONE  [0. 1. 0.]
  3. LONG  [0. 0. 1.]
報酬 Rewards
  • 建玉なし   : 報酬なし
  • 建玉保持   : 含み損益の一定割合を付与+前ステップの含み益からの増減の一定割合を付与
  • 買建時     : -DiffVWAP を付与
  • 売建時     : +DiffVWAP を付与
  • 返済時     : 直前の含み損益を付与
  • 約定コスト : 建玉、返済時いずれも固定の約定コストを引く
  • 連続含み損 : 許容回数を超えたらペナルティを急激に増大
終了条件 Episode End
  1. terminated
    • "目的を達成した/失敗した" など、エージェント側の原因で終了
    • 終端として扱う(価値は 0)
    1. なし(「約定回数の上限で終了」を評価予定)
  2. truncated
    • 時間制限・ステップ制限・データ終端など “外的理由” で終了
    • 終端ではない(価値を bootstrap)
    1. ティックデータが最終行に達した時
      • 終了時、建玉があれば強制返済。報酬条件、約定コストは同じ

いままで建玉保持時に含み益の一定割合を報酬として付与していましたが、これだけだと(数値化ができていませんが)最後まで建玉を保持して報酬を最大化する(= 約定回数が少なくなる)傾向が見られました。そこで、さらに前回からの含み益増減の一定割合も報酬・ペナルティに付与するようにしました。

複数のティックデータで学習

学習環境を少しだけ変更したので、過去 20 日分のティックデータに対し、最初のティックデータは 100 エピソード、残りは 50 エピソードの学習を実施しました。

過去 20 日分の学習における報酬 (episord_reward)、損益 (pnl)、約定回数 (transactions) トレンド

報酬 (episord_reward) は 0 をなかなか超えられていませんし、損益 (pnl) も安定していません。約定回数 (transactions) は、一旦 0 に収束する方向に進んだものの後半の学習で再び増加しています。約定回数 = 売買のイベントが一定頻度ある限り、報酬を増やせる有効な方策を追加することで報酬あるいは損益を改善できる余地があると考えています。

推論 - 今日のティックデータ

まだ推論と呼べるほど立派ではありませんが、過去 20 日分のティックデータで学習したモデルを使って、過去 19 日分のデータ + 今日のティックデータに対して推論しました。

本日のティックデータを含む過去 20 日分の、ティックデータ推論時の損益 (pnl) トレンド

今のところ学習時に利用した環境をそのまま推論でも利用しています。学習用の環境では、強制的なロスカットをしていないのですが、推論時にはモデルへの学習に影響を与えないので、実利を優先して条件を外れれば強制的なロスカットをする必要があります。

長期の運用を考慮して、学習用と推論用の環境を使い分ける準備をしています。

今日のティックデータ分のレビュー

現在は売買判定に利用していないテクニカルデータも含めてプロットしています。感覚的には収益はマイナスなのですが、実際はプラスになっています。🤔

各推論時の取引明細を確認できるように改善します。

本日のティックデータに対して推論したときの取引データ

参考サイト

  1. マーケットスピード II RSS | 楽天証券のトレーディングツール
  2. マーケットスピード II RSS 関数マニュアル
  3. 注文 | マーケットスピード II RSS オンラインヘルプ | 楽天証券のトレーディングツール
  4. PythonでGUIを設計 | Qtの公式Pythonバインディング
  5. Python in Excel alternative: Open. Self-hosted. No limits.
  6. Book - xlwings Documentation
にほんブログ村 株ブログ 株日記へ
PVアクセスランキング にほんブログ村