どうも、FXトレーダー兼システムエンジニアのナオトです。
開発の裏側の54回目は、検証の道具が記録を間引いていて、急変の日の落ち込みが小さく見えた話でした。
今回は、ネットの回線が悪いときの動きを、手元で作って確かめた話です。
コピートレードのEAは、親の口座の取引を、中継のサーバーを通して子の口座へ写します。
作り直しの話は、開発の裏側の3回目に書きました。
同じパソコンの中で、6時間ほど続けて回す試験には合格していました。
でも、お客さんの口座は、遠く離れた別の回線にあります。届くのが遅れる、途中で切れる、しばらく止まる。そういう回線で正しく動くかは、別に確かめる必要があります。
そこで、EAと中継のあいだに、手元で小さな中継ぎを置きました。
送る側と受ける側で別々に、遅れ、揺れ、届かない、すぐ切れる、止まる、古い返事を返す、細い回線、を作れるようにしたものです。
この行き先の切り替えは、検証用の版だけが読み、お客さんにお渡しする版では読みません。
まず、MT4でつまずきました。
MT4から手元の中継ぎへ送ると、5200という番号で断られます。宛先が正しくない、という意味です。
調べると、MT4の通信の関数は、80番と443番以外の番号を受け付けませんでした。
80番はすでに手元のWebサーバーが使っていたので、127.0.0.2という別の宛先の80番を使って通しました。
次に、MT5です。
回線を落としたとき、MT5の通信の関数は、失敗を表す -1 を返さず、1003という番号を返すことがありました。
EAは、この番号をサーバーからの返事の番号として扱い、パネルに、送れませんでした、HTTP 1003、と出していました。
1001から先の番号は回線の失敗としてまとめ、送れなかった扱いにそろえました。
もう1つ見つかったのが、表示の取り残しです。
子の口座は30秒ごとに、中継との受け取りの枠を取り直します。その取り直しが回線で1回落ちると、取引の一覧はちゃんと届いているのに、30秒のあいだ、中継につながりません、という表示が出続けていました。
一覧が届いたらすぐ、つながっている表示に戻し、取り直しは5秒後にやり直す形にしました。
最後に、検証の道具のほうの見落としです。
古い返事を返す回線を作っても、最初の版では、使い回しが1回も起きていませんでした。
子からの問い合わせには、毎回、通し番号が付いています。道具はその番号ごと返事を控えていたので、同じ問い合わせが2度来ることがなく、古い返事を出す場面がなかったのです。
番号を外して控えるように直すと、古い返事を返せるようになり、EAはそれを通し番号で全部捨てていました。
直したあと、回線を悪くしたまま、売買の台本を7回流しました。7回とも台本の失敗は0で、最後は親と子の取引が一致しました。
回線の悪さは、同じパソコンの中の試験では起きません。そして、悪い場面を作る道具も、本当にその場面を作れているかを確かめないと、試したつもりになります。
通信を使うEAやインジケーターの作成や、動作の確かめのご依頼もお受けしています。
最後までお読みいただき、ありがとうございました。