FXオートトレードプログラムを開発する会(7)

前回のリンク
次回のリンク

皆さん,こんにちは.
今回は,インディケータの作り方について解説します.

インディケータとは何か

インディケータとは,MQL5における4種類のアプリケーション(Expert Advisor, Indicators, Script, Service)のうちの1つで,オートトレード機能を含まない,特定の入出力機能を持ったアプリケーション(関数のようなもの)です.インディケータにはユーザーが自作するカスタムインディケータ(Custom Indicators)と標準ライブラリで提供されるスタンダードインディケータ(Standard Indicators)があります.よって,基本的には,まず標準ライブラリに欲しいものがないか調べた後,該当するものがなければ自作するという流れがよいでしょう(楽できるところは楽して行きましょう).ここでは,カスタムインディケータを自分で作れるようになるための練習として,ある為替レート(rt)の隣接項の増分(rt[t+1]-rt[t])を計算するインディケータを作成する方法を紹介します.

ある為替レート(rt)の隣接項の増分(rt[t+1]-rt[t])を計算するインディケータを作成する方法

大まかな流れは次の通りです.

  1. カスタムインディケータのテンプレートを利用する
  2. テンプレートに計算処理を書き加える
  3. コンパイルして実行する
  4. 結果を確認する
スポンサーリンク

1. カスタムインディケータのテンプレートを利用する

まず,MT5を開いたら,ツールから”MetaQuotes 言語エディタ”を開きます.

次に,左上にある”新規作成”から”カスタムインディケータ”を選択します.

ファイルの名前を決めます.ここではIndicatorsフォルダ直下に”increment”と入れてみましょう.最終的には,ここで指定した名前にmq5という拡張子が付いたファイル(ここではincrement.mq5)が作られます.また,テンプレートプログラム内の変数名にも影響してきます(ここではIncrementBufferという配列が作られて,それに基づいてテンプレートも作られる)ので,日本語フォントによる命名は避けた方がよいでしょう.著作者とリンク情報は任意です.パラメータは今回のプログラムには必要ないので,指定しません.ちなみに,後からプログラム上でパラメータを設定することもできるので,ここで事前にパラメータを決めておく必要はありません.

引き続いて,カスタムインディケータのイベントハンドラを選択します.どのようなタイミングで計算処理を実行したいか等を決めるのですが,ここではとりあえず上から二番目のものを選択しておきます.

最後に,カスタムインディケータの描画プロパティを指定します.ここでは,”サブウィンドウに表示”にチェックを入れて,赤色実線で画を描くようにします.ラベルには”Increment”と表示させるようにしてみました.このとき,”タイプ”や”カラー”をダブルクリックすると様々な選択肢が現れるので,どのような選択肢があるのかを確認してみるとよいかもしれません.また,ここですべてを決定しなくても,プログラム上でプロパティを変更,設定することもできるので,あまり気にせず先に進みましょう.

ここまで終えると,指定したパスに”increment.mq5″というプログラムが作られます.

作られたプログラムは次のようになっているはずです.

上から簡単に解説すると,6行目から17行目までが事前に設定したプロパティになります.ここの値を変更したり,書き足すことでプロパティ情報を更新できます.

19行目にある配列IncrementBufferはプログラム名を冠した配列ですが,これが一番大切な配列になります.というのも,最終的には,配列IncrementBufferの中身が自動的にプロットされるようになります.26行目のSetIndexBuffer関数は配列IncrementBufferの中身を自動的にプロットするために必要な処理で,一次元のdouble型動的配列であるインディケータ・バッファー配列を第2引数に取り,第1引数には0から始まる整数でそのバッファーに対応付けたいインデックス番号,第3引数にはそのインディケータ・バッファー配列に入れたいデータの種類を指定します.第3引数はデフォルトで”INDICATOR_DATA“が指定されており,これについて公式リファレンスでは”Data to draw (描画するデータ)”と説明されています.つまり,”INDICATOR_DATA”と指定したバッファー配列IncrementBufferには,描画するためのデータを入れていけばよいことがわかります.

スポンサーリンク

2. テンプレートに計算処理を書き加える

次に,実際に増分(Increment)を計算してバッファー配列IncrementBufferに格納する処理を書き加えてみましょう.40行目から42行目にかけて,for文を用いてiが1からrates_totalまでの増分を逐次的に計算しています.rates_totalは入力した為替レートであるprice配列の総データ数です.

3. コンパイルして実行する

最後に,コンパイルしてエラーが出ないことを確認したら,上の緑色丸白色三角形のボタン(実データでデバッグのスタートと解除,F5)を押して実行してみましょう.

ここまでの作業がうまくいっていれば,次のようなチャートが得られるはずです.上段には為替時系列(緑色ロウソク足)とその移動平均線(赤色実線)が表示され,下段にはサブウィンドウとして増分時系列(赤色実線)が表示されます.

このとき使用される為替データはエディタの”ツール/オプション/’デバッグ/プロファイリング'”から次のように確認できます.

4. 結果を確認する

チャートの上で右クリックするとそれぞれのチャートのプロパティを変更することができます.いま,移動平均線は要らないので削除し,ロウソク足の色を見やすく(値上がりしたものは黄色,値下がりしたものは青色で表示)すると,次のようになります.上下のグラフを見比べると,値がよく動くところでは増分時系列の振幅が大きくなっていることがわかります.

まとめ

以上をもって,与えられた為替時系列に対して,その増分を計算するインディケータを開発することができました.既に,簡単なインディケータであれば作れるようになっているはずです.この理解をもとにして,自分の作りたいインディケータを作っていきましょう.

次回のリンクはこちら

コメント

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