2026-04-24

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

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

今日の日経平均株価

現在値 59,716.18 +575.95 +0.97% 15:45
前日終値 59,140.23 04/23 高値 59,763.68 15:04
始値 59,407.44 09:00 安値 59,225.37 09:04

※ 右の 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. MA1 / 始値 : 短周期の移動平均
  2. Profit     : 含み損益
クロス関連 [-inf, +inf](符号が重要なので「標準化」なし)
  1. DiffMA   : MA乖離率 = (MA1 - MA2) / MA2
  2. DiffVWAP : VWAP乖離率 = (MA1 - VWAP) / VWAP
カウンタ関連 [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
  • 建玉なし    : ゴールデン/デッド クロス・シグナル近辺の報酬分布の一部をペナルティとして付与
  • 建玉保持    : 含み損益の一定割合を付与+前ステップの含み益からの増減の一定割合を付与
  • 買建/売建時 : 約定コスト(ペナルティ)+ゴールデン/デッド クロス・シグナル近辺の報酬分布から報酬を付与
  • 返済時      : 直前の含み損益を付与
  • 約定コスト  : 建玉、返済時いずれも固定の約定コストをペナルティとして引く
  • 連続含み損  : 許容回数を超えたらペナルティを急激に増大
終了条件 Episode End
  1. terminated
    • "目的を達成した/失敗した" など、エージェント側の原因で終了
    • 終端として扱う(価値は 0)
    1. なし(「約定回数の上限で終了」を評価予定)
  2. truncated
    • 時間制限・ステップ制限・データ終端など “外的理由” で終了
    • 終端ではない(価値を bootstrap)
    1. ティックデータが最終行に達した時
      • 終了時、建玉があれば強制返済。報酬条件、約定コストは同じ
      • 約定回数に応じて報酬付与。現在は 25 回が極大になる式を適用(ただし約定回数は偶数)。

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

昨日、過去のティックデータ全てに対して各 5 エピソード分のファイルリストの順番をシャッフルして初期学習を実施したところ、モデルの報酬トレンドがプラス圏に定着せず、学習量に物足りなさを感じました。

そこで 5 → 20 エピソードに増やして昨晩、新たに学習をさせたところ、初期から報酬トレンドがプラス圏にほぼ定着してしまいました。学習量を増やしたのに拍子抜けの結果になりました。

過去データの学習 (20 episode / day) における報酬 (episord_reward)、損益 (pnl)、約定回数 (transactions) トレンド by TensorBoard

ティックデータをシャッフルしているので、上手くいかない場合もあるのかもしれません。日々、ティックデータは増えていくので、とりあえず初期学習量を 1 日分のティックデータあたり 5 エピソードに戻すことにしました。

報酬条件を追加してあらためて初期学習

下記の目的で、最近はモデルの初期学習ばかりを実施しています。

  • 目的は、報酬でモデルの行動を誘導するコツを掴むことです。
  • 題材は、短長周期の移動平均線のクロス・シグナルでエントリさせることです。
    • クロス・シグナルでエントリすることが目的であれば、そのためのアルゴリズムを作りますが、それが目的ではありません、念の為。
  • → モデルが望ましい行動を取れば、エピソード報酬がプラスになるように報酬設計

学習用のティックデータには移動平均に合わせてあらかじめ報酬分布を作っています。

  • 買建
    • ゴールデン・クロス時のエントリに対する報酬
  • 売建
    • デッド・クロス時のエントリに対する報酬

この状況で報酬トレンドはプラス圏に定着するようになりましたが、エントリは依然としてクロス・シグナルに沿っているようには見えません。

もう少し強く誘導してもいいかもしれないと考えて、エントリが逆だった場合のペナルティを加えてみました。

  • 買建
    • ゴールデン・クロス時のエントリに対する報酬
    • デッド・クロス時のエントリに対するペナルティ
  • 売建
    • ゴールデン・クロス時のエントリに対するペナルティ
    • デッド・クロス時のエントリに対する報酬

1 日のティックデータあたりの学習量を 5 エピソードに戻して新たに初期学習をさせました。報酬設計を厳しくしても、報酬トレンドはなんとかプラス圏に残りました。

過去データの学習 (5 episode / day) における報酬 (episord_reward)、損益 (pnl)、約定回数 (transactions) トレンド by TensorBoard

推論トレンド

学習に使用したティックデータ + 本日収集したティックデータを順番に推論しました。

収集したティックデータに対する推論トレンド

推論では利確やロスカットを入れています。それでも通算の(シミュレーション上の)収益は大した額にななりません。

本日分の推論詳細を示しました。

本日分のティックデータに対する推論の詳細

売買シミュレーションの売買明細は下記のとおりです。

                               注文番号 銘柄コード  売買    約定単価  約定数量    損益        備考
注文日時                                                                       
2026-04-24 09:16:55.957242012     1  9984  買建  5868.0     1   NaN          
2026-04-24 09:17:54.082166910     2  9984  売埋  5841.0     1 -27.0   単純ロスカット
2026-04-24 09:17:56.104971886     3  9984  買建  5834.0     1   NaN          
2026-04-24 09:18:02.118283987     4  9984  売埋  5830.0     1  -4.0          
2026-04-24 09:18:04.119205952     5  9984  売建  5827.0     1   NaN          
2026-04-24 09:18:44.261392116     6  9984  買埋  5814.0     1  13.0  ドローダウン利確
2026-04-24 09:18:46.265976906     7  9984  売建  5816.0     1   NaN          
2026-04-24 09:24:39.285621881     8  9984  買埋  5796.0     1  20.0  ドローダウン利確
2026-04-24 09:24:41.292150974     9  9984  買建  5792.0     1   NaN          
2026-04-24 09:25:03.376605034    10  9984  売埋  5787.0     1  -5.0          
2026-04-24 09:25:05.379053116    11  9984  売建  5788.0     1   NaN          
2026-04-24 09:27:15.859980106    12  9984  買埋  5817.0     1 -29.0   単純ロスカット
2026-04-24 09:27:17.859225988    13  9984  売建  5823.0     1   NaN          
2026-04-24 09:28:36.069082022    14  9984  買埋  5850.0     1 -27.0   単純ロスカット
2026-04-24 09:28:38.086570978    15  9984  売建  5846.0     1   NaN          
2026-04-24 09:29:54.382440090    16  9984  買埋  5857.0     1 -11.0  益→損ロスカット
2026-04-24 09:29:56.403312922    17  9984  売建  5861.0     1   NaN          
2026-04-24 09:34:09.086606979    18  9984  買埋  5839.0     1  22.0  ドローダウン利確
2026-04-24 09:34:15.089134932    19  9984  売建  5854.0     1   NaN          
2026-04-24 09:36:31.219809055    20  9984  買埋  5883.0     1 -29.0   単純ロスカット
2026-04-24 09:36:33.236402035    21  9984  買建  5886.0     1   NaN          
2026-04-24 09:39:35.752676010    22  9984  売埋  5859.0     1 -27.0   単純ロスカット
2026-04-24 09:39:37.757611036    23  9984  買建  5861.0     1   NaN          
2026-04-24 09:44:28.386259079    24  9984  売埋  5872.0     1  11.0  ドローダウン利確
2026-04-24 09:49:13.315283060    25  9984  売建  5841.0     1   NaN          
2026-04-24 09:49:25.366324902    26  9984  買埋  5870.0     1 -29.0   単純ロスカット
2026-04-24 09:49:27.373552084    27  9984  買建  5875.0     1   NaN          
2026-04-24 09:54:02.089586973    28  9984  売埋  5912.0     1  37.0          
2026-04-24 09:54:04.094320059    29  9984  売建  5913.0     1   NaN          
2026-04-24 09:59:21.016161919    30  9984  買埋  5902.0     1  11.0  ドローダウン利確
2026-04-24 09:59:23.004600048    31  9984  買建  5902.0     1   NaN          
2026-04-24 10:11:12.925218105    32  9984  売埋  5947.0     1  45.0          
2026-04-24 10:11:14.942454100    33  9984  売建  5945.0     1   NaN          
2026-04-24 10:15:35.865712881    34  9984  買埋  5973.0     1 -28.0   単純ロスカット
2026-04-24 10:15:37.873572111    35  9984  売建  5973.0     1   NaN          
2026-04-24 10:21:20.705820084    36  9984  買埋  5984.0     1 -11.0  益→損ロスカット
2026-04-24 10:21:22.722320080    37  9984  買建  5986.0     1   NaN          
2026-04-24 10:21:24.735408068    38  9984  売埋  5982.0     1  -4.0          
2026-04-24 10:21:26.747241974    39  9984  売建  5985.0     1   NaN          
2026-04-24 10:32:58.904886007    40  9984  買埋  5970.0     1  15.0  ドローダウン利確
2026-04-24 10:33:00.894062042    41  9984  売建  5969.0     1   NaN          
2026-04-24 10:38:01.783025026    42  9984  買埋  5945.0     1  24.0  ドローダウン利確
2026-04-24 10:39:01.906418085    43  9984  売建  5917.0     1   NaN          
2026-04-24 10:40:54.032305955    44  9984  買埋  5945.0     1 -28.0   単純ロスカット
2026-04-24 10:40:56.035309076    45  9984  買建  5940.0     1   NaN          
2026-04-24 10:52:05.898718119    46  9984  売埋  5970.0     1  30.0          
2026-04-24 10:52:07.916615963    47  9984  売建  5970.0     1   NaN          
2026-04-24 10:57:44.970211983    48  9984  買埋  5949.0     1  21.0  ドローダウン利確
2026-04-24 11:03:36.191855907    49  9984  売建  5902.0     1   NaN          
2026-04-24 11:04:34.377187967    50  9984  買埋  5928.0     1 -26.0   単純ロスカット
2026-04-24 11:04:36.392412901    51  9984  買建  5929.0     1   NaN          
2026-04-24 11:09:55.241024017    52  9984  売埋  5917.0     1 -12.0  益→損ロスカット
2026-04-24 11:11:29.550215960    53  9984  売建  5912.0     1   NaN          
2026-04-24 12:33:19.096071005    54  9984  買埋  5861.0     1  51.0  ドローダウン利確
2026-04-24 12:33:23.112534046    55  9984  買建  5859.0     1   NaN          
2026-04-24 12:36:01.471270084    56  9984  売埋  5855.0     1  -4.0          
2026-04-24 12:36:03.476455927    57  9984  売建  5856.0     1   NaN          
2026-04-24 12:37:49.712742090    58  9984  買埋  5844.0     1  12.0  ドローダウン利確
2026-04-24 12:37:51.709139109    59  9984  売建  5844.0     1   NaN          
2026-04-24 12:39:22.052175045    60  9984  買埋  5871.0     1 -27.0   単純ロスカット
2026-04-24 12:39:24.064601898    61  9984  売建  5869.0     1   NaN          
2026-04-24 12:42:16.550908089    62  9984  買埋  5880.0     1 -11.0  益→損ロスカット
2026-04-24 12:42:18.563697100    63  9984  売建  5879.0     1   NaN          
2026-04-24 12:45:19.256484031    64  9984  買埋  5867.0     1  12.0  ドローダウン利確
2026-04-24 12:45:21.256089926    65  9984  売建  5865.0     1   NaN          
2026-04-24 12:48:43.876497030    66  9984  買埋  5892.0     1 -27.0   単純ロスカット
2026-04-24 12:48:45.880898952    67  9984  売建  5891.0     1   NaN          
2026-04-24 13:02:16.263433933    68  9984  買埋  5878.0     1  13.0  ドローダウン利確
2026-04-24 13:02:18.265723944    69  9984  売建  5877.0     1   NaN          
2026-04-24 13:05:34.717513084    70  9984  買埋  5903.0     1 -26.0   単純ロスカット
2026-04-24 13:05:36.705279112    71  9984  買建  5902.0     1   NaN          
2026-04-24 13:11:07.624011993    72  9984  売埋  5876.0     1 -26.0   単純ロスカット
2026-04-24 13:11:09.630553007    73  9984  買建  5877.0     1   NaN          
2026-04-24 13:18:42.880261898    74  9984  売埋  5890.0     1  13.0  ドローダウン利確
2026-04-24 13:19:26.992872953    75  9984  売建  5893.0     1   NaN          
2026-04-24 13:25:27.905783892    76  9984  買埋  5930.0     1 -37.0   単純ロスカット
2026-04-24 13:25:29.905756950    77  9984  買建  5929.0     1   NaN          
2026-04-24 13:41:40.499631882    78  9984  売埋  5941.0     1  12.0  ドローダウン利確
2026-04-24 13:41:42.503470898    79  9984  買建  5942.0     1   NaN          
2026-04-24 14:00:57.841245890    80  9984  売埋  5930.0     1 -12.0  益→損ロスカット
2026-04-24 14:17:56.735774994    81  9984  買建  5961.0     1   NaN          
2026-04-24 14:54:57.385721922    82  9984  売埋  5942.0     1 -19.0     連続含み損
2026-04-24 15:01:24.537041903    83  9984  買建  5975.0     1   NaN          
2026-04-24 15:09:17.760077000    84  9984  売埋  5991.0     1  16.0          
2026-04-24 15:09:19.778187990    85  9984  売建  5991.0     1   NaN          
2026-04-24 15:24:48.705945015    86  9984  買埋  5984.0     1   7.0      強制返済
---
実現損益 : -101.0 円/株, 約定回数 : 86 回

約定回数が多いですが、それよりも、多くが見て納得できるようなエントリになっていないことがまず問題だと考えています。

とりあえず、移動平均のクロスシグナルでエントリするように誘導しても、モデルの行動がそのように誘導されているようにはまだ見えません。報酬設計がまだ甘いようです。

今後、評価したい特徴量があるので、観測空間を広げて再学習を始めます。また、週末に今までの成果を整理して今後の方針を検討します。

参考サイト

  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アクセスランキング にほんブログ村