EAを削除、パラメーターを変更の後、再稼働できる時はいいのですが、

すでにポジションが建っていたり、計算値を蓄えていたりする場合など、

EAの削除・リロードを行うことで、マジックナンバーや他のパラメーター

などが変わって、EAがうまく作動しなってしまうことがあります。


ただ、EAの稼働中、しばらくの間は、

・ 注文を発したくない

・ 建玉したくない

・ 決済したくない

とか

・ 係数や基準値を高く(低く)しておきたい

なんて、思う機会もありませんかはてなマーク


そんな時のために、EAの稼動を止めることなく、一部のパラメーターだけを変更する、とてもシンプルなサブEAを作ってみました。


いろいろな方法があるでしょうが、今回は 『共有メモリを活用する』

とても便利な機能を使わせていただきました。

その機能の概要やDL、設定方法は、こちら(↓)をご覧ください。

http://d.hatena.ne.jp/fai_fx/20100207/1265474800


作成したサブEA(Para_Setting)の初期設定は、

 order_control = "on"
 close_control = "on"
 zone_suspend = "off"
  stop_hour = 0
  resume_hour = 24

となっていて、

メインEA内で制御したい操作のオン・オフ切り替えや時刻設定を

こちらで行います。


このサブEAを、メインEAが稼動していない他のチャート(何でも構いません)で走らせます。


一方、メインEA側のプログラムに、

 string bro_name = StringSubstr(AccountCompany(),0,3);

 string order_control = GetMemString(bro_name+"order_control");
 string close_control = GetMemString(bro_name+"close_control");
 string zone_suspend = GetMemString(bro_name+"zone_suspend");
 if(zone_suspend == "on")
  {
  int stop_hour = StrToInteger(GetMemString(bro_name+"stop_hour"));
  int resume_hour = StrToInteger(GetMemString(bro_name+"resume_hour"));
  }
と書き加え、

発注(建玉)関数や決済関数などの前に

 if(order_control == "on") ...

 if(close_control == "on") ...

のような条件付けを設定します。


これで、サブEA側で行うオン・オフの切替えや時刻設定値を、メインEA側に引き渡すことができ、メインEAの動きを停止(EAを削除)する必要がなくなります。


もし、このサブEAコードを見てみたい、使ってみたいという方がおられましたら、お届けしますので、メッセージ手紙をどうぞ。



このような使い方の他、サブEA側からメインEA側へ、いろいろな情報を伝授することにも利用できますね。