MT4入門(6) – カスタムインディケータの作り方(4)

MetaTrader4入門の第6回目です。
今回は
「カスタムインディケータの作り方(4) – インディケータのパラメータ設定」
と題してお話しします。
これまで簡単な例として4日移動平均のインディケータを作ってきましたが、移動平均はいつも4日というわけではありません。
移動平均を取る期間を変えるのにどうすればいいでしょうか。今までの例のように毎回式を書き換えるのは大変です。
そこで、移動平均の期間を変数にして、その変数を変えるだけで済むようなプログラムを書いてみます。
Sample3_Image1.png
新たに移動平均の期間を表す MA_Period という変数を宣言し、ここでは仮に4と初期値を代入します。
もう一つ繰り返しを制御するために j という変数を宣言します。
前回、
Buf0[i] = (Close[i]+Close[i+1]+Close[i+2]+Close[i+3])/4; //式(1)
とだけ書いた部分がちょっと複雑になりますが、順番に見てましょう。
for(j=0; j < MA_Period; j++)
の部分は、j が 0 から j < MA_Period の範囲で1ずつ増えていく繰り返しですが、この例では、j=0, j=1, j=2, j=3 と4回の繰り返しを行うことになるので、
Buf0[i] = Buf0[i] + Close[i+0]; //式(2)
Buf0[i] = Buf0[i] + Close[i+1];
Buf0[i] = Buf0[i] + Close[i+2];
Buf0[i] = Buf0[i] + Close[i+3];

というように、終値の値を1個ずつ足していくことがわかると思います。そして、4つの終値を全部足してから
Buf0[i] = Buf0[i] / MA_Period;
のように MA_Period(ここでは4)で割れば、式(1)と同じ結果になるのです。
ここで、for 文の前に
Buf0[i] = 0;
のようにBuf0[i] を初期化してあります。初期化しなくてもうまくいく場合もありますが、式(2)のように、宣言されただけの Buf0[i] の値を使って計算する式では、最初に0が入っているという保証はないので、念のために0の代入を明示しておく方が確実です。
あと、C言語をご存知の方には説明する必要はないと思いますが、
Buf0[i] = Buf0[i] + Close[i+3];
Buf0[i] = Buf0[i] / MA_Period;

のように、左辺と同じ変数に対して加減乗除演算を行う場合、
Buf0[i] += Close[i+3];
Buf0[i] /= MA_Period;

のように += とか /= という演算子を使って簡単に書くことができます。慣れてくるとこのような書き方を使った方が便利かもしれません。
これで、MA_Period の初期値を変えるだけで、移動平均の期間を変えることができるようになりましたが、それでも、このままでは変える度にコンパイルし直さなくてはなりません。
もうちょっと簡単にパラメータを変更する方法として、この変数を init(),start() などの外側、つまり外部変数として宣言する方法があります。書き方としては、関数の外部の位置(どこでもいいのですが、わかりやすく #property 命令の後くらい)に
extern int MA_Period=4;
のように extern という予約語を付けて宣言します。
するとこの変数は、インディケータをアタッチするとき、あるいは、アタッチ後でも、MetaTrader のメニューの [Charts]-[Indicators List] で該当するインディケータを選択して、Edit ボタンを押すと現れるウインドウ上の Input タブに表示されるようになります。
ここで、適当な数値に変更すると、コンパイルしなくても、すぐにチャート上に反映されます。

ここまでの追加を行ったファイルを Sample3_Ind.mq4 としておきます。(Download Sample3_Ind.mq4
あともう一つ、便利な使い方としてテンプレートの使用をお勧めします。
チャートのスタイルやインディケータを自分用に設定した後に、チャート上で右クリック、あるいは、MetaTrader のメニュー [Charts]-[Templates]で、適当な名前をつけてセーブしておきます。
間違ってそのチャートを閉じてしまった場合や、別のチャートに対して同じスタイル、同じインディケータ、同じパラメータを設定したい場合にテンプレートのロードを行うと、一発で設定を再現してくれるので、いちいち設定をやり直す手間が省けて便利です。
ちなみにチャートのテンプレートが保存されているフォルダーは、MetaTrader をインストールしたフォルダーの下の templates というサブフォルダーです。experts の下にも同じ名前のフォルダーがあるので間違わないようにしてください。
Template_Folder.png
今日はこんなところです。次回はチャートとは別ウインドウに表示させるオシレータ系のインディケータについて説明する予定です。
にほんブログ村 為替ブログへ為替ブログランキング 現在16位
「次の記事も読んでみたい!」
と思った方はクリックにご協力ください。↑



コメントは受け付けていません