昨日、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) に基づいて、条件判定 → 取引執行
こんな感じで。