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側へ、いろいろな情報を伝授することにも利用できますね。