FX自動売買基礎と応用

MT5版の簡易MAにパラメーターを追加する【MQLプログラミングの基礎】

1.パラメーターを追加

「MT5でMA(移動平均線)を表示する【MQLプログラミングの基礎】」で作成した簡易MAファイルを編集し、パラメーターで各種設定を変更できる仕様に改修します。

まずは、期間をパラメーターで指定できるようにします。
前回作成したMA.mq5をメタエディター(MetaEditor)で開き、プログラム内の


//--- indicator buffers

の上に次の行を追記します。


input int PERIOD = 20; // 期間

パラメーターを定義する際の決まりとして、最初に「input」と入れます。
ここでは、整数型「int」で「PERIOD」を、初期値「20」として定義しています。
定義したPERIODをiMA関数の期間の場所へ貼り付けます。


   handle = iMA(NULL, 0, PERIOD, 0, MODE_SMA, PRICE_CLOSE);

コンパイルしてインジケーター設定を開くと、「インプット」タブが追加され、期間の値を変更できるようになっていることが確認できます。

「インプット」タブが追加され、期間の値を変更できるようになっていることが確認

上記の手順と同様に、その他のパラメーターとしてシフト、MA種別、適用価格を追加します。
MA種別及び適用価格については、int型ではなく、あらかじめ用意されている列挙型(ENUM)を利用します。


input int PERIOD = 20; // 期間
input int SHIFT = 0; // シフト
input ENUM_MA_METHOD METHOD = MODE_SMA; // MA種別
input ENUM_APPLIED_PRICE PRICE = PRICE_CLOSE; // 適用価格

定義したパラメーターをiMA関数の各場所へ貼り付けます。


   handle = iMA(NULL, 0, PERIOD, SHIFT, METHOD, PRICE);

コンパイルしてインジケーター設定を開くと、各種パラメーターが追加されていることを確認できます。
パラメーターの指定で、MAの各種設定を変更できるようになりました。

パラメーターの指定で、MAの各種設定を変更

2.色や線種をパラメーターで指定できるようにする

インジケーターで表示されるラインの書式(色、線種、太さ)は、インジケーター設定の「カラー」タブで指定し、変更できます。

色や線種をパラメーターで指定できるようにする

今回のMAにおいては、「インプット」タブのパラメーター設定でラインの書式を変更できるようにしても、機能追加としての意味はあまりありませんが、MT4との指定方法の違いを認識するための参考として下記に示します。

パラメーターとして、CLR(色)、STYLE(線種)、WIDTH(太さ)を追記します。


input color CLR = clrRed; // 色
input ENUM_LINE_STYLE STYLE = STYLE_SOLID; // 線種
input int WIDTH = 1; // 太さ

パラメーターで指定した書式を適用するため、OnInit()関数内に、下記を追記します。


   PlotIndexSetInteger(0, PLOT_LINE_COLOR, CLR);
   PlotIndexSetInteger(0, PLOT_LINE_STYLE, STYLE);
   PlotIndexSetInteger(0, PLOT_LINE_WIDTH, WIDTH);

インジケーターの表示タイプを指定するため、下記を追記します。


   PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_LINE);

インジケーターのラベル表示に、MA種別や期間が自動で反映されるよう、下記を追記します。


   PlotIndexSetString(0, PLOT_LABEL, StringSubstr(EnumToString(METHOD), 5) + "(" + (string)PERIOD + ")");

EnumToString()関数にMETHODを入力すると、文字列「MODE_SMA」が出力されます。
StringSubstr()関数で、5文字目以降と指定することで、「MODE_SMA」の5文字目以降が切り取られ「SMA」という出力となります。
カッコ付きの期間の文字列と合わせて「SMA(20)」というラベル表示になります。

OnInit()関数内へMAの書式指定を追記したことにより、元々の記述が不要となったので、プログラム内の下記の行を削除します。


--- plot MA
#property indicator_label1  "MA"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

コンパイルしてインジケーター設定を開くと、MAの書式パラメーターが追加されていることを確認できます。

コンパイルしてインジケーター設定を開くと、MAの書式パラメーターが追加されていることを確認

上記までの編集により、簡易的なMAを一般的なMAへ改修することができました。

3.ソースコード

今回、作成したソースコードは下記の通りです。


//+------------------------------------------------------------------+
//|                                                           MA.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1

input int PERIOD = 20; // 期間
input int SHIFT = 0; // シフト
input ENUM_MA_METHOD METHOD = MODE_SMA; // MA種別
input ENUM_APPLIED_PRICE PRICE = PRICE_CLOSE; // 適用価格
input color CLR = clrRed; // 色
input ENUM_LINE_STYLE STYLE = STYLE_SOLID; // 線種
input int WIDTH = 1; // 太さ

//--- indicator buffers
double         MABuffer[];
int handle; 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,MABuffer,INDICATOR_DATA);
   PlotIndexSetInteger(0, PLOT_LINE_COLOR, CLR);
   PlotIndexSetInteger(0, PLOT_LINE_STYLE, STYLE);
   PlotIndexSetInteger(0, PLOT_LINE_WIDTH, WIDTH);
   PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_LINE);
   PlotIndexSetString(0, PLOT_LABEL, StringSubstr(EnumToString(METHOD), 5) + "(" + (string)PERIOD + ")");
   ArraySetAsSeries(MABuffer, true);
   handle = iMA(NULL, 0, PERIOD, SHIFT, METHOD, PRICE);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   IndicatorRelease(handle);
  }
//+------------------------------------------------------------------+
//| 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 = rates_total - prev_calculated;
   if (limit < 1) limit = 1;
   CopyBuffer(handle, 0, 0, limit, MABuffer);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

EA(自動売買)を学びたい方へオススメコンテンツ

EA運用の注意点

OANDAではEA(自動売買)を稼働するプラットフォームMT4/MT5の基本的な使い方について、画像や動画付きで詳しく解説しています。MT4/MT5のインストールからEAの設定方法までを詳しく解説しているので、初心者の方でもスムーズにEA運用を始めることが可能です。またOANDAの口座をお持ちであれば、独自開発したオリジナルインジケーターを無料で利用することもできます。EA運用をお考えであれば、ぜひ口座開設をご検討ください。


本ホームページに掲載されている事項は、投資判断の参考となる情報の提供を目的としたものであり、投資の勧誘を目的としたものではありません。投資方針、投資タイミング等は、ご自身の責任において判断してください。本サービスの情報に基づいて行った取引のいかなる損失についても、当社は一切の責を負いかねますのでご了承ください。また、当社は、当該情報の正確性および完全性を保証または約束するものでなく、今後、予告なしに内容を変更または廃止する場合があります。なお、当該情報の欠落・誤謬等につきましてもその責を負いかねますのでご了承ください。

この記事をシェアする

ホーム » FX自動売買基礎と応用 » MT5版の簡易MAにパラメーターを追加する【MQLプログラミングの基礎】