ミーでございます。
今回は相場分析に良く使われている有名な「ZigZag」を使用したサインツールを作っていきます!
ZigZagの頂点は必ず折り返しますので、それ通りのエントリーできたら・・・凄い高勝率なサインツールになりますよね(笑)って、それは事実なのですが、そんな簡単に高勝率のサインツールは作成できません。
ZigZagは、”騙しが非常に多い”ため、あくまで目安として使いましょう!
サインツールの作成が初めてという方は、以下の記事を読んでから見ていただけると更に分かり易いです。
ZigZagとは
「ZigZag」はインジケーターの中にある「テクニカルツール」の一つで、レート(価格)の高値・安値を分かりやすくシンプルに表示しているインジケーターです。
高値・安値を線で引いてくれますので、相場が上昇傾向なのか、下降傾向なのか分析するのに役立ちます。多くのトレーダーの方が使用しているインジケーターですね。
私が作成しているインジケーターやサインツールでも、内部的に「ZigZag」を使用しているものが多いです。上手に活用すれば、レンジ相場の判断や、安値更新、高値更新時の順張りなどにも活用できると思いますし、ダウ理論と相性が良いと思います。
ZigZagはサインツールに不向き!?
ZigZagは、その名の通り高値・安値をジグザグに線を引いてくれるインジケーターです。過去のチャートと見ると、ZigZagの頂点でエントリーした場合、かなり高勝率(80%程度)で勝てていますよね(笑)
それもそのはずで、ZigZagの頂点は、高値から下降方向へ、安値から上昇方向へ折り返した位置(折り返し候補を含む)で構成されていますので、もし仮にZigZagの頂点を予測することができて、その頂点でエントリーできたら単発勝率80%以上いけます。
そんな、ZigZagですが、ZigZagを使用したサインツールは嫌われる傾向にあります。その理由はズバリ、
頂点が確定するまで、リペイントが発生する
ということです。
良くサインツールでリペイントするものがありますが、リペイントは変動するものを条件にした場合に発生します。つまり、Zigzagは頂点が確定するまでに何度も頂点が変わりますので、リペイントが発生します。
サインツールを作成している多くの方が、このZigZagを利用して、反発箇所を導き出そう・・・とチャレンジされたことだと思いますが、最終的にはリペイントの壁を超えることはできません。
過去チャートは確定している「ZigZag」の頂点でサインが出ていますので、そりゃ勝ててるように見えますが、実際には勝っている箇所の多くが残って表示されているだけです。
とは言っても、「ZigZag」の頂点エントリーは魅力的で夢がありますよね。そのため、今回は皆様に、ZigZagを使用したサインツールをご紹介しようと思いました!
ZigZagの頂点でサインを出そう!
ZigZagを使用したサインツールを実際に作っていきましょう。
ZigZagのインジケーターの値を取得する一番簡単な方法は、iCustomと呼ばれる関数を使用して、ZigZagを使用することです。
#property indicator_chart_window #property indicator_buffers 2 extern int InpDepth = 12; extern int InpDeviation = 5; extern int InpBackstep = 3; double DrawReverseLowBuffer[]; double DrawReverseHighBuffer[]; int init() { SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,1,clrMagenta); SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,1,clrRed); SetIndexArrow(0,234); SetIndexArrow(1,233); SetIndexBuffer(0,DrawReverseLowBuffer); SetIndexBuffer(1,DrawReverseHighBuffer); return(INIT_SUCCEEDED); } int start() { int counted_bars=IndicatorCounted(); int limit = Bars - counted_bars; double dResultZHigh,dResultZLow; for (int i=limit-1;i>=0;i--){ dResultZHigh = iCustom(Symbol(), 0, "ZigZag", InpDepth, InpDeviation, InpBackstep, 1, i); if(dResultZHigh != 0.0){ DrawReverseLowBuffer[i]=High[i]; } dResultZLow = iCustom(Symbol(), 0, "ZigZag", InpDepth, InpDeviation, InpBackstep, 2, i); if(dResultZLow != 0.0){ DrawReverseHighBuffer[i]=Low[i]; } } return(0); }
上記を実行すると、ZigZagの頂点でサインが表示されますよね!
dResultZHigh = iCustom(Symbol(), 0, "ZigZag", InpDepth, InpDeviation, InpBackstep, 1, i); if(dResultZHigh != 0.0){ DrawReverseLowBuffer[i]=High[i]; } dResultZLow = iCustom(Symbol(), 0, "ZigZag", InpDepth, InpDeviation, InpBackstep, 2, i); if(dResultZLow != 0.0){ DrawReverseHighBuffer[i]=Low[i]; }
上記が今回のポイントとなります。
iCustomを使用して、ZigZagを呼び出しています。ZigZagのパラメータは3つ(InpDepth、InpDeviation、InpBackstep)です。その後の「1」と「2」は高値、安値のどちらを取得するのかを指定しています。最後のiは、取得する基準のローソク足ですね。
過去チャートを見てください!ほぼ勝っていませんか?凄いですよね。これがリペイントするサインツールの勝率(破壊力)となります(笑)
もっと勝率を上げる方法
もう少し、勝率を上げる方法としては、折り返しする頂点が、折り返しと逆(高値なら陰線、安値なら陽線)になっている箇所の方が、その方向に勢いが生じてくる可能性がありますので、勝率は高くなりますよね。
折り返し部分に、陰線・陽線を加味したサインツールは、以下となります。
#property indicator_chart_window #property indicator_buffers 2 extern int InpDepth = 12; extern int InpDeviation = 5; extern int InpBackstep = 3; double DrawReverseLowBuffer[]; double DrawReverseHighBuffer[]; int init() { SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,1,clrMagenta); SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,1,clrRed); SetIndexArrow(0,234); SetIndexArrow(1,233); SetIndexBuffer(0,DrawReverseLowBuffer); SetIndexBuffer(1,DrawReverseHighBuffer); return(INIT_SUCCEEDED); } int start() { int counted_bars=IndicatorCounted(); int limit = Bars - counted_bars; double dResultZHigh,dResultZLow; for (int i=limit-1;i>=0;i--){ dResultZHigh = iCustom(Symbol(), 0, "ZigZag", InpDepth, InpDeviation, InpBackstep, 1, i); if(dResultZHigh != 0.0 && !isSunshineLine(i)){ DrawReverseLowBuffer[i]=High[i]; } dResultZLow = iCustom(Symbol(), 0, "ZigZag", InpDepth, InpDeviation, InpBackstep, 2, i); if(dResultZLow != 0.0 && isSunshineLine(i)){ DrawReverseHighBuffer[i]=Low[i]; } } return(0); } bool isSunshineLine(int index){ if(Close[index] > Open[index]){ return(true); } return(false); }
以下のようなサインが表示されていると思います。画像の4か所だけ見ると勝率100%です。
dResultZHigh = iCustom(Symbol(), 0, "ZigZag", InpDepth, InpDeviation, InpBackstep, 1, i); if(dResultZHigh != 0.0 && !isSunshineLine(i)){ DrawReverseLowBuffer[i]=High[i]; } dResultZLow = iCustom(Symbol(), 0, "ZigZag", InpDepth, InpDeviation, InpBackstep, 2, i); if(dResultZLow != 0.0 && isSunshineLine(i)){ DrawReverseHighBuffer[i]=Low[i]; }
上記がポイントとなる部分です。以前、ご紹介した陽線・陰線を判断するロジックを組み込んでいます。
今回ご紹介したサインツールは、Zigzagを利用したサインツールです。ぜひ、色々と改良して、もっと高勝率のサインツールを開発してみてはいかがでしょうか?
コメントを残す