2026-02-14

自動売買への道 (2026-02-14)

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

デイトレ用自作アプリ

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

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

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

寄り付き後しばらくは売買禁止 ─ Kabuto 0.3.14

対象銘柄と発注条件概略
対象銘柄 住友化学 (4005)
LINEヤフー (4689)
信用区分 一般信用(いちにち)
注文数量 100 株
価格区分 成行
制  約 ナンピン禁止 (GUI)

セミオートの機能を備えた自作アプリの試験運用を今月から始めています。

試験運用をはじめて 3 日目で、周期の異なる 2 つの移動平均線 MA1 / MA2 から、短周期の移動平均線 MA1 / VWAP の組み合わせへ変えてしまったのですが、その運用も 7 営業日になりました。しばらくはこのまま続けられそうです。

寄り付き後の無駄なエントリを減らす対策として、寄り付き後の一定期間、売買ボタンにロックして売買禁止にしました。まだ日が浅いので、しばらくはこの方法を続けます。

試験運用中アプリの株価トレンド画面 (2026-02-13)

デイトレ用取引アプリの構成概略

現在のアプリは、エントリ:手動、エグジット:自動手動)の構成になっています。

マーケットスピードⅡ RSS / Excel とのやりとり
  • 複数銘柄(20 銘柄程度)のティックデータを収集
    • 4 本足データは使用していません。
  • アプリが取得する情報は、(原則)時刻、株価と出来高のみ
    • ティックデータの取得頻度は、マーケットスピードⅡ RSS のデフォルトの更新頻度の 2 秒
    • 収集したティックデータは、銘柄コードをシート名にした新規 Excel ブック (.xlsx) に自動保存
    • 発注の約定確認は、Python と Excel VBA とで最低限のやり取りをしています。
  • 信用建玉発注・返済(成行注文)
    • 取引対象の銘柄は、ティックデータを収集する銘柄の中から選択
      • 取引対象の銘柄数に上限なし。ただし、スクロールなしに一画面で値動きを見られるのは 3 銘柄まで。
    • Excel 側に、RSS の VBA 関数で発注・約定確認をするユーザー VBA 関数を実装
    • Python 側からVBA 関数を実行。
  • 含み益の情報は Excel から取得せず、アプリ内部で見込み額を算出
株価チャート
  • 株価トレンド
    • 株価トレンド線(灰色、ほとんど見えない)
    • 最新株価の点
    • 短周期移動平均線 MA1VWAP のトレンド線
  • 乖離度のトレンド(銘柄ごとに切り替えて表示)
    • 最新株価 - VMAP の点
    • 短周期移動平均線 MA1 - VWAP の乖離度トレンド線
  • MA1VWAP がクロスしたタイミングの縦線
    • 直近のゴールデン・クロスとデッド・クロスを色を変えて表示
  • 一般の取引ツールと異なり、当日の取引時間幅に固定したチャート
    • デイトレは取引時間内の値動きに集中したいので、どうしてもこのようなチャートにしたかった。
手動エントリ
  • 買 建売 建 ボタンをクリックして手動でエントリ
    • クリック可能なボタンの制御は、ナンピンができないロジックになっている。
    • 寄り付き後、設定期間(デフォルトは 300 step = 600 秒)は売買ボタンをロックして売買禁止。
  • 建玉があるときに 返 済 ボタンをクリックすれば手動で返済(エグジット)することも可能
自動エグジット
  • 移動平均線がクロスしたタイミングで建玉があれば返済
    • ただし、ゴールデンクロス時に買建、デッドクロス時に売建の建玉を持っている場合は返済しない。
  • トレーリングストップによる利確
    • ドローダウンとドローダウン比率を設定して運用
    • トレーリングストップは、含み損益 \(profit\) が 最大含み益 \(profit_{max}\)  からどれだけ落ちたら利確するかを決める仕組みです。
    • \[ \text{drawdown} = profit_{max} - profit \]
    • \[ \text{drawdown_ratio} = \frac{drawdown}{profit_{max}} \]
  • 含み損がしきい値(マイナス側)を超えればロスカット
  • 含み損が連続して設定回数を超えればロスカット

来週はリファクタリング・ウィーク

ちょこちょこと機能の変更をしましたが、肝心の売買機能については問題なく動いています。

ひとたび本運用を始めると、大きな不具合が出ない限りは変更を加えるのが怖くなるかもしれません。そこで、次週は徹底的にコードを整理(リファクタリング)する週にします。

リファクタリングは、Anthropic の Claude にサポートしてもらう予定です。Microsoft Copilot / Google Gemini / Le Chat Mistral も試してみましたが、自分の進め方との相性は、現時点で Claude がベストだと判断しました。

本アプリのメイン・クラス Kabuto のリファクタリング作業は、月曜日直前では間に合わなくなるかもしれないので、Claude のサポートを受けながらリファクタリングを少しずつ始めており、本日完了しました。

メイン・クラス以外は、過去のティックデータを用いた売買シミュレーション機能(デバッグ・モード)で動作検証ができるので、月曜日にメインクラスをリファクタリングしたアプリをリアルタイム・モードで動かして、問題がなさそうであれば全てのサブ・クラスのリファクタリングを実施して来週末までに完了させたいです。

参考サイト

  1. マーケットスピード II RSS | 楽天証券のトレーディングツール
  2. マーケットスピード II RSS 関数マニュアル
  3. 注文 | マーケットスピード II RSS オンラインヘルプ | 楽天証券のトレーディングツール
  4. PythonでGUIを設計 | Qtの公式Pythonバインディング
  5. Python in Excel alternative: Open. Self-hosted. No limits.
  6. Book - xlwings Documentation
にほんブログ村 株ブログ 株日記へ
PVアクセスランキング にほんブログ村