楽天証券の口座でデイトレの自動売買に挑戦しようと Windows / Excel 上で利用できる マーケットスピード II RSS を活用して Python であれこれ取り組んでいます。この「自動売買への道」のトピックでは、プログラミングの話題にも踏み込んで、日々の活動をまとめています。
デイトレ用自作アプリ
以下は株価・取引に関連する情報の流れを示しています。
楽天証券では、Python からネットワーク越しに直接取引できるような API が提供されていないので、マーケットスピード II RSS を介して取引をする構成を取っています。
リファクタリング週間を終えて ─ Kabuto 0.3.21
| 対象銘柄 | 住友化学 (4005) |
|---|---|
| LINEヤフー (4689) | |
| 野村ホールディングス (8604) | |
| 信用区分 | 一般信用(いちにち) |
| 注文数量 | 100 株 |
| 価格区分 | 成行 |
| 制 約 | ナンピン禁止 (GUI) |
本アプリは、短周期の移動平均線 MA1 と売買高加重平均価格 VWAP のクロス・シグナルで売買判断をします。
今月の前半(9 営業日)で、注文機能を含むアプリの基本動作を確認できたので、今月 3 週目はコードを徹底的に整理(リファクタリング)する週にあてました。
Anthropic Cloude にサポートをしてもらって、アプリの Python コードに型ヒントを付けながらコードの改善を進めました。全てのリファクタリングはできませんでしたが、コアとなるクラスの整理が概ね片付きました。
また、本アプリは同時に 3 銘柄をスクロールバー無しに表示できるように設計しているので、この一週間、CPU の負荷確認をしながら 3 銘柄を表示した状態で稼働させてみました。
Intel N150 を搭載した非力な Windows PC 上で、楽天証券のマーケットスピードⅡと Microsoft Excel 2024、そして本アプリを稼働させています。この状態で取引時間中の CPU 使用率は、概ね 30% 前後に収まりました。まだまだ機能を追加できる余裕があります。
※ ちなみに、この PC は取引用に専業化するために、余計な Windows アプリは徹底的に排除しています。
銘柄ごとのチャートは、MA1 と VWAP のトレンド線の表示と、MA1 - VWAP 乖離のトレンド線を表示するモードを切り替えられるようになっています。
MA1 が VWAP 前後で揉み合えば、クロス・シグナルが頻発して無駄なエントリを重ねてしまいます。そこで、揉み合い局面かどうかを判断できる材料の足しになるように、値動きのばらつき具合を視覚化してみました。
株価の移動 IQR(四分位数)から、箱ひげ図の最小値と最大値を算出して、MA1 - VWAP の乖離のトレンド線に、バンド幅として重ねて表示してみました。使いものになるかどうかの評価はこれからです。
正規分布しているかに関係なく、定義が簡単なボリンジャーバンドの ±3σ 線を利用しても良かったのですが、毎回標準偏差を算出すると計算コストが掛かるので、工夫すれば計算コストを節約できるメジアン系の統計量を採用しました。
実際に重ねてみると、期待していたよりバンド幅が小さかったので、ばらつき度合いを判りやすくするための最小値と最大値の定義調整や、より識別し易い(バンド幅の)表示色改善などを今後の課題にして評価を続けます。
デイトレ用取引アプリの構成概略
現在のアプリは、エントリ:手動、エグジット:自動(+手動)の構成になっています。
- マーケットスピードⅡ RSS / Excel とのやりとり
- 複数銘柄(20 銘柄程度)のティックデータを収集
- 4 本足データは使用していません。
- 素人考えなのかもしれませんが、ティックデータを取得できるのに、デイトレで四本足データでローソク足チャートを作るはもったいないと考えています。
- アプリが取得する情報は、(原則)時刻、株価と出来高のみ
- ティックデータの取得頻度は、マーケットスピードⅡ RSS のデフォルトの更新頻度の 2 秒
- 収集したティックデータは、銘柄コードをシート名にした新規 Excel ブック (.xlsx) に自動保存
- 発注の約定確認は、Python と Excel VBA とで最低限のやり取りをしています。
- 信用建玉発注・返済(成行注文)
- 取引対象の銘柄は、ティックデータを収集する銘柄の中から選択
- 取引対象の銘柄数に上限なし。ただし、スクロールなしに一画面で値動きを見られるのは 3 銘柄まで。
- Excel 側に、RSS の VBA 関数で発注・約定確認をするユーザー VBA 関数を実装
- Python 側からVBA 関数を実行。
- 含み益の情報は Excel から取得せず、アプリ内部で見込み額を算出
- 株価チャート
- 株価トレンド
- 最新株価の点
- 短周期移動平均線 MA1 と 売買高加重平均価格 VWAP のトレンド線
- MA1 と VWAP の乖離トレンド(銘柄ごとに切り替えて表示)
- 最新株価 - VMAP の点
- MA1 - VWAP 乖離のトレンド線
- 株価の移動 IQR から、箱ひげ図の最大値、最小値を算出して、乖離トレンド線のバンド幅にして表示
- MA1 と VWAP がクロスしたタイミングの縦線
- 直近のゴールデン・クロスとデッド・クロスを色を変えて表示
- 一般の取引ツールと異なり、当日の取引時間幅に固定したチャート
- デイトレは取引時間内の値動きに集中したいので、どうしてもこのようなチャートにしたかった。
- 手動エントリ
- 買 建 と 売 建 ボタンをクリックして手動でエントリ
- クリック可能なボタンの制御は、ナンピンができないロジックになっている。
- 寄り付き後、設定期間(デフォルトは 300 step = 600 秒)は売買ボタンをロックして売買禁止。
- 建玉があるときに 返 済 ボタンをクリックすれば手動で返済(エグジット)することも可能
- 自動エグジット
- 移動平均線がクロスしたタイミングで建玉があれば返済
- ただし、ゴールデンクロス時に買建、デッドクロス時に売建の建玉を持っている場合は返済しない。
- トレーリングストップによる利確
- ドローダウンとドローダウン比率を設定して運用
- トレーリングストップは、含み損益 \(profit\) が 最大含み益 \(profit_{max}\) からどれだけ落ちたら利確するかを決める仕組みです。
-
\[ \text{drawdown} = profit_{max} - profit \]
-
\[ \text{drawdown_ratio} = \frac{drawdown}{profit_{max}} \]
- 含み損がしきい値(マイナス側)を超えればロスカット
- 含み損が連続して設定回数を超えればロスカット
改善は継続中だけど通常運用へ
改善ネタはいくつも残っていますが、そういった改善を続けながら、通常運用フェーズに入ります。
通常運用フェーズに入っても、まだアプリを安定運用できる状態ではなく、機能追加や改善を加えれば恐る恐る使ってみることに変わりはありません。その中で、今まで試してきた銘柄を中心に、少しずつ他の銘柄を経験していきます。
参考サイト
- マーケットスピード II RSS | 楽天証券のトレーディングツール
- マーケットスピード II RSS 関数マニュアル
- 注文 | マーケットスピード II RSS オンラインヘルプ | 楽天証券のトレーディングツール
- PythonでGUIを設計 | Qtの公式Pythonバインディング
- Python in Excel alternative: Open. Self-hosted. No limits.
- Book - xlwings Documentation




0 件のコメント:
コメントを投稿