MT4→自作ツールへの連携方式を改善中
取組中・自分用のメモです。
- SteadyWinner 6.5へのバージョンアップのお知らせと、今回もEAのソースコードが届きました。机に向かう良いきっかけを頂きました。
- 6月頃から、実口座で少量のロット数で運用を続けてます。「EURCHFの負けないやつ」を有難く使わせていただいてますが、6月に2勝した後、7〜9月は一度も決済なし(ほんのちょっと含み益)の状況です。
- 不安要素(後述)を解消させてからロット数を増やそうと予定してます。
現行の仕組みは、おおまかに書くと下記となってます。
- MT4上のデモ口座で自動売買を行う
- MT4の売買状況の変化を監視する
- 売買状況が変化したら、速やかに実口座へ自動反映する
しかし、売買状況の変化の監視が少し不安定で、改善する必要があると考えています。
- 3年前に作ったきりの、現行の簡易方式 (※カッコ内は不安要素):
- MT4にて、売買状況を集約した一時テキストファイルを生成する (※生成速度が遅くないか?)
- 自作ツールで、一時テキストファイルの更新状況を監視する (※更新検知は遅延したり不確実ではないか?)
- 更新があれば、テキストファイルの内容を解析する (※解析速度が遅くないか?)
- 解析の結果と、実口座の注文状況に差異があれば、差異を埋めるよう発注する
- 不安1:MT4にて売買状況を集約した一時テキストファイルを生成する速度が、遅くないか?
handle = FileOpen( OutputFileName, FILE_BIN|FILE_WRITE ); FileWriteString( handle, strText, StringLen( strText ) ); //1回あたり約70行 FileClose( handle );
-
- 速度計測方法の選定
- MT4に用意された関数の分解能=1秒、計測には精度不足
- WindowsAPI GetTickCount()の分解能=約16ミリ秒
- WindowsAPI GetLocalTime()の分解能=約1ミリ秒との情報→WindowsXPで確認すると、残念ながら約16ミリ秒
- 今回はおおざっぱに確認できれば良いので、下記方法とした
- WindowsAPI GetLocalTime()を用いる
- FileWriteString()の部分を1万回ループさせ、約16ミリ秒の間に何行を生成できたかを確認する
- 同一タイムスタンプが続くのは、約7000行ずつ(例えば 327957行〜334962行 → 7005行/約16ミリ秒)
- すなわち1回ぶん=約70行を生成する速度は 約0.16ミリ秒
- 速度計測方法の選定
- 不安2:自作ツールでの一時テキストファイルの更新監視が、遅延したり不確実ではないか?
祝日はマーケットが動いているので、デバッグを進めやすかったです。
大きな不安材料2つが解消して、本格運用の再開に大きく前進しました。