前回、「とあるMetaTraderの備忘秘録」で取り上げられた掲題のプログラムをレビューし、最新のMT5で稼働させるための必要な変更・加筆をいたしました。大変シンプルなプログラムながら、MQL5理解のためには絶好の練習材料でもありました。
移動平均線であれば、MT5にトレンド系指標として標準搭載されているインジケータ Moving Averageを使えば、SMAであれEMAであれMAの種類やMA期間を自由に選択して、簡単にチャートに表示させることができます。ただし、Moving Averageのソースコードは公開されていません。
一方、前回修正・加筆したインジケータでは、MAの期間は変数 MAPeriodを設定してその選択ができましたが、移動平均の種類(SMA、EMA等)の選択はできません。MT5の移動平均線の種類はMT4のように変数として設定できない仕様になっているからです。でも、実際にMoving Averageではその選択ができているのですから、工夫をすれば標準搭載のMA同様のプログラムに変身させることができるはずです。
場合分けには必需品でもある switch文を利用して目的を達成することができました。前回のプログラム中、// 外部パラメータと// 初期化関数を下記の通り変更することで、プログラム完成です。(変更部分のみ)
// 外部パラメータ
input int MAPeriod = 10; // 移動平均の期間
input int MAtype = 0; //0=SMA,1=EMA,2=SMMA,3=LWMA
// 初期化関数
int OnInit()
{
// 指標バッファの割り当て
SetIndexBuffer(0,MALineBuffer,INDICATOR_DATA);
// テクニカル指標の初期化
switch(MAtype)
{
case 0:
MA_handle = iMA(_Symbol,0,MAPeriod,0,MODE_SMA,PRICE_CLOSE);
break;
case 1:
MA_handle = iMA(_Symbol,0,MAPeriod,0,MODE_EMA,PRICE_CLOSE);
break;
case 2:
MA_handle = iMA(_Symbol,0,MAPeriod,0,MODE_SMMA,PRICE_CLOSE);
break;
case 3:
MA_handle = iMA(_Symbol,0,MAPeriod,0,MODE_LWMA,PRICE_CLOSE);
break;
}
return(INIT_SUCCEEDED);
}