こんにちは~
fx-onエンジニアの岩淵です。
今回は「使った分だけの支払い」タイプのEAを作れるか挑戦しました。
EAの代金を一括支払いではなく、取引した分に応じた支払いにしたいというやつです。
流れ
費用発生までの処理の流れをザックリと考えてみました。
1.EAが取引する。
2.EAからサーバーへ取引数量が送られる。
3.1ヶ月毎に合計取引数量を集計する。
4.費用を計算して請求する。
2のEAが取引した取引数量をサーバーへ送ることさえできれば、あとは何とかなりそうです。
集計機能
取引数量をサーバーへ送るタイミングですが、これも2通り考えられます。
①1日1回など、一定期間毎にEA内で集計して送信
②ポジションを持つ毎に送信
①ですと集計用の関数を作って計算すれば良いかと思ったのですが、期間中にマジックナンバーが変更されると集計から漏れてしまいます。
残念ながらこの方法は使えません。
②のポジションを持つ毎に送信する場合を考えます。
OrderSend関数が成功したタイミングでその時の取引数量を送信すれば良い気がしますが、それだと待機注文の場合は困ります。
待機注文はキャンセルされる可能性がありますからね。
また、EAによってはOrderSend関数が何箇所も書かれていたりするので、手動でコードを差し込むのも自動で差し込むのも大変そうです。
ポジションを持つ毎に実行されるような関数があるといいのですが。
解決策を求めてmql5.comを徘徊していた所、OnTradeというイベント処理関数がありました。
イベント処理の関数
どうやら取引が行われる度に実行されるようです。
これが動いてくれれば作れそうですね。
さっそく試してみましたが、どうやらMT4では動かない関数のようでしたorz
結論
自前で似たような関数を作るのも考えましたが、それでもマジックナンバーの問題とか、OrderComment使う方法とか、初期化された場合の対策とかいろいろ考えると、どの方法にも何らかの抜け道があってダメそうです。
ちょっと私の実力では取引数量をキッチリ集計できそうにないので、「使った分だけの支払い」は無理でした。
何かいい解決方法知ってるという方がいたら教えて下さい!