楽天証券の口座でデイトレの自動売買に挑戦しようと 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 で取得して作成しました。
【関連ニュース】
- 米国株式市場=ほぼ横ばい、FRBの利下げ期待が支え アマゾンは安い | ロイター [2025-12-05]
- エヌビディア先端AI半導体、対中輸出阻止へ-米上院超党派が法案提出 - Bloomberg [2025-12-05]
- 日銀が今月会合で政策金利引き上げへ、利上げ継続姿勢を維持-関係者 - Bloomberg [2025-12-05]
- アングル:日銀利上げ容認へ傾いた政権、背景に高市首相の「変化」 | ロイター [2025-12-05]
- 日経平均は4日ぶり反落、一時800円超安 利益確定売り優勢 | ロイター [2025-12-05]
デイトレ用自作アプリ
以下は株価に関連する情報の流れを示しています。
楽天証券では、Python からネットワーク越しに直接取引できるような API が提供されていないので、マーケットスピード II RSS を介して取引をする構成を取っています。
取引シミュレーション
強化学習モデルのチューニング作業の優先順位を下げ、しばらくはテクニカル指標のシグナルで取引するアプローチを前面に出しています。
現在利用している指標は下記のとおりです。
- 2つの移動平均 MA (n = 60 sec) と MA (n = 600 sec)
- クロスサインで売買(ナンピン売買禁止)
- 移動範囲 Moving Range, MR (n = 60 sec)
- ボラティリティを判定する指標、しきい値以下の時はフラグを立ててエントリしない。
- ロスカット
- しきい値以下になったらフラグを立てて建玉を返済、損切り。
- 利確
- 含み益と含み益最大値との比較で建玉を返済、利確する簡単なロジックを導入。
実験計画
仮決め(上記)で利用してきた指標(因子)について、水準を振って、より良さげな条件の組み合わせを探索しようとしています。今回は、最初の実験 (doe-1) の分析結果を受けた実施した、二回目の実験です。
| 目 的 | 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 通りの条件。 この組み合わせを過去のティックデータファイルの数だけ、収益シュミレーションを繰り返します。 |
||||
| 補足説明 |
今回の実験で注目しているポイントは下記のとおりです。
|
||||
取引回数の上限について
確実に自動取引ができるようになるまでは取引回数に上限を設定しています。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(応答曲面法)に移行する予定です。
| 実験因子 | 実験水準 | |||||
|---|---|---|---|---|---|---|
| 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 | ||||
参考サイト
- マーケットスピード 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 件のコメント:
コメントを投稿