2025-12-05

自動売買への道 (2025-12-05)

楽天証券の口座でデイトレの自動売買に挑戦しようと Windows / Excel 上で利用できる マーケットスピード II RSS を活用して Python であれこれ取り組んでいます。この「自動売買への道」のトピックでは、プログラミングの話題にも踏み込んで、日々の活動をまとめていきます。

今日の日経平均株価

現在値 50,491.87 -536.55 -1.05% 15:30
前日終値 51,028.42 12/04 高値 50,634.85 09:01
始値 50,530.34 09:00 安値 50,215.41 10:54

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

【関連ニュース】

デイトレ用自作アプリ

以下は株価に関連する情報の流れを示しています。

株価データの流れ(Windows 11)

楽天証券では、Python からネットワーク越しに直接取引できるような API が提供されていないので、マーケットスピード II RSS を介して取引をする構成を取っています。

取引シミュレーション

強化学習モデルのチューニング作業の優先順位を下げ、しばらくはテクニカル指標のシグナルで取引するアプローチを前面に出しています。

現在利用している指標は下記のとおりです。

  • 2つの移動平均 MA (n = 60 sec)MA (n = 600 sec)
    • クロスサインで売買(ナンピン売買禁止)
  • 移動範囲 Moving Range, MR (n = 60 sec)
    • ボラティリティを判定する指標、しきい値以下の時はフラグを立ててエントリしない。
  • ロスカット
    • しきい値以下になったらフラグを立てて建玉を返済、損切り。
  • 利確
    • 含み益と含み益最大値との比較で建玉を返済、利確する簡単なロジックを導入。

実験計画

仮決め(上記)で利用してきた指標(因子)について、水準を振って、より良さげな条件の組み合わせを探索しようとしています。今回は、最初の実験 (doe-1) の分析結果を受けた実施した、二回目の実験です。

今回の実験計画 (doe-2) 要約
目  的 doe-1 の分析結果を受けて、実験水準をずらし、因子をひとつ減らしました。 この実験条件内でクロス・シグナルに利用している移動平均 MA1 と MA2 の周期の最適な組み合わせが存在しているかどうかを確認します。
データ 楽天証券マーケットスピード2 RSS から取得した過去のティックデータ(銘柄コード 7011)
実験因子 実験水準 説  明
PERIOD_MA_1 sec 60 90 120 クロスシグナル判定用移動平均 MA1 の period
PERIOD_MA_2 sec 300 600 900 クロスシグナル判定用移動平均 MA2 の period
THRESHOLD_MR tick 3 5 7 移動範囲 (n = 30 sec) において、エントリを禁止するしきい値
評価特性 説  明
収益 円 / 株 売買シミュレーションで、移動平均のクロスシグナルに従った売買結果の収益(スリッページなし)。
取引回数 システム側でナンピン売買を禁止し、取引回数の上限を 100 回に設定。
実験計画 説  明
Full Factorial Design
(完全実施要因計画)
3 因子 3 水準の組み合わせ全て、すなわち 33 = 27 通りの条件。
この組み合わせを過去のティックデータファイルの数だけ、収益シュミレーションを繰り返します。
補足説明

今回の実験で注目しているポイントは下記のとおりです。

  1. PERIOD_MA_1 x PERIOD_MA_2
    • ティックデータにおいて、周期 (period) が違う 2 つの移動平均 MA1 と MA2 のクロス・シグナルを売買判断にするとき、最適な周期の組み合わせが実験条件内に存在するかどうかの確認。
  2. THRESHOLD_MR
    • ボラティリティが小さいときにエントリを禁止するしきい値が、収益や取引回数に与える影響を評価します。

取引回数の上限について

確実に自動取引ができるようになるまでは取引回数に上限を設定しています。100 回というのはとりあえずの上限で、上限に達しない程度に収まることを期待しています。高頻度取引 (HFT) に挑戦するのはずいぶん先の話と考えています。

分析結果

対象期間

# of tick files : 74

2025-08-19 以降、本日 (2025-12-05) 分までのティックデータ

収益

収益は、(当然ながら)高いほど良い条件になります。

【収益】分散分析

=== ANOVA (up to 2-way interactions) ===
                                sum_sq      df         F    PR(>F)
PERIOD_MA_1               1.644444e+01     1.0  0.004300  0.947720
PERIOD_MA_2               1.865633e+04     1.0  4.878913  0.027300
THRESHOLD_MR              9.323255e+03     1.0  2.438173  0.118573
PERIOD_MA_1:PERIOD_MA_2   2.677662e+03     1.0  0.700249  0.402800
PERIOD_MA_1:THRESHOLD_MR  5.455135e+02     1.0  0.142660  0.705691
PERIOD_MA_2:THRESHOLD_MR  2.648930e+02     1.0  0.069274  0.792425
Residual                  7.613324e+06  1991.0       NaN       NaN

【収益】主効果と交互作用

分散分析表では、PERIOD_MA_2 のみは有意っぽいだけですが、主因子の平均効果をプロットしました。

興味がある交互作用 PERIOD_MA_1 x PERIOD_MA_2 の有意性はあまりありませんが、傾向を把握するために交互作用が判るようにプロットしました。

このチャートからは PERIOD_MA_2 = 300 の水準は考慮しなくともいいのかもしれません。

【収益】興味がある2因子の等高線図 (Contour Map)

PERIOD_MA_1 x PERIOD_MA_2 の等高線図を作成しました。

左側 PERIOD_MA_1 = 60 ~ 90 の等高線図は doe-1 の等高線図の傾向を概ね引き継いでいると言えますが、右側の PERIOD_MA_1 = 90 ~ 120 の範囲の等高線図は予想外です。

また、この等高線図では、交互作用のプロットでの傾向を完全には支持できず、必ずしも PERIOD_MA_2 = 300 の水準は不要とは限らないことが判ります。もっと水準を増やして、徹底的に確認してみる価値がありそうです。

取引回数

取引回数は、上限が 100 で制限されているので、半分の 50 回程度に収まる条件を良しとします。

【取引回数】分散分析

取引回数については、今回も全ての因子が有意になってしまいました。

=== ANOVA (up to 2-way interactions) ===
                                 sum_sq      df            F        PR(>F)
PERIOD_MA_1                38681.444444     1.0   158.214812  5.715306e-35
PERIOD_MA_2               114654.777778     1.0   468.960878  1.471436e-93
THRESHOLD_MR              693996.408408     1.0  2838.583541  0.000000e+00
PERIOD_MA_1:PERIOD_MA_2        3.045045     1.0     0.012455  9.111508e-01
PERIOD_MA_1:THRESHOLD_MR    5946.851351     1.0    24.323807  8.817896e-07
PERIOD_MA_2:THRESHOLD_MR   36459.572072     1.0   149.126912  3.988581e-33
Residual                  486773.360360  1991.0          NaN           NaN

【取引回数】主効果

一応、主効果(主因子の平均効果)をプロットしました。

最初は、取引回数を少なめにする設定 THRESHOLD_MR = 7 tick で、次のステップに進もうと思います。

まとめ

実験結果を一つの表にするにはデータ数が多すぎるので、取引回数 (trade) と収益 (total) の平均値を計算して表にしました。THRESHOLD_MR = 7 tick で収益が良い条件に薄緑の色をつけました。

  PERIOD_MA_1 PERIOD_MA_2 THRESHOLD_MR trade total
0 60 300 3 85.1 1.28
1 60 300 5 43.8 1.03
2 60 300 7 21.6 0.88
3 60 600 3 66.0 5.58
4 60 600 5 30.8 8.86
5 60 600 7 16.2 11.12
6 60 900 3 54.0 1.66
7 60 900 5 26.5 9.27
8 60 900 7 13.9 6.12
9 90 300 3 77.2 -1.97
10 90 300 5 35.4 -1.58
11 90 300 7 17.5 0.61
12 90 600 3 53.9 0.28
13 90 600 5 24.3 7.54
14 90 600 7 12.1 8.36
15 90 900 3 44.0 1.18
16 90 900 5 20.1 5.14
17 90 900 7 10.5 9.54
18 120 300 3 71.9 -5.68
19 120 300 5 31.5 -0.66
20 120 300 7 15.5 2.38
21 120 600 3 47.2 2.69
22 120 600 5 20.6 4.66
23 120 600 7 10.5 9.68
24 120 900 3 37.6 7.62
25 120 900 5 17.5 11.54
26 120 900 7 8.4 11.58

次のステップ

移動平均 MA1 と MA2 について、周期の振り幅を少し広げた上で水準を少し細かく刻んで、MA1 と MA2 の関係だけに注目して確認します。等高線図を重視することには変わりはありませんが、分析は分散分析から重回帰分析を利用した RSM(応答曲面法)に移行する予定です。

次回の実験計画 (doe-3) の水準案
実験因子 実験水準
PERIOD_MA_1 sec 50 70 90 110 130
PERIOD_MA_2 sec 200 400 600 800 1000
PERIOD_MR sec 30
THRESHOLD_MR tick 7

参考サイト

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

0 件のコメント:

コメントを投稿