どうも、FXトレーダー兼システムエンジニアのナオトです。
開発の裏側の55回目は、悪い回線を手元で作って、コピートレードのEAを試した話でした。
今回も同じEAで、決済が遅れた話です。
コピートレードのEAは、親の口座で起きたことを、子の口座へ写します。
新しく建てる、損切りや利確の位置を変える、決済する、予約の注文を取り消す。
作り直したEAを、朝から夕方まで、約10時間の耐久試験にかけました。
決まった台本で親の口座から注文を出し続け、子の口座が同じになるかを見ます。
MT5からMT5へは、5,814本をすべて写し、毎周、親と子は一致しました。
写すまでの遅れは、真ん中の値で0.34秒から0.41秒です。
ただ、1つだけ気になる場面がありました。
親で30本をまとめて決済したとき、子の決済が、最大で12秒遅れていました。
原因は、注文を出す順番でした。
子のEAは、親の一覧と自分の口座を見比べ、違うところを見つけると、上から順に注文を出していました。
その中には、決済だけでなく、損切りの位置の変更や、新しく建てる注文も混ざります。
決済を1本ずつ出し、返事を待ってから次へ。30本あると、最後の1本まで時間がかかり、しかも親とは違う順番で閉じていました。
直したのは3つです。
1つ目は、決済と取り消しを、ほかの注文より先に全部出すことです。
親が閉じたものは、子でもまず閉じる。損切りの位置の変更や新しい注文は、そのあとです。
2つ目は、MT5では、決済の返事を1本ずつ待たずに、まとめて送ることです。
3つ目は、決済のときの約定の方式です。
MT5では、注文ごとに約定の方式を選びます。このEAは、直前に建てた別の通貨ペアの方式のまま、決済を出していました。通貨ペアによって使える方式が違うことがあるので、決済の前に、そのポジションの通貨ペアに合わせるようにしました。
直したあとの12周では、各周のいちばん大きな遅れが、0.86秒から2.3秒になりました。
返事を待たずに送る形には、別の落とし穴もありました。
送った時点で、成功と記録してしまうことです。業者に断られても、EAは気づきません。
そこで、送った注文の結果をあとから受け取る仕組みで、断られたら知らせる形を足しました。速さのために返事を待たないなら、結果を受け取る道は別に用意しておく必要があります。
それまでの、台本どおりに1本ずつ動かす試験では、遅れは最大でも1秒ほどでした。
まとめて30本、という場面を作って初めて、順番と待ち方の問題が見えました。
複数の口座をつなぐEAや、注文の多いEAの作成のご依頼もお受けしています。
最後までお読みいただき、ありがとうございました。