不安定なEA?

特定の環境でしか起こらないのだけど、その環境では致命的なほどに不安定になるコードの話し。
その環境は、WindowsXP 64bit版 + Metatrader4 Build 226 で、以下のような単純なEAを、10通貨ペアのチャートに設定してトレードを始めると早くて数分でクラッシュしてしまいます。(コードはここ)

↑EAの処理内容は、
(1) 無差別に全てのポジションを閉じる。
(2) 売買履歴が5000を超えたら終了する。
(3) 新規に買う。
たったこれだけなのですが、異常にサクサクと落ちます。↓

これが、Vista 32bit版 + Build 226 や、WindowsXP 64bit版 + Build 225 では、全く落ちることなく、5000回の売買を終えることができます。



MT4では、1つのMT4内でいくつEAを動かしても、売買処理は1つのスレッドで順番にしか処理されません。なので、その辺りに問題があるのかな?と思い、IsTradeContextBusy() でのチェックを加えると、落ちる頻度は激減するのですが、これだけでは完全な排他処理にはならないのでやはり時々落ちます..。

Sleepする時間を少々ランダムにしたところで、落ちるときは落ちるので、素直に Build 225 にするのが良いかもしれません。。
(ちなみに、226Vista 32bit版でEAを使わずにインジケータだけ表示させていても3-4ヶ月に一度落ちます..。

Build 225 を使う時は、この辺りから 225 の terminal.exe とMetaLang.exe を取り出して上書きし、LiveUpdate.exe を削除すればOK...かどうかは分かりませんので、自己責任でどうぞ。