Meta Trader 4 におけるカスタム指標の作成

More than 3 years have passed since last update.


はじめに

今回は Meta Trader 4 (MT4) 標準で搭載されているテクニカル指標以外に、独自のカスタム指標を作成してみる。


MT4 の基本的な使い方 & 開発環境設定

MT4 の基本的な使い方と Sublime Text 3 を利用した開発環境の構築は以下のページにまとめてある。

ここまでで下準備は完了。


カスタム指標作成の基本


プログラムの構造

MQL4 では init()start()deinit() という特殊な関数が存在する。


  • init():


    • チャートにカスタム指標を追加した際に実行される。



  • start():


    • init() 実行直後 & 価格が更新されるたびに実行される。



  • deinit():


    • チャートからカスタム指標を削除した際に実行される。




サンプルコード

直近 3, 7 区間の単純移動平均 (SMA) を表示するサンプルコードを以下に示す。

MQL の見た目は C 言語にかなり近い。他の言語の経験があれば、すぐに書けるようになるはず。ただし、時系列データを扱いやすいように、無限長の配列、専用の数値計算や取引のための関数群など機能が数多く搭載されている。


3_7_sma.mq4

// プリプロセッサ命令

#property indicator_chart_window // チャート内に表示
#property indicator_buffers 2 // 2 個の指標を表示
#property indicator_color1 Red // 0 番目の指標の色を指定 (-1 番目になるのに注意)
#property indicator_color2 Blue // 1 番目の指標の色を指定
#property indicator_width1 3 // 0 番目の指標の太さを指定
#property indicator_width2 2 // 1 番目の指標の太さを指定

// 指標用の配列の定義
double Ind0[];
double Ind1[];

// チャートにカスタム指標を追加した際に実行
int init(){
SetIndexBuffer(0, Ind0); // Ind0 を 0 番目の指標として登録
SetIndexBuffer(1, Ind1);

return(0);
}

// init() 実行直後 & 価格が更新されるたびに実行
int start(){
int not_calc = Bars - IndicatorCounted(); // 未計算のバーの数を取得
for(int i = not_calc - 1; i >= 0; i--){
// 未計算部分の指標を全て計算
Ind0[i] = iMA(NULL, 0, 3, 0, MODE_SMA, PRICE_CLOSE, i); // 3区間移動平均
Ind1[i] = iMA(NULL, 0 ,7, 0, MODE_SMA, PRICE_CLOSE, i); // 7区間移動平均
}
return(0);
}

// チャートからカスタム指標を削除した際に実行
int deinit(){
return(0);
}



サンプルコードの実行

上記 3_7_sma.mq4 を Sublime Text 3 上でコンパイルし、3_7_sma.ex4 を作成する。

Finder から アプリケーション -> XMTrading.app を選択し、右クリック。パッケージの内容を表示 を選択。 drive_c/Program Files/XMTrading MT4/MQL4/Indicators 以下に先ほど作成した 3_7_sma.ex4 をコピーする。

MT4 の画面の Navigator から Indicators を右クリックし、Refresh を選択。先ほどコピーした 3_7_sma.ex4Navigatorで確認できるようになるので、右クリックし、Attach to a chart を選択。設定変更のウィンドウが表示され、プリプロセッサ命令で定義した変数の値の変更ができるが、今回はデフォルトのまま OK を選択。

03_02_37sma.tiff

これで2つの移動平均が赤色、青色の実線として上記のようにチャート上に表示される。


おわりに

あとはプログラミングに慣れているユーザなら、 メタトレーダー4 MQL言語リファレンス日本語翻訳マニュアル ver1.1 にある情報を見れば、各種変数、テクニカル指標を組み合わせ、適切な制御構造を組んでいけば、自由に独自指標を作成することができるだろう。

次は自動取引のためのエキスパートシステムプログラムを作成する。


参考文献