MQL4では、カスタムインジケーターを作成する際に、インジケーターの表示方法や動作を設定するために#propertyという命令を使用します。
その中の一つであるindicator_chart_windowは、インジケーターをチャートウインドウに表示させることを指定します。
サンプルコード全文
indicator_chart_windowを使用し、インジケーターの表示色を赤色に設定したコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
//+------------------------------------------------------------------+ //| indicator_chart_window.mq4 | //| Copyright 2024, Zyuna32246 | //| https://zyunafx.com/ | //+------------------------------------------------------------------+ #property strict // インディケーターの設定 #property indicator_chart_window #property indicator_color1 clrRed // インディケーターのバッファ double indBuffer[]; //+------------------------------------------------------------------+ int OnInit() { // バッファの初期化 SetIndexBuffer(0, indBuffer); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { // バッファに値をセット for(int i=0; i<rates_total; i++) { indBuffer[i] = close[i]; } return(rates_total); } //+------------------------------------------------------------------+ |
コード説明
インジケーターの設定
1 2 |
#property indicator_chart_window //インジケーターをチャートウインドウに表示 #property indicator_color1 clrRed //インジケーターの表示色を赤色に指定 |
#propertyはコンパイルする際に使われ、インジケーターの表示方法や見た目を設定します。
インジケーターのバッファ
1 |
double indBuffer[]; //インジケーターの値を格納する為の配列 |
インジケーターの値を格納する為の配列をバッファといいます。このバッファを使用して、計算されたインジケーターの値をチャート上に表示します。
インジケーターの初期化関数
1 2 3 4 5 6 7 |
int OnInit() { // バッファの初期化 SetIndexBuffer(0, indBuffer); return(INIT_SUCCEEDED); } |
OnInit関数は、インジケーターの初期化を行います。SetIndexBuffer関数を使用して、indBufferをインジケーターのバッファとして設定します。
これにより、計算された値がこのバッファに格納され、チャートに表示されます。
インジケーターの計算関数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { // バッファに値をセット for(int i=0; i<rates_total; i++) { indBuffer[i] = close[i]; } return(rates_total); } |
OnCalculate関数は、インジケーターの主な計算部分です。ここではclose配列(終値)の値をindBuffer配列にコピーしています。
rates_totalはすべてのレート(価格データ)の数を表しており、その数をfor文でループ処理を行うようになっています。
表示イメージ画像
まとめ
#property indicator_chart_windowは、インジケーターが価格チャートと同じウインドウに表示されるかを指定する設定です。他にもindicator_color1 clrRedを使うと、インジケーターの色を赤に変えて視認しやすくするなども可能です。
サンプルコードでは単純に終値を表示していますが、同じ方法で他のインジケーターも作成出来ますので試してみてください。
コメント