Bitcoin 裁定取引と自動取引 abitra.netのブログ

Bitcoinの自動売買のあれこれ

FX オープニングレンジブレイクアウト(短期ボラティリティに基づくオープニング・レンジ・ブレイクアウト)のバックテストしてみた その1


今年の残り期間はFXの運用に力をいれていこうかと考えています。
バイナリーオプションのバックテスト及びフォワードテストが少し落ち着てきたのでねー

本題

短期ボラティリティに基づくオープニング・レンジ・ブレイクアウト(オープンレンジブレイクアウト)とは


米国Futures Truth社の『The Ultimate Trading Guide』邦訳『究極のトレーディングガイド』という本によると長らく機能し続ける堅牢なシステムは必ず以下の5つの仕組みが含まれてるそうです。


・ドンチャン・チャンネル・ブレイクアウト <=現在フォワードテストにて実行しています。近く実弾開始
・***************
・短期ボラティリティに基づくオープニング・レンジ・ブレイクアウト <=今回はこれ
・***************
・***************

(本の内容を書いていいのか分からないので一応隠しています。)



↑購入は中古で良いと思いますよー


個人的には現在運用しているチャネルブレイクアウトと似たような手法かなーと考えています。


トレンド方向にブレイクしたらエントリーといった感じ。


実は本自体は数カ月以上前に速攻で買ったのですが読んでると眠たくなるので、まだ読破出来ていないんですよね。。。
机の上に置いているのですが手か伸びないw 何でだろうなー
お盆辺りで読み切ってしまいたい。


f:id:hogehoge_kato:20190809161631j:plain
※中古で買ったのですが前の方の書き込みがいたるところにw参考にさせてもらってます。


なので完全にオープンレンジブレイクアウトを把握しているかと言われると若干不安な点もあるので、もし間違った認識があればコメント等でご指摘頂けると助かります。

プログラム構築について

以前から気になっていた短期ボラティリティに基づくオープニング・レンジ・ブレイクアウトですが中々プログラム組もうとする意思が出なかったのですが思い立ったが吉日。
手間かかるかなーと思っていましたが意外と簡単に構築出来てバックテストを行ってみました。
プログラム自体は約1日も掛からない位で組めたんじゃないでしょうか。チャネルブレイクアウトと近いので応用すれば簡単に出来ました。


MT4(mql4)ではありませんが以下ブログのソースコードが大変参考になりました。
https://fwww.me/2018/07/28/ganso-doten-python-pine/
※この記事はbitcoin用かな。


特にこの部分。

range = ((high[5] + high[4] + high[3] + high[2] + high[1]) - (low[5] + low[4] + low[3] + low[2] + low[1])) / 5

k = 1.645

up = open + (range * k) < high
down = open - (range * k) > low

本に書かれていた短期ボラティリティの意味が何となくでしたがソースコードみれば一発でしたね。
係数 k も何かしら決まったものがあるのかなーと創造していたのですが様々な係数でバックテストすればいいって事なんだろうなーと。



mqlで書くとこんな感じかな。

input int    Renge_term       = 10;
input double Kei              = 1.618;
double HighestRate = "";
double LowestRate = "";

bool range_check()
{
    double range = "";
    double high_x = "";
    double low_x = "";

    for ( int i = 1; i < Renge_term + 1; i++ )
    {
        high_x  = high_x + High[i];
        low_x   = low_x  + Low[i];

    }
    range = (high_x - low_x) / Renge_term;
    HighestRate = Open[0] + (range * Kei);
    LowestRate  = Open[0] - (range * Kei);

    return(0);
}


HighestRate又はLowestRateを超えたらエントリーといった具合。
毎tick計算させるとあれなので各足の一番最初だけ走らせて処理すればOKかな。
※Renge_termとKeiはバックテストの最適化で適当に探る感じ。


気になっていた理由はUkiさん


TwitterBitcoinのトレードで有名なUkiさんが公開した基本ストラテジーのオープンレンジブ・レイクアウトが頭の片隅にありFXで運用したらどうなるんだろうなーって。




akagamiさんがドテン君を公開したタイミングでUkiさんの手法も話題になっていたかと記憶しています。

akagamiさんのチャネルブレイクアウトの方が簡単なので先にチャネルブレイクアウトの手法を構築しました。



短期ボラティリティに基づくオープニング・レンジ・ブレイクアウト(オープンレンジブレイクアウト)のバックテスト結果


結論から言うと利益出ると思います。

エントリーはオープニングレンジブレイクアウトですが決済は簡単に思いつく限りでは4種類あるかな。

  1. ドテン決済反対側で決済
  2. 利確損切を指定して決済
  3. トレール幅での決済 トレンドーフォロー側のブレイクとアウトと相性が良いと考えます。
  4. 別の設定でオープニングレンジブレイクで決済


個人的にはトレール幅での決済に注目しています。
今回初めてトレール幅を考慮したプログラムを組んでみましたが mql の標準機能のOrderModifyを利用すれば簡単に解決です。


利益を最大化出来るのはドテンが一番かなー

バックテスト期間及び条件


通貨ペア : USDJPY
時間 1H(1時間), 4H(4時間)
ヒストリカルデータ Dukascopy
期間 2014/1/1 - 2018/12/30 5年程


今回はドテンした場合の結果を案内です。

1時間足よりも4時間足の方が成果が良かったです。

1時間足のバックテストデータ


f:id:hogehoge_kato:20190809161701p:plain



4時間足のバックテストデータ


f:id:hogehoge_kato:20190809161710p:plain


一番成果良いバックテストの設定
4時間足
過去17足
係数 1.9


取引回数151
プロフィットファクタ 1.54

になります。


参考までに


チャネルブレイクアウトのデータは公開していませんが
4時間足に関していえばチャネルブレイクアウトよりもこちらのオープンレンジブレイクアウトの方が利益は出ています。
1時間足はチャネルブレイクアウトの方が利益が出ています。


懸念点


バックテストのデータを参考に成績の一番良かった設定で運用すると痛い目みる可能性があるのでデータの中からドローダウンや近しい設定で安定しているのを選択して運用すると良いかなーと考えます。

一番良い成績の設定はたまたまこの期間でうまくいった可能性が高いので。。。





USDJPY以外の通貨ペアでも試して良さげだったらフォワードテストで回して様子をみてみようかな。