移動平均線を表示させるインジケーター
今回は移動平均線を表示させるインジケーターを作っていきたいと思います。
メタエディタ(MetaEditor)を立ち上げる
メタエディタ(MetaEditor)を立ち上げましょう。操作は以下に記載しています。
今回は名前を「ma-sample1」で作成します。
- 移動平均線をチャートに表示する
プロパティを記述する
プロパティを記述していきます。
- 赤色
- SOLID
- 幅3
という形でプロパティを定義していきます。
まずは、移動平均線を表示するためのバッファを一つ用意しましょう。
#property indicator_buffers 1//バッファ1つ
次に色を指定します。今回は赤色にします。
#property indicator_color1 Red//赤色
次に線の種類を決めます。今回は実線にします。
#property indicator_style1 STYLE_SOLID//実線
最後に実線の幅を決めます。今回は3にします。
#property indicator_width1 3//幅3
これでプロパティを記述は完了です。
#property indicator_chart_window//メインチャートに表示 #property indicator_buffers 1//バッファ1つ #property indicator_color1 Red//赤色 #property indicator_style1 STYLE_SOLID//実線 #property indicator_width1 3//幅3
バッファを定義する
次にバッファを定義していきます。バッファはプロパティの下に記載しましょう。
double Buf[];//バッファ定義
OnInit()関数に記述する
OnInit()にバッファの設定を行います。
SetIndexBufferとはインデックスに用意したバッファを格納するための関数です。
今回は0番目にBufを紐付けさせます。
SetIndexBuffer(0,Buf);//インデックスに配列を紐付け
OnCalculate()関数に記述する
OnCalculate()関数に記述しましょう。
Barsとは、表示されているバーの本数を格納しているint型の変数です。
IndicatorCounted()は変化していないバーの本数です。
Bars-IndicatorCounted()とは、
インジケーターの確定値が計算されたバー(現在のバー以外)の本数を取得するということです。
- Bars:チャートウィンドウに表示されているバーの本数を格納している
- IndicatorCounted:変化していないバーの本数
int limit = Bars-IndicatorCounted();
次にfor文でiが0から始まりlimit以上になるまで繰り返します。
for(int i=0; i < limit; i++)//iが0から始まりlimit以上になれば終了
最後にもしその条件が正しい状態は、iMA関数を表示させます。
Buf[i] = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, i);//期間20のSMA
iMA関数というのは、移動平均線のテクニカル関数になります。
詳しくは以下の記事を参照してください。
これでOnCalculate()関数の記述は完了です。
int limit = Bars-IndicatorCounted();//バーの本数を格納-変化していないバーの本数 for(int i=0; i < limit; i++)//iが0から始まりlimit以上になれば終了 { Buf[i] = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, i);//期間20のSMA }
コンパイルする
コンパイルしてみましょう。チャートにセットして赤い移動平均線が表示されていればOKです。
ソースコード全体
ma-sample1のソースコード全体は以下に記載しています。
//+------------------------------------------------------------------+ //| ma-sample1.mq4 | //| Copyright 2020, FX-EA System Project Creator | //| https://creator.fx-ea-system-project.com/ | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, FX-EA System Project Creator" #property link "https://creator.fx-ea-system-project.com/" #property version "1.00" #property strict /*プロパティ*/ #property indicator_chart_window//メインチャートに表示 #property indicator_buffers 1//バッファ1つ #property indicator_color1 Red//赤色 #property indicator_style1 STYLE_SOLID//実線 #property indicator_width1 3///幅3 /*バッファ*/ double Buf[];//バッファ定義 //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,Buf);//インデックスに配列を紐付け //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ 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[]) { //--- int limit = Bars-IndicatorCounted();//バーの本数を格納-変化していないバーの本数 for(int i=0; i < limit; i++)//iが0から始まりlimit以上になれば終了 { Buf[i] = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, i);//期間20のSMA } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
まとめ
これで移動平均線を表示させることができましたね!!
インジケーターの表示は基本的にこのような形で行っていますので、
他のインジケーターも表示させることができます。
コメント