2021年2月3日水曜日

MT4の同時発注について(個人的革命的発見!)

今回は結論から

1MT4に複数のチャートを出して

大量のEAをうごかしても全く問題ない 


MT4が注文を出している最中に次の注文を出すと、次の注文は無視されます。

この対策として、1つのEAに対して1つのMT4を用意する方法がとられてきました。

そのデメリットはメモリーの使用量です。

MT4を1つ起動するとメモリーが30MB-200MB使用されます。

チャートを追加しても使用されるメモリーはせいぜい10MBです。

VPSの価格はメモリー、CPU(コア数)、SSDの容量で決まっています

この中で最も重要なのはメモリーです。

「MT4が注文を出している最中に次の注文を出すと、次の注文は無視されます。」これについてはIsTradeContextBusy()で発注状況を確認することができます。

そこで以下のコードで作ったEAを2個同時に走らせました。

void OnTick()

{

if(Minute()!=51)return;

int d=OrderSend(_Symbol,OP_BUY,0.01,Ask,0,0,0,"TEST");

Comment(IsTradeContextBusy());

Sleep(10000);

ExpertRemove();

}

51分になったら発注します。

(作成したのが45分くらいだったので51分にしていますが51に深い意味はありません)

発注後にIsTradeContextBusy()の戻り値を表示します。

このおなじEAを2個同時に動かしますので、どちらか遅いほうは、発注が失敗しコメントに1と表示されるはずです。


結果はなんと両方発注されました。

使用した業者はFOREX EXCHANGEです。


発注時間の差は1/1000秒
発注の応答は0.1秒から1秒程度かかりますので

「MT4が注文を出している最中に次の注文を出すと、次の注文は無視されます。」

これは間違っていることになります。

どこかのビルドアップで仕様が変わったのでしょうか

1MT4に複数のチャートを出して

大量のEAをうごかしても全く問題ない 


ということになると思います。









0 件のコメント:

コメントを投稿