窓埋め解析はヒートマップで全て解決です!たっきん(Twitter)です!
前回に引き続き、窓埋めトレードのアプリケーションを作り込みを行っていまして、今回はQtでヒートマップを作成し窓埋めトレードの勝率を可視化できるようにしてみました。
ヒートマップを使った可視化は以前にBokehを使ってやりましたが、ほぼ同じ内容をQtに移植した感じになります。
ヒートマップに限ったことではないのですが、Bokehに比べてQtのほうが描写スピードが格段に速いです!
まぁそれでも数秒待たされますが・・・(笑)
最近はコーディングの仕方にも気を使うようにしていて、なるべく高速に実行できるよう可能な限りデータ演算ライブラリ(Numpy、Pandas)を使うようにしています。
Numpy、Pandasの一部はC言語で実装されているため、インタプリタであるPythonに比べ、高速に動作します。
そんなこんなでなんとか実用に耐えうるツールに仕上がってきたので紹介していこうと思います。
ヒートマップ(Heat Map)の概要
そもそもヒートマップを使って何をやってるの?って疑問に思っている方もいると思いますが、それについては以下の記事で詳しく説明していますのそちらを参照してください。
さて、今回作成したヒートマップですが、あらゆる角度から解析ができるように色々な機能を盛り込んでみました。
代表的なものは以下のものになります。
- データ間引き
- 日付範囲指定
- 窓の開き方向指定
- 選択セルの詳細情報表示
データ間引き
ヒートマップは縦軸に「Gap Range Threshold」を、横軸に「loss cut Range Threshold」をとっていて、単位はどちらもpipsになります。
通常は縦軸、横軸ともに1pips単位でマップの格子セルを生成するのですが、範囲が広すぎて生成する格子セルの数が多くなりすぎるとマップを生成するのに膨大な時間がかかってしまいます。
そんなときにデータ間引くことによって生成する格子セルの数を少なくし、マップを生成する時間を短縮させています。
当然ながらデータを間引く代償として生成されるマップが粗くなってしまうため、極力間引かないでマップ生成したほうが精度の高い解析ができるようになります。
データ間引きの設定は「Decimate config」で行います。
「Decimate」と書かれたスピンボックスの数字が間引き係数となります。
例えば、この数字を3に設定してマップを生成すると、3×3の格子を1つの格子セルとしてマップを生成します。
この場合、縦軸、横軸ともに1格子セルあたりの最小単位は3pipsとなります
5に設定した場合は、5×5となり、最小単位も5pipsとなります。
また間引きしないでマップを生成したい場合は、この数字を1に設定します。
実際に間引き係数 = 1, 3, 5にした場合に生成されるヒートマップ画像を以下に載せておきます。
【間引き係数 = 1】
【間引き係数 = 3】
【間引き係数 = 5】
日付範囲の指定
ヒートマップを生成する際に全期間ではなく、一定期間に絞ったデータを使ってマップ生成がてきるように作ってみました。
これをすることで時間軸に沿ったヒートマップの変化の傾向を解析できるようになります。
この設定は「Date Range」で行います。
「step[week]」と書かれたスピンボックスの数字がマップを生成する範囲を示しています。
例えば、5を設定した場合は5週間分のデータ(窓埋めデータ5個分)を使ってマップ生成します。
そして、スピンボックスの下にあるスライドバーで表示範囲を選択できるようにしてあります。
表示例は以下の画像を見てください。
【Date Range 表示例1】
【Date Range 表示例2】
【Date Range 表示例3】
窓方向の指定
ヒートマップの傾向は、もしかすると窓の開く方向によって差が出るかもしれません。
それを確認できるように、「全データ」、「上方向のみ」、「下方向のみ」のデータに絞ってヒートマップを生成できるようにしてみました。
この設定は「Gap Direction」で行います。
例えば、下図のような窓データがあったとします。
「All」を選択した場合は、全データを使ってマップを生成します。
「Only Gap Upper」を選択した場合は、窓が上方向に開いた以下5週分のデータのみを使ってマップを生成します。
- 2020/4/27
- 2020/5/18
- 2020/7/6
- 2020/7/13
- 2020/7/20
「Only Gap Lower」を選択した場合は、窓が下方向に開いた以下9週分のデータのみを使ってマップを生成します。
- 2020/4/20
- 2020/5/4
- 2020/5/11
- 2020/5/25
- 2020/6/1
- 2020/6/8
- 2020/6/15
- 2020/6/22
- 2020/6/29
吹き出し表示
マップのグラデーションだけでは具体的な数値はなにも見えてきません。
なので、格子セルにマウスカーソルを合わせたときに詳細情報の吹き出しが表示されるようにしてみました。
表示される情報は以下の3つです。
パラメータ名 | 意味 |
---|---|
Profit or Loss | 合計損益値[pips] |
Gap Range Th | 窓幅の閾値[pips](縦軸の位置) |
Max Open Range th | ロスカット閾値[pips](横軸の位置) |
一連の動作チェック
実際に動作している状態のGIF動画を作成してみました。
一連の動作は問題なく動いてそうです!
ヒートマップを生成するのに数秒かかっていますが、これでもコーディングの仕方を工夫してかなりの短縮に成功しています。
正直これ以上の短縮は厳しいです。orz
さいごに
「窓埋めトレード」アプリケーションの完成度も高まってきました。
機能を拡張しすぎてもキリがないと思うので、一旦ここで区切りをつけ、ソースコードの整理とデバッグを軽く行い「窓埋めトレード」アプリの作成を終わりにしたいと思います。
そして次にやることは実際に窓埋め解析を行い、ヒートマップから最も勝率の高いポイントを探しだすことですね。
そしてそのポイントが見つかったら、窓埋めトレードで実際にシストレ運用を開始したいと思います。
最初のうちは不具合等で上手く動かないことが予想されるので、デモ口座での試験運用を行う予定です。
まだ全ノードを結合させて動かしたことないですからね・・・
果たしてシステムトレードで本当に稼ぐことはできるのか?
結果が楽しみですね!
ソースコードはGitHubにupしてます。
GitHub trade_monitor
コメント