(続々)指定時間帯のみにEAを動かす…。

先日の指定時間帯のみにEAを動かすスクリプトは、1台のPCに1つのMT4で、複数のEA を動かしている環境で、PCの再起動時には MT4 を自動起動しないという暗黙の条件下を想定していました。
ところが、運用形態によっては、PCの再起動後にも備える必要があるようです。


MT4 の script は MT4 を再起動すると停止してしまうので、再起動後に自動でscript を適用させる ( これはちょっと危険.. ) か、そもそもの仕組みを変えるしかありません。ちなみに、EA と script と indicator の特徴をまとめると以下の表のようになります。

種別 トレード(クローズ) PC再起動 注)
EA EA停止状態では何も実行されない
script × 無限ループ
indicator × Tick更新毎に実行される


再起動後にも動き続けるのは、EA か indicator になるのですが、 EA の場合は、一度 ExpertAdvisors ボタンを押して停止状態になると、何も実行されなくなる ( start関数が呼ばれなくなる ) ので、EA 自身にもう一度 ExpertAdvisors ボタンを押させることができません。
( 機械のロボットが、自分で自分の電源を切ってしまうと、ロボット自身は自分で再度電源を入れられない..ということです。)


indicator なら ExpertAdvisors ボタンの状態に関係なく実行されるので、ボタンのON/OFFには適しているのですが、逆にトレード(ポジションの修正やクローズ)ができないという欠点があります。


ODL等のいくつかのブローカーは、ポジションオープン時に StopLoss が入れられません。そのため、ポジションオープン後に、ポジションの修正で StopLoss を入れるのですが、この僅かな時間差の間にindicator がボタンをOFF にしてしまうと、 StopLoss のないポジションが出来てしまう危険性があります。





そんなわけで、1つのプログラムで対応するのは困難なので、1つの口座に対して2つのMT4 を起動して
・1つ目のMT4 では、トレード用の各種 EA と、ボタンのON/OFFをするだけのタイマーインジケータを動かす。
・2つ目のMT4 では、タイマーで指定時刻にポジションを閉じる(or 最低限のSL/TPを入れる) EA を動かす。
とするしかないのかなと思います。
ソースコードは、こちらに置きましたので、十分にテストして挙動を理解した上でお使いください。


注文時に StopLoss が入るサーバであれば、タイマーインジケータだけで済むのですけどね...。