2025-12-19

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

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

今日の日経平均株価

現在値 49,507.21 +505.71 +1.03% 15:30
前日終値 49,001.50 12/18 高値 49,766.96 12:31
始値 49,387.71 09:00 安値 49.257.15 09:01

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

【関連ニュース】

デイトレ用自作アプリ

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

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

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

取引シミュレーション

強化学習モデルのチューニング作業の優先順位を下げ、テクニカル指標のシグナルでの取引シミュレーションをしています。

制約条件

現在シミュレーションで設定している制約は下記のとおりです。

  • 売買条件
    • ポジションを解消してから次の売買をする(ナンピン禁止)。
  • 取引回数
    • 上限を 100 回に制限
  • 約定条件
    • スリッページなし

売買判断のための指標

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

  • 2つの移動平均 MA1MA2
    • クロス・シグナルで売買
    • PERIOD_MA_1 = TBD
    • PERIOD_MA_2 = TBD
  • 移動範囲 Moving Range, MR
    • ボラティリティを判定する指標、しきい値以下の時はフラグを立ててエントリしない。
    • PERIOD_MR = 30
    • THRESHOLD_MR = 7
  • ロスカット
    • しきい値以下になったらフラグを立てて建玉を返済、損切り。
    • (現在、無効に設定)
  • 利確
    • 含み益と含み益最大値との比較で建玉を返済、利確する簡単なロジックを導入。
    • (現在、無効に設定)

取引シミュレーションと実験

下記に、毎日確認をしている実験条件の概略をまとめました。

実験条件 (doe-6) と最適条件判定方法
データ 約 1 秒間隔で取得した株価と出来高のティックデータ(1 日分)
対象銘柄 7011 呼び値が 1 円で出来高が多い、東証プライムの銘柄を選定
対象期間 2025-08-19 以降、前営業日まで
実験因子 実験水準 説  明
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 7
実験計画 完全実施要因計画 (Full Factorial Design)
評価特性 説  明
収益 (total) 円 / 株 1 日の売買シミュレーションで、2 つの移動平均のクロス・シグナルに従って売買した収益。
取引回数 (trade) 【参考値】システム側でナンピン売買を禁止し、取引回数の上限を 100 回に設定。
最適条件判定方法
  1. 引け後に、当日分ティックデータの取引シミュレーションを実験条件に沿って実施。
  2. 各実験条件に対して、蓄積した日付分の収益の平均(平均収益)を算出。
  3. 原則として平均収益が最も高い条件を、翌日の取引条件に採用する。

いままでの実験から、収益を数式でモデル化できなかったので、やむなく、パフォーマンス(平均収益)を毎日確認してベストの条件を選ぶという手間がかかる方法を続けています。

実験条件別の収益トレンド

前営業日までを集計した平均収益でトップ 5 の条件は色を変えてプロットしています。一方、平均収益がマイナスになっている条件は黒の実線、その他は薄墨色でプロットしています。

なお、母数が少ないうちは平均収益の変動が大きいので、キリが良い 2025-09-01 からの平均収益をチャートにしています。

実験条件別の平均収益トレンド(データは前営業日まで)
平均収益トップ 5 の条件
  PERIOD_MA_1 PERIOD_MA_2 total
47 75 540 15.20
90 60 780 14.46
49 105 540 14.05
57 60 600 13.82
46 60 540 13.17

メジアンでも収益を確認してみた

平均収益は母数を乗じれば総収益になります。運良く最初からベストな条件を採用していれば問題がないのですが、ベストな条件は不動ではありません。それに、もし過去に極めて収益が高い日があれば、平均収益はその値にひっぱられます。そうすると、直近のパフォーマンスがそれほど良くなくともベスト条件にランキングされ続けることもありえます。

対象銘柄 7011 の場合、トレンドをプロットした 2025-09-01 以降の期間で、平均収益トップ 5 はどれもマイナス圏に沈むことなく概ね良好なトレンドを保っていますが、それでもトレンドの起伏には差があります。

そこで、メジアン(中央値)でも収益を確認しました。

平均収益の時と同じように、当日のメジアンを算出するには起点の 2025-08-19 から当日までのデータのメジアンを算出しています。

実験条件別のメジアン収益トレンド(データは前営業日まで)

メジアンで集計した収益のランキングも、平均収益と同様に作成しました(トップ 10 まで)。

メジアン収益トップ 10 の条件
  PERIOD_MA_1 PERIOD_MA_2 total
90 60 780 8.00
68 60 660 7.00
117 135 900 7.00
44 30 540 6.00
29 135 420 6.00
46 60 540 6.00
30 150 420 5.00
56 45 600 5.00
42 165 480 5.00
59 90 600 5.00

平均収益のランキングと比較すると、平均収益で 2 位の条件がメジアン収益では 1 位になっています。一方、平均収益で 1 位だった条件は、メジアン収益のトップ 10 には入っていません。

いろいろ考え方があると思いますが、「収益トレンドを見てベスト条件を採用する」という前提で条件を決めるとすれば、平均収益、メジアン収益どちらにもトップグループに入っている条件であれば、より安定して高い収益を期待できる条件だろうと評価できます。

そういうわけで、今回はメジアン収益トップの条件を事後シミュレーションする条件に採用しました。

等高線図 (Contour Map)

過去のティックデータを補完した等高線図を参考に作成しています。実験点は 平均収益トップ 5 の条件は 🟢、平均収益がマイナスになった条件があれば で表示しています。

実験条件範囲の等高線図(データは前営業日まで)

本日の取引シミュレーション

本日のパラメータ
パラメータ 設定値
PERIOD_MA_1 60 sec
PERIOD_MA_2 780 sec
PERIOD_MR 30 sec
THRESHOLD_MR 7

前営業日までの集計からベスト条件(今回はメジアン収益のトップ)を適用して、本日取得したティックデータで取引シミュレーションを実施しました。

リアルタイム売買用アプリで、ティックデータを読み込ませてシミュレーションしたチャートと取引結果を掲載しています。


本日のティックデータでシミュレーションをした結果

取引明細(100 株売買)

注文番号 注文日時 銘柄コード 売買 約定単価 約定数量 損益 備考
1 2025-12-19 09:01:22 7011 買建 3850 100
2 2025-12-19 09:14:18 7011 売埋 3879 100 2900.0
3 2025-12-19 10:10:50 7011 買建 3920 100
4 2025-12-19 10:17:40 7011 売埋 3907 100 -1300.0
合計損益 1600.0

今日はマイナスにはなりませんでしたが微益です。そろそろ損切りロジックを考えた方がよいのかもしれません。

参考サイト

  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 件のコメント:

コメントを投稿