複数のチャートのアラート機能を一括制御する為の工夫。

人は何かの犠牲なしに何も得ることはできない。何かを得るためには、それと同等の代価が必要になる。


自作インジケータを複数のチャートに貼り付けていて、且つ、アラートに前回紹介したようなアクティブ化機能を持たせていると、本当に何かの作業に集中したい時に、全てのチャートのインジケータの設定を変更する必要があって不便です。


アラートを見逃しにくくした工夫の代償として、そんな不便さが生じているのだとしても....それが世界の真実だと受け入れられるほど淡白な私ではないので、今日はもう少し工夫をしてみたいと思います。






方針としては、複数のチャートのインジケータの挙動を操作するために、グローバル環境変数に指示内容を書き、各インジケータがそれを参照するようにします。
まずはインジケータ側のコード。

if(!GlobalVariableGet("UseChartActivate")<0) ChartActivate();

グローバル環境変数"UseChartActivate"に負の値が入っていなかったら、実行する。というコードです。
デフォルトでは、"UseChartActivate"という環境変数は存在しないので、ゼロが取得されて、ChartActivate() が実行されます。


次に、制御用のスクリプト

#include 
int start()
{
   int ret = MessageBox("ChatActivator:\nON = YES, OFF = NO","ChatActivator Control",MB_YESNO);
   if(ret == IDYES){
      if(GlobalVariableCheck("UseChartActivate")) GlobalVariableDel("UseChartActivate");
   }else{
      GlobalVariableSet("UseChartActivate",-1);
   }
   return(0);
}

これはscript として保存して実行すると、下記のようなダイアログが出てきてChartActivate() の機能をON/OFF できます。

今回は、単純にON/OFF ということで、0 / -1 の2値で区別していますが、アラート機能を有効にしてよい時刻(例えば、今から2時間後の時刻)をスクリプトから書き込む…あるいは、アラートレベルの設定値とする…といった使い方も出来ると思います。この辺りはいろいろ工夫してみると良いかもしれません。