今回は結論から
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 件のコメント:
コメントを投稿