このページでは、カスタムインジケーターを作成する際に標準で構成されている関数やその役割などを理解しながら、実際にMT4上に導入できるようになるまでを解説します。
これから多くのカスタムインジケーターを作成していくことになりますので、しっかり理解しておきましょう。
カスタムインジケーターの初期構成
まずは、カスタムインジケーターを新規作成します。
作成方法については以下のページで紹介してますので、わからない方は確認してみてください。
新規ウィザード作成でファイル名の入力以外何も設定しないで作成すると、以下のような構成になっていると思います。
中身を確認すると、三分割構成になっているのがわかるかと思います。それぞれについて解説していきます。
#property
「#property」から始まる各項目は、インジケーターやEAの様々な情報を表示することが出来ます。
この状態でデバッグのスタートボタンを押すと以下のような画面が出ます。
「copyright」「link」「version」などが表示されているのがわかります。ダブルクォーテーション「” ”」で囲まれた文字列を変更することで表示内容も変更できます。
現在は何も作成していないので分かりづらいですが、「indicator_chart_window」は、メインチャートにインジケーターを表示させる場合に指定します。
試しに値を「indicator_separate_window」に変更してみましょう。
この状態でデバッグのスタートボタンを押し、初めに表示されるバージョン情報等の画面で「OK」をクリックすると、チャート画面は以下のようになるはずです。
チャートが分割された状態で表示されました。
作成するインジケーターをメインチャートに表示させるかサブチャートに表示させるかの違いです。これから作成していくものをどちらに表示させるかによって指定を変えていけば良いことが分かります。
「strict」は厳格なコンパイルモードを指定するものです。
この記述があるとコンパイルの際にコード内容を厳しくチェックしているというイメージで良いかと思います。
例えば、string型の変数にint型のデータを代入しても、互換性があるものについては勝手に変換してstring型で表示してくれるようになりますが、そういった点を警告させたりします。
そのため、この1行を消してしまっても問題なく動作することもありますが、基本的に記述しておいた方が良いと思います。
int OnInit()
「OnInit()」関数は、インジケーターをMT4チャート上に表示させた際に、初めに1回だけ実行される関数です。
繰り返し実行させる必要のない処理などを、この関数内に記述していきます。
具体的には、インジケーターバッファの割り当てやスタイルの指定などが該当します。
コードが正常に実行されれば、「INIT_SUCCEEDED」という戻り値が返されます。
コードに間違いなどがあり正常に実行されなかった場合は、「INIT_FAILED」が返され、そのインジケーター自体の実行が終了してしまいます。
int OnCalculate()
「OnCalculate()」関数は、ティックが更新されるたびに実行される関数です。インジケーターのメイン部分という認識で構いません。
この関数には引数が存在しますが、それぞれについては以下の通りです。
rates_total | ローソク足全体の数 |
---|---|
prev_calculated | 以前の呼び出しで処理されたローソク足の数 |
time[] | 時間の配列 |
open[] | 始値の配列 |
high[] | 高値の配列 |
low[] | 安値の配列 |
close[] | 終値の配列 |
tick_volume[] | ティックボリューム値の配列 |
volume[] | 取引量値の配列 |
spread[] | スプレッド値の配列 |
いきなりこれらすべてを理解するのは難しいので、こういうものがあると認識しておくだけで大丈夫です。
これらの情報が既に含まれた状態で「OnCalculate()」関数が実行されるので、これらの情報を活用しながらコードを書いていくことになります。
コメント