ZigZagインジケーターを使ったトレード戦略(ブレイクアウト)を徹底検証
今日はZigZagというインジケーターを使って検証してみたいと思います。
ZigZagインジケーターとは?
何をするために開発したのかは知りませんが、たぶん直近の高値と安値を知ることとトレンドを見るために作ったのではないかと勝手に推測しています。
赤いラインがZigZagインジケーターです。
パッと見で左は下降トレンド、それから上昇に転じているように見えます。
何度か止まっているところがあれば「サポート」「レジスタンス」として機能していると見ても良いでしょう。
他のブログ等では「エリオット波動」を見るのに使っている人もいるようです。(僕はエリオット波動使っていないので検証したことがありませんし、今後もしませんw)
ダウ理論によるトレンド判断(高値も安値も切り上げていれば上昇トレンド、両方下げていれば下降トレンド)にも使えそうです。
ZigZagインジケーターを利用した戦略
今回は以下の条件でトレードします。
- 1つ前の頂点に逆指値を置きます(高値の頂点は買い、安値の頂点は売り)
- 頂点が更新されたら逆指値を置き直します
- 損切り・利食いは固定pips(必ず損小利大とする)
以上です。直近高値/安値ブレイクで仕掛けます。
簡単すぎて「こんなので勝てるのか?」と疑われそうですが、勝てるから記事にしてるんですね!(笑)
それではEAを作ってバックテストしてみましょう。
MT4標準以外のインジケーターを呼び出す場合にはiCustom関数を使います。
zigzag=iCustom(Symbol(),0,”ZigZag”,depth,deviation,backstep,0,1);
太字の部分がインジケーターのパラメーターで、全てのパラメータを指定する必要があります。(ZigZagの場合は3つ)
その後ろの0はバッファの番号。zigzag以外にインジケーターが無ければ0です。その後ろの数字がShift。最新のバーから何番目かを指定します。
ZigZagの場合、頂点以外は0が返る(頂点のみ値を返す)という仕様ですので、forでループして頂点を取得すると良いでしょう。
for (i=1; i<bars; i++) {
zigzag=iCustom(Symbol(),0,”ZigZag”,depth,deviation,backstep,0,i);
if (zigzag!=0) return(zigzag);
}
※barsにはiBars関数で取得したバーの数を入れています。
上記コードでは直近の頂点を返していますが、今回の戦略では直近ではなくその1つ前になります。
○のついた頂点を上抜いたら仕掛けます。直近の頂点(×)は上図の時点では使いません。
バックテスト
それではバックテストしてみます。通貨ペアはユーロドル、1時間足です。
バックテスト期間は2010年1月から2015年4月24日、損切りは4pips、利食いは20pipsとしました。(ロットは0.1固定)
しっかり右肩上がり。PFは1.6です。
勝率は25%と低いですが、4回に1回しか勝てなくても利益が残るシステムになっているので問題ありません。
トレンドフォローシステムですので、大きなトレンドを見てトレンド方向に仕掛ければ勝率はもっと上がると思います。
利食いも固定ではなくできるだけ伸ばすように改修してみたいですね。
今回はEAを作成していますが逆指値を置くだけなので、裁量でもこの戦略は使えると思います。
ZigZagブレイクアウトシステムのポイント
「直近高値・安値ブレイクアウトのトレンドフォローで、かつ損小利大にするだけでも勝てる」ということになるかと思います。
以前から何度も書いていますが、順張りが王道。損小利大が王道。です。
- 順張り
- 損切り
- 損小利大
誰もが言ってる当たり前のことができるだけで良いんです。
もちろん、逆張りでも勝てる戦略を使っていれば勝てます。(僕はトレンドレスな状況で逆張りするシステムを愛用しています。これは勝てる戦略があってのことですし、順張りの方が基本的に勝ちやすいので初心者や勝てない人は順張りを狙ったほうがいいです。)
※偉そうなこと書いていますが、ほとんど師匠の受け売りです(笑)
ZigZagブレイクアウトシステムの改良
人によると思いますが、僕はPF1.6では使いたいと思いません。(2.0以上は欲しい!)
改良1 執行時間軸の変更
勝率を上げるためにフィルタを加えていきますが、そうするとトレード回数が減ってしまい、検証に十分なトレード回数にならない可能性がありますので最初に時間軸を変更することにしました。
ダマシが多くなり、PFも悪化すると思いますが最終的には1時間足の時よりも良い結果になるよう調整したいと思いますっ。
15分足に変更、20pipsで利食い、1.5pipsで損切りとしました。
PFは1.37、勝率は9.30%と大幅に悪化しましたがトレード回数は3805回あります。
改良1 トレード時間制限
「勝ちやすい時間帯」のみトレードするよう、制限します。
最適化を実行し、総損益が一番良かったGMT2時~20時を採用しました(日本時間11時~朝5時)
なお、PFは1.48で勝率は10%程度です。
改良2 Volumesインジケーター追加
ブレイクの際、相場に勢いがあるかどうかチェックします。
最初、ADXを使ってみたのですがイマイチの結果になり・・・試しにVolumesを使ったところ、良い結果がでたのでこのインジケーターを採用することにしました。
4時間足で2600を超えている場合にのみ仕掛けます。
※1時間足や15分足でも検証しましたが、4時間足が一番良い結果になりました。
4時間足>1時間足>>>>>15分足 という感じ
これでPFは1.70まで上がりました。
改良3 ブレイクイーブン/トレーリングストップ
ある程度利益が出たところでブレイクイーブンにします(+0.1pipsでStopLoss)
また、トレーリングストップを追加。トレーリングストップで利食いします。(固定の利食いは80pipsにしました)
PF2.74まで上げられました。
ようやく使えるレベルに仕上がったかなと・・・。
ブレイクイーブンを1.5pipsにして、損切り分を稼いでも良いと思います。
(利益は多少悪化しますが、ずるずる資金が削られていく状況も多々発生するはずなので、損切り分くらい稼ぐと気分的に楽になるかなと・・・)
※「もっと勝率を上げられないか」と、EMAやRSI、CCI、ZigZagによるトレンド判断などを試してみましたが、いずれも上手くいきませんでした・・・。
なお、利食い幅を広げ、損切り幅を狭くするとPFは上がる傾向に。ただ、勝率が大幅に減少していき最終的には1000回以上のトレードで十数回の勝ちトレード(勝率1%ちょっと)となり・・・実用に疑問を抱いて不採用としました。
多通貨ペア対応
この手のトレンドフォローシステムは通貨ペアを選ばず使えます。
ポンドドル、豪ドル米ドル、ドル円なども試してみたところPF1.6~1.8程度となりました。
(ユーロドルが最も長くトレンドが続く傾向にあるので、ユーロドルが一番良い結果になりやすい・・・と僕は思っています。)
恐らくクロス円やその他の通貨ペアでも使えると思います。
裁量トレードの場合は監視通貨ペアや執行時間軸が増えると大変になってくるので、優位性の高いものに絞って監視することになるかと思いますが、EAの場合は大量に起動してナンボですから、多通貨ペア・多時間軸で起動した方が安定すると思います。
まとめ
- ZigZagインジケーターを使った高値・安値ブレイクに優位性あり
- 損小利大
- 執行時間帯も重要
トレンドの方向を見定めて仕掛けてもいいです。(EMAを使って判断させてみたところ、効果がありました。トレード数が半分くらいに減ったので今回は採用を見送りましたが、利用価値はあると思います。)
また、その他、サポレジ(MA、ボリンジャーバンド、ダブルゼロ等の切りの良い価格、トレンドライン 等々)を意識しても勝率は上げられると思います。(アイデア次第でまだまだ良くなるはず・・・です)
今回はブレイクで仕掛けましたがブレイク後、戻りを待ってから仕掛けるという手法も良いのではないか?と思っています。
これについては後日、検証するかもしれません。
ZigzagBreakOutEA販売開始のお知らせ
MetaTrader4で動作する自動売買ソフト(EA)の販売を開始しました。
販売の予定は無かったのですが、とても多くの方から要望されましたので…リアル口座での検証を行い、バックテストと同じような動作をすることが確認できたので販売することにいたしました。
ご興味ありましたら、下記の記事をご覧ください。
こんにちは。
裁量トレードの際にZigZagインジケータを使用してトレードしているので興味を持ちました。利用目的はダウ理論の確認、高値安値を視覚的にわかりやすくするためです。Zigzagの高値、安値ブレイクの優位性もEAで検証するとわかりやすいですね。ブレイク間際は荒い値動きも多いので損切り幅が4pips程度で機能するのは驚きです。
ブレイクアウト後の戻りの検証については戻りの見極めをどうやって定義するのか悩みどころではないでしょうか。次回の検証も楽しみにしています。