ミーでございます。
今回は相場分析に良く使われている有名な「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を利用したサインツールです。ぜひ、色々と改良して、もっと高勝率のサインツールを開発してみてはいかがでしょうか?










コメントを残す