アイカスタムジグザグ

 
icustomコマンドでジグザグインジケータの方向を決定しようとしています。

今のところ、こんな感じです。

ZigZagHigh=iCustom(NULL,0, "ZigZag",MODE_HIGH,0);
ZigZagLow=iCustom(NULL,0, "ZigZag",MODE_LOW,0);

チャートに線が引かれていますが、プログラムを実行するとZigZagHighとZigZagLowが共に0になってしまいます。




icustom関数でZigZagインジケータのトレンドを判断するにはどうしたらよいでしょうか?


ありがとうございます。
 
あなたが何をしようとしているにせよ、これはおそらく、それを得るための方法ではないでしょう。
Custiom indicators, experts and strategy testing' を見てください -- iCustomを使う方法を説明しました...

インジケータを変更して、データを取得するために2つのバッファを追加する必要があると思います。
低値は例えばLOWbuff[]です。
高値はHIGHbuff[]です。

もし、新しい高値(インジケータ内)があれば、今保存されている値と異なるかどうかをチェックします。
例えば、1.2815 ZigZag maxです。
バー1
バー2
バー3
...
barxの新しい値は、1.2755となります。

HIGHBUFF[1.2815,1.2815,...,1.2815,1.2755,1.2755... .] のような値になるはずです。

そして、Icustom(NULL,0, "ZigZag",3,0); を使えば、ほら!あなたの数字が出来上がりました。

というわけで、こんな感じです。

ゾレロ
 
zolero:
あなたが何をしようとしているにせよ、これはおそらく、それを得るための方法ではないでしょう。
Custiom indicators, experts and strategy testing' を見てください -- iCustomを使う方法を説明しました...

インジケータを変更して、データを取得するために2つのバッファを追加する必要があると思います。
低値は例えばLOWbuff[]です。
高値はHIGHbuff[]です。

もし、新しい高値(インジケータ内)があれば、今保存されている値と異なるかどうかをチェックします。
例えば、1.2815 ZigZag maxです。
バー1
バー2
バー3
...
barxの新しい値は、1.2755となります。

HIGHBUFF[1.2815,1.2815,...,1.2815,1.2755,1.2755... .] のような値になるはずです。

そして、Icustom(NULL,0, "ZigZag",3,0); を使えば、ほら!あなたの数字が出来上がりました。

というわけで、こんな感じです。

ゾレロ


いえいえ、実はよくわからないんです。


ジグザグがどちらを向いているかをEAに認識させたいだけなんです。どのようにそれを行うために行くのでしょうか?
 
ジグザグインジケータがどちらを向いているかをEAに認識させたいだけです。どのようにすればよいでしょうか?
おそらく、最後の2つの値を知りたいのでしょう(ジグザグは常に値を持つわけではないので)。そこで、インジケータの最後の2つの値を読み取る必要があります:

  int n, i;
  double zag, zig;
i=0;
while(n<2)
{
   if(zig>0) zag=zig;
   zig=iCustom(NULL, 0, "ZigZag", 0, i);
   if(zig>0) n+=1;
   i++;
}
zig -- 最後の値、zag -- その前の値
if(zag>zig)indicator shows down
if(zig>zag) indicator shows up

zolero
 
zolero:
ジグザグインジケーターがどちらを向いているかをEAに認識させたいだけです。 どのようにすればよいでしょうか?
おそらく、最後の2つの値を知りたいのでしょう(ジグザグは常に値を持つわけではないので)。 ですから、インジケータの最後の2つの値を読み取る必要があります。

  int n, i;
  double zag, zig;
i=0;
while(n<2)
{
   if(zig>0) zag=zig;
   zig=iCustom(NULL, 0, "ZigZag", 0, i);
   if(zig>0) n+=1;
   i++;
}
ここで、zig -- 最後の値、zag -- その前の値、という2つの数値があります。
もし(zag>zig)なら、インジケータは下を示す。
if(zig>zag) インジケータは上昇する。

ゾロ目

ありがとうございます。
 
c0d3:
zolero:
ジグザグインジケーターがどちらを向いているかをEAに認識させたいだけです。 どのようにすればよいでしょうか?
おそらく、最後の2つの値を知りたいのでしょう(ジグザグは常に値を持つわけではないので)。 ですから、インジケータの最後の2つの値を読む必要があるのです。

  int n, i;
  double zag, zig;
i=0;
while(n<2)
{
   if(zig>0) zag=zig;
   zig=iCustom(NULL, 0, "ZigZag", 0, i);
   if(zig>0) n+=1;
   i++;
}
zig -- 最後の値、zag -- その前の値。
もし(zag>zig)なら、インジケータは下を示す。
if(zig>zag) インジケータは上昇する。

ゾロ目

ありがとうございます。





テストした結果



もし(zag<zig)なら、インジケータは下に表示されます。
(zig<zag)であれば、インジケータは上昇します。


(zag>zig)と(zig>zag)では方向が逆になっていたのですが、それが正しいようです。

 
c0d3:
(zag>zig)と(zig>zag)で逆方向を与えていたのですが、その通りだと思います。

私はチャート上ですでに最終ラインを見ていました。これは、最終ラインが下向き[または上向き]になっていたことを意味します。しかし、これを上下のシグナルとするには少し問題があります。 ジグザグは自分自身を描き直すことができる(そしてしばしばそうする)のです。それはおそらく上がるだろうが、いくつかの動きの後、新しいラインダウン(1.2900から1.2820まで)など、大きなチャンスがある。私が言いたいのは、チャート上に線があるからといって、その方向への動きが終わったとは限らないということです。
 
  
int n, i; double zag, zig;
i=0;
while(n<2)
{
if(zig>0) zag=zig;
zig=iCustom(NULL, 0, "ZigZag", 0, i);
if(zig>0) n+=1;
i++;
}
 

&nbint n, i; double zag, zig; i=0; while(n<2) { if(zig>0) zag=zig; zig=iCustom(NULL, 0, "ZigZag", 0, i); if(zig>0) n+=1; i++;}sp;int n, i; double zag, zig; i=0; while(n<2) { if(zig>0) zag=zig; zig=iCustom(NULL, 0, "ZigZag", 0, i); if(zig>0) n+=1; i++; } .......................1.......1......1.1.1......1.0

 
誤信号の意味を示すために、ジグザグのコードを少し修正した。「一枚の絵は千の言葉を語る」と言われるように...。


赤い線はオリジナルのジグザグで、下から上へ、そしてまた最高の瞬間に戻ってくる...少なくともこのように見える。しかし、もしあなたがEAをコーディングしているなら、EAは黄色い線に近いシグナルを得ることになります。
このコードは、次の線が引かれるまで、上か下の線を再描画し、赤い線が引かれるまで、黄色の線を段階的に変化させる(最大値と最小値を削除する)ものだ。