先日、1ポジションしか持たないEAが同時に2ポジションを持つという事象が発生しました。
自作EAではないのでEAのソースコードは見れませんが、単純なプログラムバグではなさそうでしたので紹介しようと思います。
発生した環境
◆証券会社外為ファイネスト(リアル口座)
◆通貨
EURCAD
◆発生時刻
日本時間で朝の07:05
◆MT4のエキスパートログ
◆その他情報
・07:05という時間は外為ファイネストの定期メンテナンス明け直後
火曜日~金曜日の午前6時58分~午前7時05分(7分間)
・ログを元に外為ファイネストに問い合わせをしたが「異常はなかった」との回答。
・この条件が揃ったら必ず発生するというわけではない。
同じ状況(外為ファイネスト、同EA、同時刻エントリー)で正常に動いていた人もいる
原因の推測(私なりの)
これらの情報を元に推測すると今回の事象は言語、フレームワーク(MT4)の不具合っぽい気がします。少しプログラム寄りの話になりますが、MQL(EAを作る言語)には注文系の部品(メソッド、関数ともいう)が用意されています。
どのEAもそれらの部品を使って証券口座へ新規注文を出したり、ポジション情報を取得していると思います。
「既にこのマジックナンバーのポジションを持っているか」を判定する場合もそれらの部品を組み合わせて判定をします。
つまり「証券口座との接続部分」に関してはMQL、MT4が引き受けてくれているのです。
今回のケースはこれが間違った情報を返したのではないかと推測しています。
既に口座にはポジションがあるのに「持っていない」と返したのかなと。
何故そうなったかの特定は出来ませんが、「メンテナンス明け直後の時間とエントリーが被ったこと」が怪しいと思っています。
メンテナンス明け以外でも発生しているのであればもっと大騒ぎになっているという理由もありますが、本業システムエンジニアの勘です。
なんとなく「こんな感じでサーバを組んでいてメンテナンスでこんなことをやっていたら今回の事象が出るかもな」というのは想像できますので。
結論
原因はどうであれ結果的に複数ポジション持ってしまうのはちょっと怖いですね。今回は2ポジションでしたが、10ポジション持っても不思議ではないです。
「言語、フレームワークレベルの不具合」というと大きく聞こえるかもしれませんが、システム開発の世界ではそんなに珍しい話ではないです。
頻繁ではありませんが2年に1度ぐらいは出会います。
ほとんどの場合、問い合わせをしても「そういう使い方をしたらそうなりますね」と返ってくるのがオチなので大体はプログラム側で回避することになります。
今回のケースでいうなら「前回エントリーから10分経過していない場合はエントリーしない」というロジックを入れる感じですかね。
そうすれば正しいポジション情報が取得できなくても重複は回避出来そうな気がします。
数分刻みでスキャルピングするEAなら「証券会社のメンテナンス時間が集中している0時台はエントリーをしない」というロジックですかね。
0時台にも数分刻みでガンガンいきたいEAは・・「自分で考えろ」ですかね。
もし私の推測通り「メンテナンス明け時間にエントリーが被ったこと」が原因だとしたら、ほとんどのEAにとってはほぼ発生しないレベルのレアケースでしょう。
気にしなくていいレベルだと思います。
最近よく目にする「0時台に特化しているEA」は気を付けた方がいいかもですね。
OANDAは丁寧に↓のような記述がありました。
『※メンテナンス終了後のレート配信再開時における自動売買ソフト(EA)の動作確認、またその実行によって生ずる諸問題につきましてはサポートいたしかねますのでご了承ください。詳しくは直接開発者へお問い合わせくださいますようお願いいたします。』
0 件のコメント:
コメントを投稿