最近、1つのライブ口座と4つのデモ口座を使って、MT4の自動取引プログラムを稼動させています。


同時刻、一斉に80以上の新規注文を発し、続いて修正注文も発しているのが原因だろうと思っているのですが、どこの口座でも、多かれ少なかれ、"Trade context is busy" (取引繁忙状況)というエラーメッセージとともに、それらの注文不成立が頻発します。


この不成立の解消を目指し、プログラムをいじってみました。

ちょっと、マニアックな記事になりますので、興味のない方はスルーしてください。


まずは、IsTradeAllowed () という関数を使って、「注文を発してもいいですか?」とサーバーに問い合わせ、「いいですよ」との返答があれば発注、断られた場合は Sleep () という関数を使って、操作をちょっとだけ中断し、注文OKの返答があるまで、指定時間内であれば、何度でも注文の可否を尋ね続けるようにしてみました。


これで、注文が通りやすくなることを期待してみます。


ただ、新たに組み込んだ IsTradeAllowed () や RefreshRates () という関数の実行に、「どのくらいの時間を消費するのか?」、分かりません。


注文OKの返答が得られるまで待っていたり、売値・買値を更新していたら、指定時間を過ぎちゃった~なんてことになる可能性も無きにしも非ず。



ライブ口座では旧来のプログラムを使い、デモ口座で変更したプログラムを稼動させてみます。