FX Worksの手法に区切りがついたので、今度はFXトレード勝利の羅針盤に記載されていた優位性について検証していきます。
週末深夜3時からは逆張りにエッジがあることも知られていよう。
週末に重要経済指標でかなり動意づいて価格の勢いが昂進して ロンドンフィックスでおさまらず沈静化しない場合でも、 週末のポジション調整や利益確定および手仕舞いに絡み、 深夜3時頃からは逆張りが有効になることも多いものじゃ…。
たしかに週末の夜から逆方向に動く現象を目にしたことがあります。
実際に良くある事象であれば、トレードに組み込めるかもしれませんし、高い優位性があるならEAとして稼動させることも可能でしょう! というわけで、「週末深夜逆張り手法」のプログラムを作ります。
週末の深夜3時に逆張り(カウンター)
レッツ!プログラミング!
金曜日のUTC18時以降に仕掛け、金曜日の23時59分(サーバ時間)に手仕舞いします。
if(DayOfWeek()==5 && (Hour() == 23 && Minute() == 59){
DayOfWeek()で週が取れます。0が日曜日、1が月曜日・・・5が金曜日です。 Hour()で現在の時、Minute()で現在の分を取得してきます。
if(DayOfWeek() == 5 && Hour >= 21)
サーバ時刻はUTC+3(冬時間)なので、21時以降とします。
※夏時間はUTC+2ですが・・・今回はサマータイムを考慮していません。 そして、カウンターロジックですので週足を見て上昇しているか、下降しているかを確認し逆方向に発注します。
open = iOpen(NULL, PERIOD_W1, 0);
close = iClose(NULL, PERIOD_W1, 0);
if(open>close){ OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,””,Magic,0,Blue);
} else if(close > open) {
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,””,Magic,0,Red);
}
iOpenやiCloseにPERIOD_W1を指定すれば週足で取れます。
週足の始値と終値を比較して始値が高ければ陰線ですので買い、終値が高ければ陽線ですので売りを入れます。 まとめるとこのような形
int ticket = 0;
if(DayOfWeek() == 5 && Hour() == 23 && Minute() == 59){
if(OrdersTotal()>0) CloseOrder(); }
else if(OrdersTotal()==0){
if(DayOfWeek() == 5 && Hour()>=21){
double open = iOpen(NULL, PERIOD_W1, 0);
double close = iClose(NULL, PERIOD_W1, 0);
if(close > open)
ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,””,Magic,0,Blue);
else
if(open > close)
ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,””,Magic,0,Red);
} }
※動作させるためには変数宣言や関数OrderClose()が必要です。OrderClose()関数は一般的なクローズ処理でOKです。
問題発生
FXDDからダウンロードした1分足を使おうと思っていたのですが、23時59分に終わったり22時だったり、21時だったり・・・とマチマチになっていました・・・。
そこで今は亡き(?)Alpariのデータを使います。
2011年6月7日から2015年1月16日のデータしかありませんがFXDDのデータよりは正確そう・・・と思って動かしましたが・・・22時59分で終わる日が幾つもありました。(データの問題なのか、そういうものなのか・・・?金曜の市場クローズまで見ていたことがないので分かりません。)
「この日は22時59分で終了」といった情報が分かればいいのですが、取得できそうにないので「毎週22時59分で終了」としました。(23時以降は捨てます・・・)
さらに2012年3月16日と3月23日は21時59分で終わっていました。
理由はわかりませんが、これらは除外します。 ・・・マズイです。検証始める前からグダグダになってきました!!
バックテスト実行
これは綺麗に売りが決まったところ・・・ ・・・って右端!!Σ(゜○゜;)
最後の1時間(というか5分足なので5分)で急激に動いたりするみたいです;;
このチャート見た瞬間「僕は何をやってきたんだろうか」と打ち砕かれた気分でした(苦笑)
・・・気を取り直してバックテスト結果です・・・(´・ω・`)ショボーン
通貨ペアはユーロドル、データはAlpariの全データ(2011年6月7日~2015年1月16日)です。
ダメデスネー・・・ もうボツネタでいいんじゃないか?と思いましたが、せっかく調査してきたのでもう少し頑張ってみます。
大きな値動きのみカウンターする
単純に始値と終値を比較する方法だと、小さい陽線も、巨大な陽線も同じ「陽線」と判断してしまいます。
そこで1週間の値動きが価格の1%以上の場合のみカウンターするようにしてみます。
double diff = MathAbs(open – close);
double size = Ask * 0.01; if(diff > size)
こんな感じでしょうか。 陰線も陽線も同じように「大きさ」を判断するためMathAbsで絶対値を取得しています。
ダメデスネー・・・ ・・・うん?これ逆にしてみましょうか。カウンターではなく順張り方向に・・・
そこそこ勝てるっぽいです(笑) ここでまさかの逆転展開!
開始時刻と終了時刻の最適化
開始時刻を最適化してみたところ、サーバ時間で18時。UTCで15時が最良のタイミングとなりました。
いわゆるロンドンフィックスですね!(他の時間でもプラスになります。トレンドに乗れる・・ということでしょう)
終了は23時のままでOKでした。23時59分まで引っ張ると最後にカウンターの動きが発生することがあるのでその前に撤退する方が無難だと思います。(当初はその動きを確認するはずだったのでは・・・(苦笑))
ローソク足の幅は1%でOKです。(0.4%から1.0%まで0.2%刻みでバックテストしてみたところ、1.0が良かったです。これ以上広くするとトレード回数がどんどん少なくなっていきます)
PFは3.68、勝率は7割近く。ショートの勝率は9割近くなりました。(ロングは5割程度です) 取引回数がたったの52回ですから、それほど有意なデータではないかも知れませんが・・・
ちなみに、週足ではなく日足(当日の動き)を使った場合もトレンドフォロー(順張り)する方が勝てました。
最後の1時間にカウンター
週の最後に逆方向に強く動く現象が見られたので、試しに23時00分に仕掛け&23時59分手仕舞いのロジックでやってみます。
たったの7回しかないのですが、やはり最後の1時間は(順張りでは)危ないようです。
ローソク足の幅は価格の1%で実施しました。もっと狭い幅で実施するとカウンター有利にはなりません(やや不利) 「その週で大きく動いた場合、カウンターに警戒するべき」というところでしょうか。
結論
週末のポジション整理、手仕舞いを利用してカウンターを仕掛けても勝つのは難しそうです。 (大きく動いた後、逆方向に動くことはあります)
状況にもよりますが概ねトレンドフォロー(順張り)の方が勝ちやすいように思います。 ※トレード回数が少ないため、この優位性が使えるかどうかには疑問が残ります。 カウンターに関しては明確な優位性は見つけられなかったということを、今回の収穫とします。
※正直ボツにしようかと思ったのですが、何かの役に立つかも知れないと思い直して投稿しました…
コメント