楽天証券の口座でデイトレの自動売買に挑戦しようと Windows / Excel 上で利用できる マーケットスピード II RSS を活用して Python であれこれ取り組んでいます。この「自動売買への道」のトピックでは、プログラミングの話題にも踏み込んで、日々の活動をまとめています。
今日の日経平均株価
| 現在値 | 50,602.80 | -52.30 | -0.10% | 15:30 | |
|---|---|---|---|---|---|
| 前日終値 | 50,655.10 | 12/09 | 高値 | 51,107.77 | 09:13 |
| 始値 | 50,878.66 | 09:00 | 安値 | 50,329.27 | 10:53 |
※ 右の 15 分足チャートは Yahoo! Finance のデータを yfinance で取得して作成しました。
【関連ニュース】
- 米国株式市場=S&P小幅安、FOMC結果待ち | ロイター [2025-12-10]
- 日銀利上げ到達点への注目増す、総裁が今月実施示唆で-為替にも影響 - Bloomberg [2025-12-10]
- スペースXが来年のIPO計画、250億ドル超調達目指す=関係筋 | ロイター [2025-12-10]
- 日銀保有ETF、9月末時点で評価益46兆円=植田総裁 | ロイター [2025-12-10]
- 「ベローチェ」や「珈琲館」、300億-400億円でファンドが売却へ-関係者 - Bloomberg [2025-12-10]
- 日経平均は反落、朝高後は利益確定 米FOMC前で | ロイター [2025-12-10]
デイトレ用自作アプリ
以下は株価に関連する情報の流れを示しています。
楽天証券では、Python からネットワーク越しに直接取引できるような API が提供されていないので、マーケットスピード II RSS を介して取引をする構成を取っています。
取引シミュレーション
強化学習モデルのチューニング作業の優先順位を下げ、しばらくはテクニカル指標のシグナルで取引するアプローチを前面に出しています。
制約条件
現在シミュレーションで設定している制約は下記のとおりです。
- 売買条件
- ポジションを解消してから次の売買をする(ナンピン禁止)。
- 取引回数
- 上限を 100 回に制限
- 約定条件
- スリッページなし
売買判断のための指標
現在利用している指標は下記のとおりです。
- 2つの移動平均 MA1 と MA2
- クロス・シグナルで売買
- PERIOD_MA_1 = TBD
- PERIOD_MA_2 = TBD
- 移動範囲 Moving Range, MR
- ボラティリティを判定する指標、しきい値以下の時はフラグを立ててエントリしない。
- PERIOD_MR = 30
- THRESHOLD_MR = 7
- ロスカット
- しきい値以下になったらフラグを立てて建玉を返済、損切り。
- (現在、無効に設定)
- 利確
- 含み益と含み益最大値との比較で建玉を返済、利確する簡単なロジックを導入。
- (現在、無効に設定)
取引シミュレーションの実験
下記の条件表に沿って、過去のティックデータで取引シミュレーションを実施しました。
条件数 (11 × 11 = 121) が多いので、遡って過去のティックデータ全部を処理するのにかなり時間がかかると見込んでいましたが、早く結果を見たかったので、複数の PC を動員して残っている分を算出してしまいました。😁
| データ | 約 1 秒間隔で取得した株価と出来高のティックデータ | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 対象銘柄 | 7011 | 呼び値が 1 円で出来高が多い、東証プライムの銘柄を選定 | |||||||||||
| 対象期間 | 2025-08-19 〜 2025-12-09 の東証取引日(76 営業日) | ||||||||||||
| 実験因子 | 実験水準 | 説 明 | |||||||||||
| PERIOD_MA_1 | sec | 30 | 45 | 60 | 75 | 90 | 105 | 120 | 135 | 150 | 165 | 180 | 周期が異なる 2 つの移動平均 MA1 と MA2 のクロス・シグナルを売買ポイントとする。 |
| PERIOD_MA_2 | sec | 300 | 360 | 420 | 480 | 540 | 600 | 660 | 720 | 780 | 840 | 900 | |
| PERIOD_MR | sec | 30 | ボラティリティを測定する指標として移動範囲を採用。しきい値より低ければ、売買エントリを禁止。 現時点では、少なめの取引数に収まるように、しきい値を高めに設定している。 |
||||||||||
| THRESHOLD_MR | tick | 7 | |||||||||||
| 評価特性 | 説 明 | ||||||||||||
| 収益 (total) | 円 / 株 | 1 日の売買シミュレーションで、2 つの移動平均のクロス・シグナルに従って売買した収益。 | |||||||||||
| 取引回数 (trade) | 回 | 【参考値】システム側でナンピン売買を禁止し、取引回数の上限を 100 回に設定。 | |||||||||||
実験結果(サマリ統計)
| PERIOD_MA_1 | PERIOD_MA_2 | trade | total | |
|---|---|---|---|---|
| 0 | 30 | 300 | 31.1 | 3.67 |
| 1 | 45 | 300 | 22.9 | -0.28 |
| 2 | 60 | 300 | 21.4 | 1.45 |
| 3 | 75 | 300 | 19.1 | 3.64 |
| 4 | 90 | 300 | 17.4 | 1.32 |
| 5 | 105 | 300 | 16.8 | 0.00 |
| 6 | 120 | 300 | 15.3 | 2.83 |
| 7 | 135 | 300 | 14.7 | 2.20 |
| 8 | 150 | 300 | 14.2 | 1.55 |
| 9 | 165 | 300 | 12.8 | 2.04 |
| 10 | 180 | 300 | 12.8 | 2.08 |
| 11 | 30 | 360 | 27.1 | 3.29 |
| 12 | 45 | 360 | 20.7 | 1.14 |
| 13 | 60 | 360 | 19.7 | 4.74 |
| 14 | 75 | 360 | 17.3 | 6.14 |
| 15 | 90 | 360 | 15.3 | 5.51 |
| 16 | 105 | 360 | 14.6 | 5.78 |
| 17 | 120 | 360 | 13.3 | 6.95 |
| 18 | 135 | 360 | 12.9 | 5.70 |
| 19 | 150 | 360 | 11.9 | 4.66 |
| 20 | 165 | 360 | 11.4 | 6.93 |
| 21 | 180 | 360 | 11.1 | 1.41 |
| 22 | 30 | 420 | 24.9 | 3.54 |
| 23 | 45 | 420 | 18.9 | 3.80 |
| 24 | 60 | 420 | 18.7 | 6.42 |
| 25 | 75 | 420 | 16.0 | 4.58 |
| 26 | 90 | 420 | 14.4 | 5.13 |
| 27 | 105 | 420 | 13.0 | 6.78 |
| 28 | 120 | 420 | 12.6 | 8.03 |
| 29 | 135 | 420 | 11.8 | 8.87 |
| 30 | 150 | 420 | 10.9 | 11.34 |
| 31 | 165 | 420 | 10.3 | 9.03 |
| 32 | 180 | 420 | 9.7 | 6.99 |
| 33 | 30 | 480 | 23.8 | 6.68 |
| 34 | 45 | 480 | 17.2 | 5.95 |
| 35 | 60 | 480 | 17.1 | 7.71 |
| 36 | 75 | 480 | 15.1 | 9.34 |
| 37 | 90 | 480 | 13.7 | 10.07 |
| 38 | 105 | 480 | 13.0 | 7.22 |
| 39 | 120 | 480 | 11.6 | 9.59 |
| 40 | 135 | 480 | 10.8 | 8.04 |
| 41 | 150 | 480 | 10.4 | 8.41 |
| 42 | 165 | 480 | 9.6 | 12.79 |
| 43 | 180 | 480 | 9.2 | 11.70 |
| 44 | 30 | 540 | 22.3 | 9.86 |
| 45 | 45 | 540 | 16.6 | 4.17 |
| 46 | 60 | 540 | 16.1 | 12.33 |
| 47 | 75 | 540 | 14.2 | 13.21 |
| 48 | 90 | 540 | 12.9 | 9.26 |
| 49 | 105 | 540 | 12.1 | 12.36 |
| 50 | 120 | 540 | 11.3 | 9.64 |
| 51 | 135 | 540 | 10.5 | 8.72 |
| 52 | 150 | 540 | 9.3 | 8.21 |
| 53 | 165 | 540 | 8.5 | 8.13 |
| 54 | 180 | 540 | 8.7 | 8.04 |
| 55 | 30 | 600 | 21.7 | 8.07 |
| 56 | 45 | 600 | 15.7 | 10.09 |
| 57 | 60 | 600 | 16.0 | 12.12 |
| 58 | 75 | 600 | 13.4 | 8.74 |
| 59 | 90 | 600 | 12.0 | 9.17 |
| 60 | 105 | 600 | 11.4 | 8.95 |
| 61 | 120 | 600 | 10.5 | 10.11 |
| 62 | 135 | 600 | 9.9 | 7.70 |
| 63 | 150 | 600 | 8.4 | 10.26 |
| 64 | 165 | 600 | 8.5 | 10.83 |
| 65 | 180 | 600 | 8.1 | 6.95 |
| 66 | 30 | 660 | 21.1 | 5.67 |
| 67 | 45 | 660 | 15.7 | 8.86 |
| 68 | 60 | 660 | 15.1 | 9.21 |
| 69 | 75 | 660 | 12.9 | 7.14 |
| 70 | 90 | 660 | 11.2 | 8.25 |
| 71 | 105 | 660 | 10.6 | 7.45 |
| 72 | 120 | 660 | 9.9 | 7.75 |
| 73 | 135 | 660 | 9.2 | 6.16 |
| 74 | 150 | 660 | 8.4 | 8.76 |
| 75 | 165 | 660 | 8.0 | 12.04 |
| 76 | 180 | 660 | 7.9 | 8.20 |
| 77 | 30 | 720 | 20.4 | 3.43 |
| 78 | 45 | 720 | 14.9 | 8.04 |
| 79 | 60 | 720 | 14.9 | 12.22 |
| 80 | 75 | 720 | 13.1 | 6.78 |
| 81 | 90 | 720 | 11.7 | 8.50 |
| 82 | 105 | 720 | 10.7 | 8.78 |
| 83 | 120 | 720 | 9.5 | 8.79 |
| 84 | 135 | 720 | 9.1 | 9.53 |
| 85 | 150 | 720 | 8.2 | 6.47 |
| 86 | 165 | 720 | 8.1 | 3.72 |
| 87 | 180 | 720 | 7.9 | 5.45 |
| 88 | 30 | 780 | 20.3 | 3.18 |
| 89 | 45 | 780 | 14.9 | 8.45 |
| 90 | 60 | 780 | 14.4 | 13.37 |
| 91 | 75 | 780 | 12.5 | 8.43 |
| 92 | 90 | 780 | 11.1 | 5.29 |
| 93 | 105 | 780 | 10.3 | 7.63 |
| 94 | 120 | 780 | 9.3 | 8.33 |
| 95 | 135 | 780 | 8.6 | 4.21 |
| 96 | 150 | 780 | 7.8 | 5.43 |
| 97 | 165 | 780 | 7.2 | 7.14 |
| 98 | 180 | 780 | 7.4 | 6.84 |
| 99 | 30 | 840 | 19.4 | 1.21 |
| 100 | 45 | 840 | 14.6 | 0.67 |
| 101 | 60 | 840 | 14.2 | 5.42 |
| 102 | 75 | 840 | 12.2 | 5.05 |
| 103 | 90 | 840 | 10.4 | 3.95 |
| 104 | 105 | 840 | 9.8 | 10.24 |
| 105 | 120 | 840 | 9.0 | 7.03 |
| 106 | 135 | 840 | 8.6 | 8.33 |
| 107 | 150 | 840 | 7.8 | 8.54 |
| 108 | 165 | 840 | 7.1 | 4.80 |
| 109 | 180 | 840 | 7.1 | 11.17 |
| 110 | 30 | 900 | 18.5 | 2.03 |
| 111 | 45 | 900 | 14.2 | 3.87 |
| 112 | 60 | 900 | 13.8 | 6.72 |
| 113 | 75 | 900 | 11.8 | 5.93 |
| 114 | 90 | 900 | 10.5 | 10.08 |
| 115 | 105 | 900 | 9.5 | 6.64 |
| 116 | 120 | 900 | 8.4 | 11.45 |
| 117 | 135 | 900 | 8.2 | 10.93 |
| 118 | 150 | 900 | 7.6 | 9.28 |
| 119 | 165 | 900 | 7.1 | 6.33 |
| 120 | 180 | 900 | 6.9 | 4.74 |
平均収益のトレンド
平均収益のトレンドを作成するために、2025-08-19 を起点に、取引日までの平均収益を算出してプロットしました。
最新 (12/9) の平均収益で、高パフォーマンスのトップ 5 の条件は色を変えてプロットしています。一方、平均収益がマイナスになっている条件は黒の実線、その他は薄墨色でプロットしています。
平均収益 × 取引日数 が対象期間の総収益になります。
もし、どの値動きにも通用するベストな条件があって、取引を始めるときにその条件を採用することができれば何も問題がありませんが、現実は、過去のデータを集計すること無しに条件を決めることは不可能です。
では、今、条件を選ばなければならないとすれば、過去データの集計から単にベストな条件を採用して良いのか、と言えばやはり判断に悩みます。
それは、最新の平均収益がトップ 5 のグループに入っている条件でも、過去にマイナスに沈んでいるような時期があるとすれば、特定の値動きに対して得手不得手がはっきりしていると考えられるからです。
概ね上位グループに入っている条件を選ぶとか、過去のばらつきを考慮するなど、評価手段はいろいろありそうです。
上記の懸念は、全てのデータが揃うまで、途中のデータで集計していて感じたことですが、シミュレーション結果が全て揃って集計した結果を眺めると、平均収益が高いグループは対象期間を通じての平均収益も概ね高く推移しています。
ひとまず、ベストな条件でその日のティックデータで取引シミュレーションのパフォーマンスを確認します。
以下に、最新の平均収益トップ 5 の実験条件をまとめました。
| PERIOD_MA_1 | PERIOD_MA_2 | trade | total | |
|---|---|---|---|---|
| 90 | 60 | 780 | 14.4 | 13.37 |
| 47 | 75 | 540 | 14.2 | 13.21 |
| 42 | 165 | 480 | 9.6 | 12.79 |
| 49 | 105 | 540 | 12.1 | 12.36 |
| 46 | 60 | 540 | 16.1 | 12.33 |
平均収益が 10 円ちょっとというのは少なくて残念ですが、できるところから運用を始めて、より良いアルゴリズムに進化させていきます。
最新の平均収益が負になった条件は以下の一条件だけでした。
| PERIOD_MA_1 | PERIOD_MA_2 | trade | total | |
|---|---|---|---|---|
| 1 | 45 | 300 | 22.9 | -0.28 |
等高線図 (Contour Map)
平均などの集計をせずに生のシミュレーション結果の各日の収益データから等高線図を作成しました。実験点は ・、平均収益トップ 5 の条件は 🟢、マイナスの条件は ✖ で表示しています。
今のところ、ベストな条件が実験範囲の隅に偏ってはいません。
本日のシミュレーション
前日のベスト条件で、本日のティックデータで取引シミュレーションをしてみました。
【取引明細】
注文日時 銘柄コード 売買 約定単価 約定数量 損益
0 2025-12-10 09:01:43 7011 買建 4317.0 1 NaN
1 2025-12-10 09:05:59 7011 売埋 4323.0 1 6.0
2 2025-12-10 09:06:13 7011 買建 4329.0 1 NaN
3 2025-12-10 09:08:38 7011 売埋 4311.0 1 -18.0
4 2025-12-10 09:08:39 7011 売建 4311.0 1 NaN
5 2025-12-10 09:19:17 7011 買埋 4313.0 1 -2.0
6 2025-12-10 09:23:31 7011 売建 4299.0 1 NaN
7 2025-12-10 09:25:48 7011 買埋 4304.0 1 -5.0
8 2025-12-10 09:28:43 7011 売建 4295.0 1 NaN
9 2025-12-10 10:04:12 7011 買埋 4264.0 1 31.0
10 2025-12-10 12:33:30 7011 売建 4209.0 1 NaN
11 2025-12-10 12:46:10 7011 買埋 4198.0 1 11.0
12 2025-12-10 12:47:36 7011 売建 4185.0 1 NaN
13 2025-12-10 13:00:19 7011 買埋 4185.0 1 0.0
取引回数 : 14 回, 一株当りの損益 : 23.0 円
次のステップは検算
時間がかかる過去のティックデータによる取引シミュレーションと集計が終わったので、次はリアルタイムでシャドー・トレードを始めるステップに進みたいのですが、その前に…。
後になって、算出している数値に間違いが見つかれば、間違いの内容次第では心が折れて立ち直れなくなりそうです。
いくら見直してもバグから逃れられる保証はありませんが、ひとまず、明日は Jupyter Lab 上でおこなってきた集計コードを本ブログ上で整理、検算することにします。
参考サイト
- マーケットスピード 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 件のコメント:
コメントを投稿