楽天証券の口座でデイトレの自動売買に挑戦しようと Windows / Excel 上で動作する マーケットスピード II RSS を利用した Python アプリ (Kabuto) を開発しています。完全自動売買を実現できるまでの道程は長いですが、日々、セミオートでアプリを使ってトレードをしながら改良を進めています。
デイトレ用自作アプリ Kabuto
以下は株価・取引に関連する情報の流れを示しています。
楽天証券では、Python からネットワーク越しに直接取引できるような API が提供されていないので、RSS を介して取引をする構成を取っています。
複数チャートはタブ表示に変更
| 信用区分 | 一般信用(いちにち) |
|---|---|
| 注文数量 | 100 株 |
| 価格区分 | 成行 |
| 制 約 | ナンピン禁止 (GUI) |
本アプリ (Kabuto) の開発を始めた当初は、同時に複数銘柄のチャートを表示することに妙にこだわっていました。画面解像度が FHD 1,920×1,080 の画面に 3 銘柄をスクロールバー無しに表示できれば十分だと思って GUI をデザインし、実際の取引でしばらく使っていました。
しかし、拠り所にできるテクニカル指標無しに複数の銘柄を表示しても、初心者に毛の生えたような実力では、自分に都合の良い期待から無意味なエントリを繰り返して損失を積み重ねるだけだということが判ってきました。VWAP のクロス・シグナルだけでは、乗り遅れた時にリカバリできず、無駄なエントリを繰り返してしまいます。
ティックデータで取引をしたい自分にとって、有用なテクニカル指標を見出すまでには時間がかかるのでしょうが、使ってみなければ話になりません。とりあえず、個々の銘柄に有望なテクニカル指標を表示できるだけの余白を確保するために、複数チャートをタブ表示することに方針転換しました。
現在、ティックデータ用の RSI を導入するべく作業中です。
PyQtGraph の GraphicsLayoutWidget を利用した複数チャートの作成についてサンプルで確認中です。概ねレイアウトを確認できたので、本体への実装を始めています。
デイトレ用取引アプリの構成概略 ─ Kabuto 0.6
現在のアプリは、エントリ:手動、エグジット:自動(+手動)の構成になっています。
- アプリ開発の目的
- 自作したアプリを使って好きなようにデイ・トレードをしたい。
- しかし、感情に簡単に左右される自分がトレーダーの達人にはとてもなれそうにはない。
- そうであれば、アルゴリズム的なアプローチでトレーディングすることを目指したい。
- まずは、セミオートのトレーディング・システムの開発から始めて、最終的には強化学習モデル[候補]による完全自動売買システムの実現を目標にしています。
- 本システムは MIT License のオープンソースとして Github 上に公開していますが、自分が納得できるまでは、ドキュメンテーションなど、他人が理解でき、使いやすいようにするためのサポートは一切おこないません。
- 何時になるか判りませんが、バージョン 1.0.0 のリリース直前になったら、ドキュメンテーション整備を始めます。
- 現在のバージョニングのペースだと、ドキュメンテーションの整備はバージョンが 0.90.0 になってからになりそうです。
- マーケットスピードⅡ RSS / Excel とのやりとり
- 複数銘柄(20 銘柄程度)のティックデータを収集
- 4 本足データは収集していません。
- 素人考えかもしれませんが、ティックデータを取得できるのに、デイトレでわざわざ四本足データでローソク足チャートを作るはもったいないと考えています。
- アプリが取得する情報は、(原則)時刻、株価と出来高のみ
- ティックデータの取得頻度は、マーケットスピードⅡ RSS のデフォルトの更新頻度の 2 秒
- 収集したティックデータは、銘柄コードをシート名にした新規 Excel ブック (.xlsx) に自動保存
- 発注の約定確認は、Python と Excel VBA とで最低限のやり取りをしています。
- 信用建玉発注・返済(成行注文)
- 取引対象の銘柄は、ティックデータを収集する銘柄の中から選択
- 複数銘柄はタブで切り替えて表示。取引対象の銘柄数に上限を設定していないが、とりあえず 3 銘柄までは問題なく表示できるように、本番環境のターゲット CPU (Intel N150) の負荷を考慮して設計
- Excel 側に、RSS の VBA 関数で発注・約定確認をするユーザー VBA 関数を実装
- Python 側からVBA 関数を実行。
- 含み益の情報は Excel から取得せず、アプリ内部で見込み額を算出
- RSS と本アプリの xlwings が同一の Excel シートへアクセスするため、一定頻度で COM の衝突が発生します。
- 衝突による例外発生時にリトライ回数を設定してはいますが、Excel とのやり取りを必要最低限に抑えようとしています。
- 現在のところ、建玉発注時の建玉価格や返済価格の情報すらアプリ側で取得していません。機を見て約定価格を取得するように改善する予定です。
- 株価チャート
- 株価トレンド
- 最新株価の点
- 短周期移動平均線 MA1 と 売買高加重平均価格 VWAP のトレンド線
- MA1 と VWAP がクロスしたタイミングの縦線
- 直近のゴールデン・クロスとデッド・クロスを色を変えて表示
- テクニカル指標
- RSI を評価中
- 一般の取引ツールと異なり、当日の取引時間幅に固定したチャート
- デイトレは取引時間内の値動きに集中したいので、どうしてもこのようなチャートにしたかった。
- 手動エントリ
- 買 建 と 売 建 ボタンをクリックして手動でエントリ
- クリック可能なボタンの制御は、ナンピンができないロジックになっている。
- 寄り付き後、設定期間(デフォルトは 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 件のコメント:
コメントを投稿