FX オープニングレンジブレイクアウト(短期ボラティリティに基づくオープニング・レンジ・ブレイクアウト)のバックテストしてみた その1
今年の残り期間はFXの運用に力をいれていこうかと考えています。
バイナリーオプションのバックテスト及びフォワードテストが少し落ち着てきたのでねー
本題
短期ボラティリティに基づくオープニング・レンジ・ブレイクアウト(オープンレンジブレイクアウト)とは
米国Futures Truth社の『The Ultimate Trading Guide』邦訳『究極のトレーディングガイド』という本によると長らく機能し続ける堅牢なシステムは必ず以下の5つの仕組みが含まれてるそうです。
・ドンチャン・チャンネル・ブレイクアウト <=現在フォワードテストにて実行しています。近く実弾開始
・***************
・短期ボラティリティに基づくオープニング・レンジ・ブレイクアウト <=今回はこれ
・***************
・***************
(本の内容を書いていいのか分からないので一応隠しています。)
↑購入は中古で良いと思いますよー
個人的には現在運用しているチャネルブレイクアウトと似たような手法かなーと考えています。
トレンド方向にブレイクしたらエントリーといった感じ。
実は本自体は数カ月以上前に速攻で買ったのですが読んでると眠たくなるので、まだ読破出来ていないんですよね。。。
机の上に置いているのですが手か伸びないw 何でだろうなー
お盆辺りで読み切ってしまいたい。
※中古で買ったのですが前の方の書き込みがいたるところに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さん
TwitterでBitcoinのトレードで有名なUkiさんが公開した基本ストラテジーのオープンレンジブ・レイクアウトが頭の片隅にありFXで運用したらどうなるんだろうなーって。
お待ちかねのロジックを公開。
— UKI (@blog_uki) April 5, 2018
(元祖)ドテン君はブレイクアウトだが通常のHLチャネルブレイクではない。その手法は「オープニングレンジ・ブレイクアウト」と呼ばれるものである。文章での説明は面倒なのでhohetoとの会議資料をそのまま添付する。ストラテジーに関する質問には応対できません。 pic.twitter.com/LB6mdxVZZo
akagamiさんがドテン君を公開したタイミングでUkiさんの手法も話題になっていたかと記憶しています。
短期ボラティリティに基づくオープニング・レンジ・ブレイクアウト(オープンレンジブレイクアウト)のバックテスト結果
結論から言うと利益出ると思います。
エントリーはオープニングレンジブレイクアウトですが決済は簡単に思いつく限りでは4種類あるかな。
- ドテン決済反対側で決済
- 利確損切を指定して決済
- トレール幅での決済 トレンドーフォロー側のブレイクとアウトと相性が良いと考えます。
- 別の設定でオープニングレンジブレイクで決済
個人的にはトレール幅での決済に注目しています。
今回初めてトレール幅を考慮したプログラムを組んでみましたが mql の標準機能のOrderModifyを利用すれば簡単に解決です。
利益を最大化出来るのはドテンが一番かなー
バックテスト期間及び条件
通貨ペア : USDJPY
時間 1H(1時間), 4H(4時間)
ヒストリカルデータ Dukascopy
期間 2014/1/1 - 2018/12/30 5年程
今回はドテンした場合の結果を案内です。
1時間足よりも4時間足の方が成果が良かったです。
1時間足のバックテストデータ
4時間足のバックテストデータ
一番成果良いバックテストの設定
4時間足
過去17足
係数 1.9
取引回数151
プロフィットファクタ 1.54
になります。
Advance_EA 改め シグナル名人FX のバックテストの結果
FXのEAのレビューです。
Advance_EA 改め シグナル名人FXとは。
バイナリーオプションのEAで有名なシグナル名人がありそのlineのサポートアカウントで案内していたので何となくバックテスト検証してみました。
※おすすめしている訳では御座いません。ご自身でバックテストなりして見極めて頂ければと。
本記事はその見極めの参考になればなーと。
EAの名称
Advance_EA 改め シグナル名人FX のレビューです。
シグナル名人FXの概要
★注意:バックテスト及び数日間フォワードテストになるので正確な内容ではないかもしれませんのでご了承下さいませ。
バックテストの成績
どこかで破綻(全損)します。
プロフィットファクタは1を切ります。
バックテスト期間及び条件
通貨ペア : USDJPY
時間 M1(1分足)
ヒストリカルデータ Dukascopy
期間 2014/1/1 - 2018/12/30 5年程
EAの設定: 初期設定のまま
バックテストの感想
最終的に破綻してロスカットしているので注意が必要。
まぁどんなEAでもそうなんですがねw ナンピン系は使い方間違うとすぐ死ねる。
個人的に利用はしないと思います。
もし使用するのであれば条件を変えてバックテストを行った上で考える。
また故意に特定の期間のエントリーが外されていないかなど確認もした方が良いです。
破綻しない運用としては
- 経済指標発表の1-2日前後はEAを止める。
- 月末、月初、金曜日、月曜日などはEAを止める。
これを行うだけで破綻リスクは下がると考えています。
EAの良い面
資産が5年でピーク時は4.5倍程度にはなっています。
結果を見る限り固定ロット様な感じになっているのでちゃんと運用してやれば10倍以上の結果になるかなーと。
負けない戦略
勝ち逃げ戦略(私が勝手に付けているだけなので気にしない下さい)
いつか破綻するのは仕方ないので破綻した損失分以上の利益で逃げ切るといった感じ。
具体的には資金が1.2倍になった時点で一旦利益分を抜く、場合によっては毎月利益分を抜く。そしていつか破綻する。これを繰り返す感じかな。
破綻した金額分よりも利益を確保出来れば逃げ切れる。
ここの破綻リスクの対応をどうするのか。
勝ち逃げ戦略の注意点
バックテストのグラフを見ている限り時々破綻しかけている時期があるので勝ち逃げ戦略は通用しないかもしれない。
というか何となくですが本記事書いてて思いましたが直観的に勝ち逃げ戦略難しいかもしれないw
利用したい人はバックテスト及び破綻のリスクを考えた上で検討して下さいませ。
破綻しない戦略及びリスクの少ない期間のみの運用であればワンチャンあり。
その他 これってどうなの?
EAを提供しているシグナル名人サポートからバックテストのキャプチャーが送られてきました。
yahoo idは "houkoku5018" かな。
期間:2018/10/1 - 2018/11/30 の二カ月間だけの結果
モデリング品質 50%
バックテストの期間短すぎるし、直近のデータではない。
別に長期のバックテストのデータを公開するのが義務でも何でもないですがせめて数年間程度は提供して欲しいなーって。
私がひねくれているのか上記以外の期間ではダメなんじゃないかなーって勝手に想像してしまうんですよねw何か隠してるんじゃって疑ってしまうw
モデリング品質も99.9%にしろってわけではないのですがせめて90%程度のを見せてもらえればなーって。
バイナリーオプション(ハイローオーストラリア)の時間フィルターの重要性
半分個人メモ
バイナリーオプションの時間フィルターの重要性
たにあきら(谷あきら)氏のTMシグナルインジゲーターを利用してバイナリーオプションのフォワードテストをしており時間フィルターの重要性を改めて実感したので、そのメモ。
※本記事は谷あきら氏のTMシグナルインジゲータを推奨している訳では御座いません。世の中には様々なバイナリーオプション様のシグナルインジゲータがあり、それぞれの特徴があるかと思いますので一概に本ブログ記事に当てはまるとは考えていませんが参考にはなるかと思います。
前提条件など
現在ハイローオーストラリアにてフォワードテストをしております。
フィルターやエントリー条件はなくアラートが出る16通貨全てでエントリーしております。
フォワードテスト中はフィルターなどを設定せずに全てのアラートでエントリーして結果を取得しています。
個人的にといいますかフォワードテストはフィルターを設定せずにどんな結果であってもデータを取得するのがベターと考えます。
テストだしねー
全てエントリーした場合
エントリー金額は1234円
勝率 53.03%
win 105
lose 93
利益 -740円
はい。マイナスです。
時間帯別エントリー状況は以下になります。
フィルターを採用してエントリーした場合
この状況に私なりのフィルターを設定すると
勝率 71.60%
win 58
lose 23
利益 34,601円
はい。プラスになります。
勝率も70%を超えてきます。
フィルターをきちんと設定してやるって事はエントリーを絞る事にもつながるので、エントリー回数は少なくなります。
フィルターってどうやって決めればいいの?
絶対的なフィルターってのはないかと思います。自身でバックテストなりしてここの時間帯は勝率が悪いなどのデータを元に設定するのが一番です。
で設定したら自身でなぜそこはフィルターとして採用したのか他人に説明出来るような根拠を上げれると良いかと考えます。
根拠も正解はないので自分なりの説明で良いかと。
例えば23時台は経済指標発表が多く通常と違う動きがあるので23時台はエントリーしない。など。
私なりのフィルター例として
フィルター1
今回私なりのフィルターとして各市場オープン2時間前後は注意をした方が良いかと考えます。
9-10時、16-17時、21-22時など。
利用しているインジゲーター及びエントリーロジックにより傾向は変わりますが、各市場オープン直後トレンドが発生しやすいので逆張りが効きにくく逆張りエントリーロジックの場合勝率が低くなりやすいと考えます。
フィルター2
深夜3-4時台
出来高が低く逆張りが効きにくい時間帯。引き分け及び僅差で負ける事もあり。
またバックテスト及びフォワードテスト共に勝率も高くないのでエントリーしない。
まとめ
フィルターはエントリー方法(順張り、逆張り)により変わり、絶対的なフィルターはないので自分なりに他人に説明出来るフィルターを考える。
フィルターを細かく設定する場合はHigh側、Low側の心理的な特徴も考えて時間帯を設定すると良いかもしれません。
また上記キャプチャーには載せていませんがエントリーした分足も検討するとさらに勝率が高くなるかもしれません。
私の場合ですがある特定の分足はフィルター設定をしてエントリーしないようにしていたりします。
TMシグナルインジゲータは、一か月程フォワードテストして様子をみてみると決めており、その後自分なりのフィルターを設定するなどして実弾で運用してみようと考えています。
ドテン君 FXの成果レポート 只今爆益中。
自分用メモ
トレンド発生中のドテン君
トレンド発生すると強いドテン君。
トレンドフォローの良い面が表れてます。
USDJPYを含め複数の通貨でトレンドが発生しているので利益が爆益中です。
現在はフォワードテスト中のままでまだ実弾していないのですが、自動売買と裁量を組み合わせて運用を開始しているので一旦ここで利確。
直近のレンジ幅の二倍に近かったので一旦利益確定。
バイナリーオプション(ハイローオーストラリア)の11連敗!!
うーん。久々にやらかしたかもですw
バイナリーオプション(ハイローオーストラリア)の11連敗をしました。
自動売買といいますかアラートエントリー系のつらい所かな。
裁量で11連敗とかしたらメンタルぶっ壊れますw こんなん無理ゲーやん!!って。
自動売買だから耐えれますねーって裁量であれば11連敗しないかw
良くも悪くも確率なので11連敗はありえます。数年のバックテストも17連敗がありました。
全ての取引をデータベースで管理しているので該当箇所のキャプチャー
何でこんな事になるのか?
MT4のアラートが連続で出てるからそれに従順に従ってエントリーしてるから。
こんな感じでアラートが出るとつらいです。
連続エントリーしなけりゃいいじゃん。
んじゃ連続でアラートが出た時は自動売買止めればいんじゃないの?って問題もありますが、連続エントリーを禁止したバックテストも行ってみましたがさほど勝率変わらないんですよねー
連続エントリーも1勝4敗の時もあれば、2勝1敗が何度かあったりして連続エントリーが一概にダメとは言い切れない。
明らかに連続エントリーの勝率が低いなどすれば止めて一回エントリーで止めてしまうのですが。
どうすればいいのか?
今回の敗因は時間フィルターを設定していなかったのが大きいです。
現在はとあるインジゲータのテスト中って事もあり時間フィルターを設定していません。
フォワードテストでも確認していますがLow側の9時、10時の勝率は低いです。high側は9時のみ低い。それ以外の時間も勝率低い時間帯もあるのでフィルター設定してやる事で11連続負けってのは少なくなるかなーと。
9時10時のlowは日本市場オープンでlowよりもhighになる傾向が強い+月の始めも影響しているのかと考えます。
今後の対策
- 時間フィルターの設定。バックテスト及びフォワードテストで確認して時間フィルターを導入
- 月末、月初のエントリーは避ける。
- 重要指標発表の前後はいつもと違う動きをするので、その期間はエントリーしない。
基本的な対策ですねー
本日の連敗キャプチャー w
見事な連敗負けっぷり!!
TwitterのAPIアカウント発行が面倒(手間が掛かる様)になってる。
もし良い解決方法をご存知の方いれば連絡欲しいなーといった感じのブログ記事です。
現在バイナリーオプション自動売買結果の自動投稿botを作成しようかと考えています。
特に何かに活用していこうとかまでは考えていませんが、ハイローオーストラリアの自動売買の結果をリアルタイムで公開して何かしらにつなげていればいいなーといった緩い感じの考え。
投稿の日時及び通貨ペア、high or lowなどのエントリー履歴をTwitterを通じて公開。
ついでにエントリー終了時のスクリーンショットも投稿するなどすれば楽しそうと考えています。
TwitterのAPI発行が変わった?
うろ覚えなのですが数年前まではTwitterのアカウントを作成してAPI発行の管理画面で簡単に発行出来た記憶がありました。
現在(2019年7月30日)は電話番号の登録、利用目的、データ取得有無、Twitter以外のデータなんちゃらなどを説明しないと発行出来ない様な感じ。
一つ一つの項目に対して英語で200文字以上の説明が必須。
正直最初何か間違えたかな?と考えて管理画面のTopまで戻ってしまいましたw
色々調べてみると2018年頃にAPIの発行方法が変わった様です。
Twitterの審査期間はどれぐらい?
現在申請してから2日程たっていますが未だにOKもNGも連絡来ず。
他の方は1-2日程で連絡が来る様なのですがね。。。NGならNGで連絡欲しいです。
2019年7月30日のバイナリーオプション結果
こんな感じのキャプチャーと結果などをTwitterで投稿しようかと考えています。
キャプチャーなど含め全て自動売買のプログラムで取得しています。
本日は全勝!!
やほほーい。
ruby seleniumのThread処理のエラー処理方法
自分用メモ
先日紹介したseleniumのThread処理のエラー処理方法。
"ruby seleniumで複数のブラウザで並行処理を行う方法 バイナリーオプションで同時に複数の通貨ペアエントリー"
abitra.hatenablog.com
バイナリーオプションのハイローオーストラリアのサイトは時々思い通りには動かないので注意が必要。
プログラム的には細かくパーツ毎にプログラムを分けて、その分けたパーツ毎にエラー処理をいれるといった方法がいいのかなーと考えています。
Threadのエラー処理は少し注意が必要
初っ端から言い訳ですw
私はガチプログラマーでは御座いませんので今回の方法は最適ではないかもしれませんのでご了承下さいませ。
私はバイナリーオプション(ハイローオーストラリア)のエントリーはThreadを立ち上げて動かしています。
理由は同じ時間足で同時に複数通貨ペアのエントリーがあるので、その対応にって感じです。
バイナリーオプションの自動売買はseleniumで運用しています。
でseleniumは時々止まる。。。エラーを起こす。。。
この原因はよく分かりませんがw
対応としてはエラーを起こした場合は再度ブラウザを読み込みを行う。又はエントリー機会を逃したとしてエントリーを諦める。
特にバイナリーオプション及びFXの場合はエントリータイミングを逃すと同じ機会は訪れないのでエラー処理の対応次第でエントリー回数が変わってきます。
例えば "USDJPYでエントリー条件が110円以上で10分後締め" のエントリー条件とした場合。
エラーなどでブラウザが止まったりしても9分間の時間的な余裕があります。
その間にエラー処理して再度ブラウザの更新などすればOK。
9分間のうちに110円以上になればエントリーはいつでもいいのでねー
エラー処理でエントリー出来ない例としてはハイローオーストラリアのターボ取引とかは対応は難しいかもしれないので注意が必要。
エラー処理するとどんなに早くても1-2秒は余計に時間が掛かります。
その間に有利な条件になればいいのですがターボの場合は判断が難しい。
エラー処理 例 beginとretry
基本的にエラーを起こした場合
私はbeginとretryでエラーを処理しています。
※以下コードは全てloop処理で動かしていると考えて下さいませ。
こんな感じ。
def hogehoge begin #ここに処理をいれる rescue #エラーの処理 #エラーが起きた時 retry end #beginのend end
こんな感じでbeginでエントリー処理囲ってしまってretryで処理していました。
Threadの問題点
Threadで立ち上げて処理はjoinしてあげないとThreadでエラーを起こしても無視されてしまいます。
動かし始めはこの処理を知らなかったのでThreadの立ち上げを諦めようかと考えました。
エラー処理しようにもエラーが返ってこないのでretryが出来ない。。。
def hogehoge begin aiueo =[["aaaa","bbbb"],["cccc", "dddd"]] aiueo.count.times do |n| t = Thread.new do aaa = aiueo[n][1] p aaa end #thread end t.join # ←ここのjoinが重要 end #count end rescue #このメソッドエラーの処理 retry end #beginのend end
このt.join がないとThreadでエラーを起こしても何もなかった事にされますw
Thread内でbeginのretryをしたらどうなるの?
ではThreadないでbeginとretryをしたらどうなるのか?
def hogehoge begin aiueo =[["aaaa","bbbb"],["cccc", "dddd"]] aiueo.count.times do |n| t = Thread.new do begin aaa = aiueo[n][1] rescue retry end end #thread end t.join # ←ここのjoinはいらない end #count end rescue #このメソッドエラーの処理 retry end #beginのend end
問題なくretryが動きます。この場合はjoinは不要でThreadが立ち上がっている限り動きます。
ですが個人的には一応joinを入れてエラー処理を二重にしています。
これらの方法がベストかどうなのかは分かりませんが、今の所良い感じ。
気を付ける点としてはスクレイピング時のretryの回数制限。個人的にですが3回以上のretryは止めています。
理由は特にありませんが常にハイローオーストラリアのサイトでretryし続けるはさすがにアレな気がします。
またエラー処理して即retryするのも何となく嫌な気がするのでsleep処理などで1-2秒程時間を開けています。
この辺りは個人的な考えなので気にしなくても良いかもですが、無茶はしない方がいいよって気がします。
焦ってエントリーするよりもエントリー機会はまた訪れると考えてエラー処理からのretryは程ほどに。