MT4でEAを作成している者です。 プログラムの条件文の中に「ポジションを持って…

MT4でEAを作成している者です。
プログラムの条件文の中に「ポジションを持ってから、5バー経過で決済」という条件をプログラム記述しています。
しかし、データにズレが生じているようで、決済されません。

具体的には、ポジションを持った時のClose[0]を変数に退避させ、あとでその変数がClose[4]と同じになれば
成行で決済をするというIF文を入れています。
しかしある日時以降決済されず、Print文でその値を確認すると何時までたっても、Close[4]と同じにならず、データ
にズレが生じでいるようで決済されません。使っているデータが悪いと思い、ずれていると思われる時期を飛ばして
ストラテジテスタを動かしましたがそのある日時以降まったく決済されません。(IF文の条件にかからない)
ズレる原因はプログラムのロジックにあるのか、データが悪いのか △泙辰燭分かりません。
データにより決済されないということはあるのでしょうか?(データがズレることはあるのでしょうか?)
また、ポジションを持ってから5バー経過で決済するというロジックで他の考え方があればお教え願います。
※退避させる変数のデータ型はもちろんDouble型です。

..[補足]..
データ、MT4共にFXDDを使用しています。

回答1

違う方法にしたほうがいいと思います。

Close[0]の値は、値を呼び出したときのBidの値なので、バーが確定するまでは値が変化し続けます。
確定した終値を知るためには、Close[1]の段階で取得しなければいけません。

iBarShiftでポジションを持った時刻のシフト位置を得ることが出来ます。
iBarShift(NULL,0,約定時刻)

http://www.metasys-seeker.net/MQL4_Reference_ver1/19-02_iBarShift.h…

回答2

print文でclose[0」を収納した変数をclose[4]と
ともに出してみましたか。
close[0]を収納した関数がいつも0なら
ポジションを持ったかどうかは、1barごとに繰り返すようにしてclose[1]とすべきです。
毎回close[0]を収納した値が変わっ 討い譴佶莢鷙洪靴気譴討い襪海箸砲蠅泙后
ボジションを持った時だけ回る部分を作ってその中にclose[0]を変数に引き渡す部分を書きます。
変数は
最初の
int int()

のところで宣言していますか。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA