複数のチャートのアラート機能を一括制御する為の工夫。
人は何かの犠牲なしに何も得ることはできない。何かを得るためには、それと同等の代価が必要になる。
自作インジケータを複数のチャートに貼り付けていて、且つ、アラートに前回紹介したようなアクティブ化機能を持たせていると、本当に何かの作業に集中したい時に、全てのチャートのインジケータの設定を変更する必要があって不便です。
アラートを見逃しにくくした工夫の代償として、そんな不便さが生じているのだとしても....それが世界の真実だと受け入れられるほど淡白な私ではないので、今日はもう少し工夫をしてみたいと思います。
方針としては、複数のチャートのインジケータの挙動を操作するために、グローバル環境変数に指示内容を書き、各インジケータがそれを参照するようにします。
まずはインジケータ側のコード。
if(!GlobalVariableGet("UseChartActivate")<0) ChartActivate();
グローバル環境変数"UseChartActivate"に負の値が入っていなかったら、実行する。というコードです。
デフォルトでは、"UseChartActivate"という環境変数は存在しないので、ゼロが取得されて、ChartActivate() が実行されます。
次に、制御用のスクリプト。
#includeint 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時間後の時刻)をスクリプトから書き込む…あるいは、アラートレベルの設定値とする…といった使い方も出来ると思います。この辺りはいろいろ工夫してみると良いかもしれません。