シグナル指標プログラムを使ってエキスパートプログラムを作る

私はこのブログ、「FXメタトレーダー入門」、先日のODLのセミナーなどで、MT4でのシステム開発の際に、いきなりエキスパートプログラム(EA)を作る前に、カスタム指標プログラムとしてシグナルをチャートに表示させるシグナル指標プログラムを作成することを推奨してきました。
それはシステム設計時に、利用したテクニカル指標とシグナルの位置を視覚的に確認することができ、さらに後でエキスパートプログラムの動作確認を確実に行うこともできるからです。MT4に限らず、何かとバグが付き物のプログラム開発において、できるだけ効率良く、正確なプログラムを作成することは重要な要素です。
今回は、シグナル指標からエキスパートプログラムをさらに効率よく正確に作成するための手法を紹介します。
まず、シグナル指標プログラムが「FXメタトレーダー入門」の214ページのように作られているとします。ファイル名は「MACross_Ind.mq4」です。
このプログラムでは、以下のように4つの指標バッファのうち、2番目に買いシグナル、3番目に売りシグナルが割り当てられています。
SetIndexBuffer(0, BufFastMA);
SetIndexBuffer(1, BufSlowMA);
SetIndexBuffer(2, BufBuy);
SetIndexBuffer(3, BufSell);

また、パラメータとして以下のように移動平均の二つの期間が extern 宣言されていることに注意してください。
extern int FastMA_Period = 10;
extern int SlowMA_Period = 40;

BufBuy、BufSell には、初期値として EMPTY_VALUE という何も表示しないという特別な値が代入されており、シグナルが発生した時に Open[i] という現在のバーの始値の値が代入され、チャート上に矢印の記号が表示されるようになっています。
このシグナルをそのまま利用するためのエキスパートプログラムの書き方を見ていきます。
「FXメタトレーダー入門」の222ページのプログラムを基にして変更する箇所を以下に示します。変更するのは start()関数だけです。

ここでは移動平均の計算は行わず、BuySignal、SellSignal という変数に、iCustom()という関数を使って既存のシグナル指標プログラムのシグナルだけを取得します。
iCustom()は以下のような複数個のパラメータを取ります。
double iCustom( string symbol, int timeframe, string name, …, int mode, int shift)
symbol は通貨ペア名、timeframe はタイムフレームで他のテクニカル指標関数と同じです。
次の name のところが、カスタム指標プログラムのファイル名の主部(.mq4を除いた部分)を表します。
“MACross_Ind.mq4” の場合、“MACross_Ind” となります。
その次の とある部分には、カスタム指標プログラムのパラメータ(extern 宣言された変数に対応)
に渡す値が入ります。値を渡す必要がなければ省略も可能です。この例では、FastMA_Period, SlowMA_Period を指定しています。
そして mode というのが、カスタム指標プログラム中の何番目のバッファの値を取りだすのかという番号を表します。
カスタム指標中で買いシグナルBufBuyが2番目、売りシグナルBufSellが3番目だったので、それぞれ2と3を代入します。
最後の shift は時間位置のシフトを表します。ここでは同じ位置にシグナルを発生させるのでとしています。
実際のオーダーを出す条件としては、BuySignal、SellSignal にシグナルとしての値が入っているかどうか、つまり無シグナルの EMPTY_VALUE 以外かどうかの判定だけを行います。
これで、MACross_Ind.mq4 のシグナルをもとにしたエキスパートプログラムが作成できました。
この手法は別のプログラムの内容を連携させながら作成するので、ちょっと初心者には難しいかと思い、「FXメタトレーダー入門」には掲載しませんでした。
しかし、このレベルのエキスパートプログラムが理解できれば、シグナル指標プログラムのファイル名とパラメーターを差し替えるだけで、色々なシステムのエキスパートプログラムが簡単に作れるし、ストラテジーテスターで実行した後にチャートを開いた場合(237ページ参照)エキスパートでの売買ポイントと、シグナル指標のテクニカル指標やシグナルが同時に表示されるため、動作確認が一目でできるというメリットもあります。
システム設計時にまずシグナル指標プログラムを作成することをお薦めするのは、このようにエキスパートプログラムとうまく連携が取れる仕組みがあるからなのです。
にほんブログ村 為替ブログへ上位ランキングのブログ記事はこちら



コメントは受け付けていません