昨日、EAの稼動中に遭遇した2つの おぞましい 現象。


大規模ブローカーは、多数の顧客を対象にしてMT4を運営する際の

サーバー負荷軽減を図るため、レート配信専用のデータセンター

取引処理専門のトレードセンターを、それぞれ分離して備えています。


ここで、トレードセンターの操業が停止(中断)されると、両センター間に

レートの相違が発生し、思わぬ取引が執行されたり、意図した取引が

行われなかったりしてしまいます。


これは、バーチャル・ディーラー・プラグインや、その類の操作による

仕業と言えるかも…。


その①


節目対策 を講じた弱気なEA(Wander_mini と命名)を海原で航行中、

建玉すべきレートレンジから12pipsも離れたところで成行建玉叫び


データセンターから送信されてきたレートに基づき、Wander_mini は建玉

信号を発信したものの、その時点でトレードセンターはダウン。

再開後、建玉信号に基づき取引操作を行ったものの、トレードセンター

内の異なったレートで執行されたため、このような乖離が生じてしまった

のでしょう。


以前も、これに類する事件があり、ブローカー側とやりあった挙句、

先方が海原の過去レートを改ざんという暴挙に出て、呆れ果てたことが

ありました。


その②


Wander_adv (mini) は、チャート上にEAが把握している Bid と Ask の

数値を表示させていますが、チャート上、配信レートの変動は見られる

ものの、EAが示す数値は不動叫び


これも、データセンターは稼動していたが、トレードセンターが停止した

ために発生した現象でしょう。



対応策


その②については、ブローカーを変える以外、有効な策は無いのかも


その①については、プログラム内で MarketInfo(... ) を含む Bid や Ask

といったレート関数や変数をそのまま記さず、それらの値を、代数に

引き渡してから使用する方策が考えられます。


double pAsk = Ask; double pBid = Bid;

pAsk (pBid) に基づいて、条件判定 → 取引執行


こんな感じで。