トレンドを色で把握する移動平均線【Trend MA】作成日記#1

MQLプログラミング

トレンドを色で把握する移動平均線を表示するインジケータを実際にプログラミングしていきます。

上昇トレンドを赤色 下降トレンドを青色で表示するMAのプログラムです。

プログラムコード

MT5です。※MT4では動きません。今後対応予定。

今回は通常の移動平均線を表示するところまでです。

//+------------------------------------------------------------------+
//|                                                      TrendMA.mq5 |
//|                                   Copyright Rikei Trader Yoshiki |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright Rikei Trader Yoshiki"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 10
#property indicator_plots 10

//--- ハンドル宣言
int hMA;

// ---バッファ宣言
double MA[];

// ---定数定義
int MA_Period = 50;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- インジケータ名
   IndicatorSetString(INDICATOR_SHORTNAME,"TrendMA");
   
//--- バッファの設定
   SetIndexBuffer(0,MA,INDICATOR_DATA);

//--- インジケータ設定
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_COLOR_LINE);   
   PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID);
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrGold);
   PlotIndexSetInteger(0,PLOT_LINE_WIDTH,3);
   PlotIndexSetString(0,PLOT_LABEL,"TrendMA");

//--- ハンドルの実行
   hMA = iMA(NULL,PERIOD_CURRENT,MA_Period,0,MODE_EMA,PRICE_CLOSE);
    
   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[])
  {
// ---計算が全部終わっていなければ終了
   if(BarsCalculated(hMA) < rates_total) return(0);

// ---バッファへのコピー数を計算
   int to_copy;
   to_copy=rates_total-prev_calculated;//最初はprev_calulated==0なので、すべてのデータがコピーされる
   if(to_copy==0)//一度計算されるとrates_total==prev_calculatedになるので、最新のバーだけ計算するようにする
      to_copy++;

// ---バッファに値をコピー
   if(CopyBuffer(hMA,0,0,to_copy,MA)<=0) return(0);
   
   Comment("");         
   //Comment("rates_total=",rates_total);

   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| 終了時関数の定義                                                    |
//+------------------------------------------------------------------+
void OnDeinit(const int reason){
   IndicatorRelease(hMA);
}

解説動画

準備中です。

コメント

  1. mplrs.com より:

    Good to know.

タイトルとURLをコピーしました