プロが教えるわが家の防犯対策術!

最近MT4の入門書を買ってMQL4の勉強を始めた者です。よろしくお願いします。

EAでZigZagの天底を現在レートがブレイクアウトしたところでエントリーするシステムを作りたいのですが、ZigZagの頂点(底点)の値の取得の仕方がわかりません。

iCustomで標準搭載のZigZagを呼び出して条件式を書いてみましたが売買できませんでした。
(以下のような文です)

double zig = iCustom(NULL, 0,"ZigZag",12,5,3,0,0);

if(zig <Ask)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",0,0,Blue);
}

おそらく見当違いのことをしているのだとは思います。
私が知りたいことは以下の2点です。

1.一つ前のZigZagの頂点(底点)の値。
2.二つ前のZigZagの頂点(底点)の値。

どうかよろしくお願い致します。

A 回答 (2件)

ZigZagの場合、頂点と頂点の間は空値が入っています。


ZigZagは頂点よりもその間を繋いでいる線の部分の方が圧倒的に多いです。ですからそのEAのiCustom関数はほとんどの場合、空値を返します。

さらにZigZagのmql文の中を見てみると34行目に
SetIndexEmptyValue(0,0.0);
http://www.metasys-seeker.net/MQL4_Reference_ver …
の一文が入っていることが分かりますよね。

これは空値を0.0に設定するという意味です。つまりそのiCustom関数ではほとんどの場合0が返されています。

SC11さんのEAではif文中で zig<Ask と書かれているので(以下略)。


低点の見つけ方ですが、私なら頂点を一つづつ探していき、一つ見つかったらその前後の頂点を探して、最初に見つけた頂点が次に見つけた2つの頂点の値より下回っていたら低点であるとします。
普通は見つかった順番に配列に入れておきます。こうするといくつ前の低点なのか分かりますしね。
    • good
    • 1
この回答へのお礼

昔の質問にまでご回答いただき本当にありがとうございます。(締め切っていないせいですが)
実は私は今はEAから離れてしまい裁量でトレードしておりまして、
かなり当時の記憶が薄れてしまっています。
ですが回答していただいたことには大変感謝しております。
ps2-arfiu4様の解説が皆様の役に立つことを願います。

お礼日時:2013/12/10 16:54

ZigZagは頂点と低点をつけた時にだけ、値を返します。


例文にある記述ですと、shift値が0では今現在の足が頂点となっている時しか、この条件式は希望どおりの動きをしないでしょう。

過去につけたピークを取得したい場合は
iCustom関数の最後の引数であるshift値をfor文を使って+1ずつ変化させ、値が現れたら変数にいれる。という形を私は取っています。

複数取得したい場合は、1つ目のピークを付けたshift値+1から再開し、また値が現れたら別の変数に入れればOKです。この辺のやり方はいろんな方法があると思いますので、考えてみてください。

この回答への補足

ご回答ありがとうございます。アドバイスをもとにやり方を考えたみましたがどうもうまくいきません。
私はfor文を使うのはこれがはじめてというくらいの素人なので、ちょっとやろうとしていることのハードルが高いのかもしれません。私が書いたプログラムを載せておきます。このプログラムですと全く意図していない所でエントリーしてしまいます。やはり見当違いのことをしているのだとは思います。もしよろしければヒントを頂けないでしょうか?

double zig;
double ZigNo1;
int a;
int b = 0;

for (a=1; a<100; a++)
{
zig = iCustom(NULL,0,"ZigZag",12,5,13,0,b);
b++;

if(zig>0)
{
ZigNo1 = zig;
a = 100;
}
}

if(High[1]<ZigNo1 && ZigNo1<High[0])
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",0,0,Blue);
}

補足日時:2011/05/28 22:53
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!