楽天証券の口座でデイトレの自動売買に挑戦しようと Windows / Excel 上で利用できる マーケットスピード II RSS を活用して Python であれこれ取り組んでいます。この「自動売買への道」のトピックでは、プログラミングの話題にも踏み込んで、日々の活動をまとめていきます。
今日の日経平均株価
| 現在値 | 49,303.28 | -950.63 | -1.89% | 15:30 | |
|---|---|---|---|---|---|
| 前日終値 | 50,253.91 | 11/28 | 高値 | 50,366.74 | 09:00 |
| 始値 | 50,318.59 | 09:00 | 安値 | 49,215.96 | 14:30 |
※ 右の 15 分足チャートは Yahoo! Finance のデータを yfinance で取得して作成しました。
【関連ニュース】
- 米国株式市場=5営業日続伸、感謝祭明けで薄商い インテル10%高 | ロイター [2025-11-29]
- 中国人民銀、仮想通貨取り締まり強化 投機やマネロン警戒 | ロイター [2025-12-01]
- 日銀総裁、今月にも利上げ行う可能性を示唆-「是非を適切判断」 - Bloomberg [2025-12-01]
- ソフトバンクと安川電機、AI-RANを活用した「フィジカルAI」の社会実装に向けて協業を開始 [2025-12-01]
- 日経平均は5日ぶり反落、5万円割れ 日銀総裁発言で12月利上げ意識 | ロイター [2025-12-01]
デイトレ用自作アプリ
以下は株価に関連する情報の流れを示しています。
楽天証券では、Python からネットワーク越しに直接取引できるような API が提供されていないので、マーケットスピード II RSS を介して取引をする構成を取っています。
取引シミュレーション
強化学習モデルのチューニング作業の優先順位を下げ、しばらくはテクニカル指標のシグナルで取引するアプローチを前面に出します。
現在利用している指標は下記のとおりです。
- 2つの移動平均 MA (n = 60 sec) と MA (n = 600 sec)
- クロスサインで売買(ナンピン売買禁止)
- 移動範囲 Moving Range, MR (n = 60 sec)
- ボラティリティを判定する指標、しきい値以下の時はフラグを立ててエントリしない。
- ロスカット
- しきい値以下になったらフラグを立てて建玉を返済、損切り。
- 利確
- 含み益と含み益最大値との比較で建玉を返済、利確する簡単なロジックを導入。
実験計画
仮決め(上記)で利用してきた指標(因子)について、水準を振って、より良さげな条件の組み合わせを探索することにしました。そこで、実験因子として水準を振れるような機能をアプリに追加しました。
目的
仮決めで利用してきた指標(因子)の水準を振った範囲内に最低条件が存在するかどうかを確認する。
実験範囲内に最適水準があれば、シミュレーションの使用するパラメータの水準を変更する。
実験範囲外に最適水準がありそうであれば、実験範囲をその方向に広げて最適な条件を探索する。
実験因子
上記のロスカットと利確条件も因子に加えたかったのですが、残念ながら納得できるやりかたに落ち着いていません。ひとまず、この 2 因子の機能はオフ(ロスカット、利確なし)にして実験評価をすることにしました。
- PERIOD_MA_1
- 移動平均 1 の period
- 水準 : 30, 60, 90 [sec]
- PERIOD_MA_2
- 移動平均 2 の period
- 水準 : 300, 600, 900 [sec]
- PERIOD_MR
- 移動範囲 の period
- 水準 : 15, 30, 45 [sec]
- THRESHOLD_MR
- エントリを禁止する移動範囲のしきい値
- 水準 : 1, 4, 7 [sec]
評価特性
- 1 株当りの収益
- [参考評価]100 回を上限としている取引回数
実験の組み合わせ
4 因子 3 水準の実験をする場合、直交表を使うとすれば L9 や L18 の直交表を利用することができます。
しかし、シミュレーションのパラメータを振るのであれば、時間や経費節約のために実験回数を減らしたい、という動機は低くなります。なぜなら、1 回のシミュレーションはそれほど長い計算時間ではないからです。ですので、可能であれば少々計算時間をかけても全ての組み合わせを試したいところです。
ということで 4 因子 3 水準の組み合わせ、34 = 81 通りの条件を、過去のティックデータ 69 日分全て (81 × 69 = 5589 run) に適用して収益のシミュレーション・データを取ることにしました。やや run 数が多いのですが、天文学的な数ではありません。辛抱して待つことにします。
| # | PERIOD_MA_1 | PERIOD_MA_2 | PERIOD_MR | THRESHOLD_MR |
|---|---|---|---|---|
| 1 | 30 | 300 | 15 | 1 |
| 2 | 60 | 300 | 15 | 1 |
| 3 | 90 | 300 | 15 | 1 |
| 4 | 30 | 600 | 15 | 1 |
| 5 | 60 | 600 | 15 | 1 |
| 6 | 90 | 600 | 15 | 1 |
| 7 | 30 | 900 | 15 | 1 |
| 8 | 60 | 900 | 15 | 1 |
| 9 | 90 | 900 | 15 | 1 |
| 10 | 30 | 300 | 30 | 1 |
| 11 | 60 | 300 | 30 | 1 |
| 12 | 90 | 300 | 30 | 1 |
| 13 | 30 | 600 | 30 | 1 |
| 14 | 60 | 600 | 30 | 1 |
| 15 | 90 | 600 | 30 | 1 |
| 16 | 30 | 900 | 30 | 1 |
| 17 | 60 | 900 | 30 | 1 |
| 18 | 90 | 900 | 30 | 1 |
| 19 | 30 | 300 | 45 | 1 |
| 20 | 60 | 300 | 45 | 1 |
| 21 | 90 | 300 | 45 | 1 |
| 22 | 30 | 600 | 45 | 1 |
| 23 | 60 | 600 | 45 | 1 |
| 24 | 90 | 600 | 45 | 1 |
| 25 | 30 | 900 | 45 | 1 |
| 26 | 60 | 900 | 45 | 1 |
| 27 | 90 | 900 | 45 | 1 |
| 28 | 30 | 300 | 15 | 4 |
| 29 | 60 | 300 | 15 | 4 |
| 30 | 90 | 300 | 15 | 4 |
| 31 | 30 | 600 | 15 | 4 |
| 32 | 60 | 600 | 15 | 4 |
| 33 | 90 | 600 | 15 | 4 |
| 34 | 30 | 900 | 15 | 4 |
| 35 | 60 | 900 | 15 | 4 |
| 36 | 90 | 900 | 15 | 4 |
| 37 | 30 | 300 | 30 | 4 |
| 38 | 60 | 300 | 30 | 4 |
| 39 | 90 | 300 | 30 | 4 |
| 40 | 30 | 600 | 30 | 4 |
| 41 | 60 | 600 | 30 | 4 |
| 42 | 90 | 600 | 30 | 4 |
| 43 | 30 | 900 | 30 | 4 |
| 44 | 60 | 900 | 30 | 4 |
| 45 | 90 | 900 | 30 | 4 |
| 46 | 30 | 300 | 45 | 4 |
| 47 | 60 | 300 | 45 | 4 |
| 48 | 90 | 300 | 45 | 4 |
| 49 | 30 | 600 | 45 | 4 |
| 50 | 60 | 600 | 45 | 4 |
| 51 | 90 | 600 | 45 | 4 |
| 52 | 30 | 900 | 45 | 4 |
| 53 | 60 | 900 | 45 | 4 |
| 54 | 90 | 900 | 45 | 4 |
| 55 | 30 | 300 | 15 | 7 |
| 56 | 60 | 300 | 15 | 7 |
| 57 | 90 | 300 | 15 | 7 |
| 58 | 30 | 600 | 15 | 7 |
| 59 | 60 | 600 | 15 | 7 |
| 60 | 90 | 600 | 15 | 7 |
| 61 | 30 | 900 | 15 | 7 |
| 62 | 60 | 900 | 15 | 7 |
| 63 | 90 | 900 | 15 | 7 |
| 64 | 30 | 300 | 30 | 7 |
| 65 | 60 | 300 | 30 | 7 |
| 66 | 90 | 300 | 30 | 7 |
| 67 | 30 | 600 | 30 | 7 |
| 68 | 60 | 600 | 30 | 7 |
| 69 | 90 | 600 | 30 | 7 |
| 70 | 30 | 900 | 30 | 7 |
| 71 | 60 | 900 | 30 | 7 |
| 72 | 90 | 900 | 30 | 7 |
| 73 | 30 | 300 | 45 | 7 |
| 74 | 60 | 300 | 45 | 7 |
| 75 | 90 | 300 | 45 | 7 |
| 76 | 30 | 600 | 45 | 7 |
| 77 | 60 | 600 | 45 | 7 |
| 78 | 90 | 600 | 45 | 7 |
| 79 | 30 | 900 | 45 | 7 |
| 80 | 60 | 900 | 45 | 7 |
| 81 | 90 | 900 | 45 | 7 |
一部の解析結果
過去 69 日分の過去のティックデータによる DOE の実施についてですが、昨日の日曜日夜からファイルサーバー上で計算させていたのですが、意外と計算に時間がかかる上に、全体の半分ぐらいを過ぎたところで、なんと不備を見つけてしまいました。
不備があることが判っている結果を解析することは無駄なので、仕方なく途中で止めました。本日取得したティックデータを追加して、過去 70 日分のデータで 81 × 70 = 5670 run を実施することにしました。
明日の夕方までに全ての run は終わらないと思うので、これとは別にメインの PC で過去 3 日分 (11/27, 28, 12/1) のデータだけで実験条件を処理しました。詳細な分析はさておき、各因子の効果(要因効果図)は下記のようになりました。
これらのプロットを見る限り、収益を最大化する最適な因子水準は実験水準の外側にある可能性があります。あとは、データ全体でのシミュレーション実験の結果を確認してから今後の進め方を決めます。
参考サイト
- マーケットスピード 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 件のコメント:
コメントを投稿