楽天証券の口座でデイトレの自動売買に挑戦しようと Windows / Excel 上で利用できる マーケットスピード II RSS を活用して Python であれこれ取り組んでいます。この「自動売買への道」のトピックでは、プログラミングの話題にも踏み込んで、日々の活動をまとめています。
デイトレ用自作アプリ
以下は株価・取引に関連する情報の流れを示しています。
楽天証券では、Python からネットワーク越しに直接取引できるような API が提供されていないので、マーケットスピード II RSS を介して取引をする構成を取っています。
デイトレ用自作アプリ
しばらく強化学習のアルゴリズム開発に専念していたため、デイトレ用アプリの開発が滞ってしまっていました。年内に一定の成果を出したかったので、一旦、強化学習の方の優先順位を下げて、移動平均のクロスシグナルでそこそこ動作するシンプルなアルゴリズムの開発に取り組み始めました。それと並行してデイトレ用の GUI アプリの開発も再開しました。
詳細は、別の機会にまとめることにしますが、強化学習の前に取り組んでいた Parabolic SAR を利用したシステムで実装できていた機能、リアルタイムでのシャドー・トレーディングができるようになったので、アプリのスクリーンショットを掲載しました。
内部構成が変わってしまったので、以前に実装できていた機能レベルに追いつくのに予想以上に時間がかかってしまいました。
一度に扱える銘柄数の上限に制約を付けていませんが、実行環境として最初のターゲットにしている Intel N150 搭載の PC では、スクリーンショットのように、同時に 3 銘柄の取引を扱えれば上出来だと考えています。
取引シミュレーション
強化学習モデルのチューニング作業の優先順位を下げ、テクニカル指標のシグナルでの取引シミュレーションをしています。
制約条件
現在シミュレーションで設定している制約は下記のとおりです。
- 売買条件
- ポジションを解消してから次の売買をする(ナンピン禁止)。
- 取引回数
- 上限を 100 回に制限
- 約定条件
- スリッページなし
売買判断のための指標
現在利用している指標は下記のとおりです。
- 2つの移動平均 MA1 と MA2
- クロス・シグナルで売買
- PERIOD_MA_1 = TBD
- PERIOD_MA_2 = TBD
- 移動範囲 Moving Range, MR
- ボラティリティを判定する指標、しきい値以下の時はフラグを立ててエントリしない。
- PERIOD_MR = 30
- THRESHOLD_MR = 7
- ロスカット
- しきい値以下になったらフラグを立てて建玉を返済、損切り。
- (現在、無効に設定)
- 利確
- 含み益と含み益最大値との比較で建玉を返済、利確する簡単なロジックを導入。
- (現在、無効に設定)
取引シミュレーションと実験
下記に、毎日確認をしている実験条件の概略をまとめました。
| データ | 約 1 秒間隔で取得した株価と出来高のティックデータ(1 日分) | |||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 対象銘柄 | 7011 | 呼び値が 1 円で出来高が多い、東証プライムの銘柄を選定 | ||||||||||||||||||
| 対象期間 | 2025-08-19 以降、前営業日まで | |||||||||||||||||||
| 実験因子 | 実験水準 | |||||||||||||||||||
| PERIOD_MA_1 | sec | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100 | 110 | 120 | 130 | 140 | 150 | 160 | 170 | 180 | 190 | ||
| PERIOD_MA_2 | sec | 300 | 350 | 400 | 450 | 500 | 550 | 600 | 650 | 700 | 750 | 800 | 850 | 900 | 950 | 1000 | 1050 | 1100 | ||
| PERIOD_MR | sec | 30 | ボラティリティを測定する指標として移動範囲を採用。 しきい値より低ければ、売買エントリを禁止。現時点では、しきい値を高めに設定。 |
|||||||||||||||||
| THRESHOLD_MR | 円 | 7 | ||||||||||||||||||
| 実験計画 | 完全実施要因計画 (Full Factorial Design) | |||||||||||||||||||
| 評価特性 | 説 明 | |||||||||||||||||||
| 損 益 [total] |
円 | 収集したティックデータ(1 日分)で、2 つの移動平均のクロス・シグナルに従った(ただしエントリを制限する「しきい値」あり)売買シミュレーションを実施した損益。 | ||||||||||||||||||
| 取引回数 [trade] |
回 | 【参考値】 システム側でナンピン売買を禁止し、取引回数の上限を 100 回に設定。 |
||||||||||||||||||
| 最適条件 判定方法 |
|
|||||||||||||||||||
実験条件別の平均損益トレンド
前営業日までを集計した平均損益でトップ 5 の条件は色を変えてプロットしています。一方、平均損益がマイナスになっている条件は黒の実線、その他は薄墨色でプロットしています。
なお、母数が少ないうちは変動が大きいので、キリが良い 2025-09-01 からの平均損益をチャートにしています。
※ 益はプラス、損はマイナスです、念の為。😁
| PERIOD_MA_1 | PERIOD_MA_2 | 取引回数 | 平均損益 | 2025-12-26 | |
|---|---|---|---|---|---|
| 88 | 60 | 550 | 20.764045 | 14.505618 | -17.000000 |
| 89 | 70 | 550 | 18.629213 | 13.359551 | -13.000000 |
| 90 | 80 | 550 | 16.696629 | 13.235955 | -7.000000 |
| 215 | 140 | 900 | 10.449438 | 12.516854 | 0.000000 |
| 230 | 120 | 950 | 10.831461 | 12.325843 | 0.000000 |
実験条件別のメジアン損益トレンド
平均損益の時と同じように、当日のメジアンを算出するには起点の 2025-08-19 から当日までのデータのメジアンを算出しています。
メジアンで集計した損益のランキングも、平均損益と同様に作成しました。
| PERIOD_MA_1 | PERIOD_MA_2 | 取引回数 | メジアン損益 | 2025-12-26 | |
|---|---|---|---|---|---|
| 157 | 70 | 750 | 14.000000 | 8.000000 | -13.000000 |
| 62 | 140 | 450 | 14.000000 | 7.000000 | 0.000000 |
| 69 | 40 | 500 | 22.000000 | 6.000000 | -6.000000 |
| 51 | 30 | 450 | 28.000000 | 6.000000 | -5.000000 |
| 123 | 70 | 650 | 16.000000 | 6.000000 | -13.000000 |
| 139 | 60 | 700 | 16.000000 | 6.000000 | -17.000000 |
| 106 | 70 | 600 | 15.000000 | 6.000000 | -13.000000 |
| 207 | 60 | 900 | 16.000000 | 6.000000 | -17.000000 |
| 88 | 60 | 550 | 18.000000 | 5.000000 | -17.000000 |
| 81 | 160 | 500 | 12.000000 | 5.000000 | 0.000000 |
等高線図 (Contour Map)
過去のティックデータを補完した等高線図を参考に作成しています。実験点は ・、平均損益トップ 5 の条件は 🟢(ただし、トップ 5 を大きく、他を小さくしています)、平均損益がマイナスになった条件があれば ✖ で表示しています。
次回使用する条件(パラメータ)
次回使用する条件は、平均損益でトップの条件を採用します(下記)。
| パラメータ | 設定値 | |
|---|---|---|
| PERIOD_MA_1 | 60 | sec |
| PERIOD_MA_2 | 550 | sec |
| PERIOD_MR | 30 | sec |
| THRESHOLD_MR | 7 | 円 |
週末に最新の結果をまとめていますが、一応、毎日同じように確認しています。この条件は、現在の DOE (doe-8) でウィンドウチェックをするようになってからは変動していません。
参考サイト
- マーケットスピード 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 件のコメント:
コメントを投稿