
ダウンロードしたインジケーターをマルチタイムフレーム化する方法について記載します。
マルチタイムフレームでの分析は環境認識として有用ですので、是非ともご活用ください。
①ダウンロード
MQL公式サイトやMT4のターミナル、ネットからダウンロードしたインジケーターをご用意ください。
今回は、MT4のターミナルから「Heiken Ashi Smoothed」をダウンロードしましたので、これを例に説明します。

インストール方法
MT4のターミナルからは右クリックから「ダウンロード」をすれば自動的にインストールされます。
ネットからダウンロードした.mql4ファイルや.ex4を、次の「Indicators」フォルダに設置してください。

ダウンロードしたファイルが「.ex4」の場合
ダウンロードしたファイルが.ex4なら、「Indicators」に設置するだけでインストール完了です。
ダウンロードしたファイルが「.mql4」の場合
mql4ファイルは実行可能な形式にコンパイルする必要がありますので、次の手順を追ってください。

赤枠のボタンを押して、MetaEditorを起動します。
先ほど設置したファイルがありますので、そのファイルをダブルクリックしコードが表示された状態にして、赤枠部分のコンパイルを押してコンパイルしてください。

インストールはこれで完了です。
②MT4表示
MT4に表示された該当のインジケータをダブルクリックしてチャートに反映させてください。

③出力データのチェック
メニューの赤枠部分をクリックすると「データウィンドウ」が開きます。
これで、該当するインジケーターの出力データの形式と個数がわかりました。

④入力パラメータのチェック
チャートを右クリックして該当のインジケーターの設定画面を開いて、入力パラメータの確認を行います。
- 変数名
- 入力値
- 色

⑤カスタムインジケーターの作成
MtetaEditorを起動し、今回作成するインジケーターの名前を入力して作成します。各画面の項目はデフォルトのままで構いません。




⑥マルチタイムフレームのテンプレート
とりあえず、今回作成したインジケーターをテンプレートとしてご利用ください。
コピペでコンパイルすれば一応動きます(事前にHeiken Ashi Smoothedのインストール要)。
//+------------------------------------------------------------------+
//| MTF-Heikinashi.mq4 |
//| Copyright 2022,Greeds Co., Ltd. |
//| https://greeds.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022,Greeds Co., Ltd."
#property link "https://greeds.net"
#property version "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 Lime
#property indicator_color3 Red
#property indicator_color4 Lime
double Buf1[];
double Buf2[];
double Buf3[];
double Buf4[];
input ENUM_TIMEFRAMES in_timeFrame = PERIOD_CURRENT; //マルチタイムフレーム
input ENUM_MA_METHOD ma_method = MODE_SMMA; //移動平均の種別
input int ma_period = 6; //移動平均の期間
input ENUM_MA_METHOD ma_method2 = MODE_LWMA; //移動平均の種別
input int ma_period2 = 2; //移動平均の期間
int OnInit()
{
SetIndexBuffer(0, Buf1 );
SetIndexBuffer(1, Buf2 );
SetIndexBuffer(2, Buf3 );
SetIndexBuffer(3, Buf4 );
SetIndexStyle(0, DRAW_HISTOGRAM , STYLE_SOLID , 1);
SetIndexStyle(1, DRAW_HISTOGRAM , STYLE_SOLID , 1);
SetIndexStyle(2, DRAW_HISTOGRAM , STYLE_SOLID , 3);
SetIndexStyle(3, DRAW_HISTOGRAM , STYLE_SOLID , 3);
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[])
{
int limit = Bars - prev_calculated;
for(int i=0; i<limit; i++)
{
int shift = iBarShift(NULL, in_timeFrame, time[i]);
double hoge1 = iCustom(NULL,in_timeFrame,"Downloads/Heiken_Ashi_Smoothed",ma_method,ma_period,ma_method2,ma_period2,0,shift);
double hoge2 = iCustom(NULL,in_timeFrame,"Downloads/Heiken_Ashi_Smoothed",ma_method,ma_period,ma_method2,ma_period2,1,shift);
double hoge3 = iCustom(NULL,in_timeFrame,"Downloads/Heiken_Ashi_Smoothed",ma_method,ma_period,ma_method2,ma_period2,2,shift);
double hoge4 = iCustom(NULL,in_timeFrame,"Downloads/Heiken_Ashi_Smoothed",ma_method,ma_period,ma_method2,ma_period2,3,shift);
Buf1[i]=hoge1;
Buf2[i]=hoge2;
Buf3[i]=hoge3;
Buf4[i]=hoge4;
}
return(rates_total);
}
⑦入出力データ部分の実装
今回作成するインジケーターが既存の動きと違った動きをしてはいけないので、まず全くの同条件で作成します。
③で確認した出力データ、④で確認した入力パラメータに合わせて次のようにしてください。

数値などは既存のものを見ればわかりますが、移動平均線の種別や適用価格など、画面では確認できないものも多いです。その場合、コードを書き換えるなどして、既存処理と同じ動きになるように調整してください。
同じ動きにならない状態でマルチタイムフレームにしても、その動きが正しいのかが分からないからです。
不慣れな間は調整に時間がかかるかもしれませんが、根気よく調整してください。
⑧ロジック部分の実装
これは、マルチタイムフレームに必要な最低限の処理だけです。

簡単な解説を付け加えておきます。
for文処理
int limit = Bars - prev_calculated;
for(int i=0; i<limit; i++)
for文でチャートを0番目からlimit回ループ処理を行っています。これによりインジケーターの処理が行われます。
この例では0番目からループをさせています。0番目はチャートの一番右端の最新ローソクになっています。
つまり、0番目から順番にループ処理をさせるということは、右端から左に向かって処理を行っていくイメージで考えてください。
limitから0に向かって処理する場合もありますので、参考までに。
マルチタイムフレームの要
int shift = iBarShift(NULL, in_timeFrame, time[i]);
今処理中のローソクが、指定したタイムフレームのどの場所に該当するのかを教えてくれる処理だと思ってください。
インジケーターからのデータ取得
double hoge1 = iCustom(NULL,in_timeFrame,"Downloads/Heiken_Ashi_Smoothed",ma_method,ma_period,ma_method2,ma_period2,0,shift);
double hoge2 = iCustom(NULL,in_timeFrame,"Downloads/Heiken_Ashi_Smoothed",ma_method,ma_period,ma_method2,ma_period2,1,shift);
double hoge3 = iCustom(NULL,in_timeFrame,"Downloads/Heiken_Ashi_Smoothed",ma_method,ma_period,ma_method2,ma_period2,2,shift);
double hoge4 = iCustom(NULL,in_timeFrame,"Downloads/Heiken_Ashi_Smoothed",ma_method,ma_period,ma_method2,ma_period2,3,shift);
ダウンロード・自作したインジケーターはiCsutom関数で呼び出すことができます。
- インジケーターのファイル名
- そのインジケーターの入力パラメータ
- そのインジケーターからの出力データ
これらを指定してiCustom関数を実行することで、簡単にデータを取得することが可能になっています。
Heiken_Ashi_Smoothedは出力データが4個ありますので、それぞれを取得するために、shiftの前で番号を指定して取得しています。
データの出力
Buf1[i]=hoge1;
Buf2[i]=hoge2;
Buf3[i]=hoge3;
Buf4[i]=hoge4;
⑦でチャートと配列の紐付けを行っているので、配列にデータをセットするだけでチャートに描画されるようになります。
⑨既存処理との再チェック
データウィンドウで出力データに差異がないかチェックします。
差異がある場合、描画がずれたりしますので調整を行なってください。
- パラメータが違うのか
- 表示スタイルが違うのか
- 実装方法がまずいのか
同じ出力にならない場合、なにかを間違えているということですので原因追及してみてください。

⑩マルチタイムフレーム確認
入力パラメータのマルチタイムフレームを現在の時間軸より上の時間で合わせて、描画がこのようにギザギザしていれば問題ありません。

これでダウンロードしたインジケーターのマルチタイムフレーム化が完了です。
注意点
マルチタイムフレーム化はプログラムを触ります。
わけがわからない人は諦めてください。
この記事ではコンパイルなどする方法を一応書いておりますが、やはり初見の人には難しく感じる部分があるかもしれません。
しかし、それほど難しい実装方法でもありませんので、不慣れな人も一度試してみてください。
面白いですよ!