MT4のVersion変更(ビルドアップ)後、EAの挙動がおかしくなりました。 「日足…

MT4のVersion変更(ビルドアップ)後、EAの挙動がおかしくなりました。

「日足で実体が60Pipsを超えれば買い注文を入れる。


というEA(MQL4)を今年の二月ぐらいまで動かしており、
最近久々に再稼動させようと思いましたが、
何故か、チャートが動いた瞬間に買い注文を入れます
(もちろん日足の実態は60pips以下)
二月までは正常に稼動していました。

色々、コードを変えたりはしましたが、改善しません。
MT4のビルドを600未満に戻す他に解決策をお知りの方がいれば
教えて頂けませんか?
(今後の為に、新しい仕様を知りたいので)
検索はかなりしましたが解決策は分かりませんでした。

コードは下記です。

double cls =iClose(0,1440,0);
double opn =iOpen(0,1440,0);

if(cls > opn + 500*Point)
//ドル円の少数桁は三桁
{
int Ticket;
Ticket = OrderSend(Symbol(), OP_BUY, 0.1, Ask, 30*Point,0.001, 0, 0, 101, 0, Red);
//指値、逆指値は後で指定する
}

使用業者はThinkforexとFXDDで、両方とも同現象です。

以上です、ご教授頂ければ助かります。

回答1

raeraserさんへ

FXCMのMT4で以下のコメント表示プログラムを実行すると、iOpen()とiClose()の値が0になります。

Comment("Open="+iOpen(0,1440,0)+",Close="+iClose(0,1440,0));
↑これは「Open=0,Close=0」とチャート左上に表示される

そこで、第一引数のsymbolに0ではなく、NULLを設定すると値が正しく取得できました。

Comment("Open="+iOpen(NULL,1440,0)+",Close="+iClose(NULL,1440,0));
↑これは、「Open=1.26889,Close1.25727」等と表示される(通貨ペアはEURUSD)

ビルド600未満ではiClose(0,1440,0)で正しく値が取得できていた可能性がありますが、600以上では値が正しく取得できていない可能性があります。

まずは、

if(cls > opn + 500*Point)の行の時点で各変数(cls,opn,Point)の値がどうな 辰討い襪里をCommentやPrintでチャートに表示させてみる事をお勧めします。

例:
string msg = "cls="+cls+",opn="+opn+",Point="+Point;
Comment(msg);//チャート左上に表示(最後の出力が表示されている)
Print(msg);//ターミナルのエキスパートタブにログを残す

こうすると、なぜチャートが動いた瞬間に注文が入ってしまうのか分かると思います。

Originally posted 2019-09-09 19:38:13.

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA


Translate »