メタトレーダーQ&A:エキスパートプログラムで自動売買できない

「FXメタトレーダー入門」読者向けのサービスとして、メタトレーダー全般に関してちょっと注意する点をQ&A形式で記事にしていきます。
まずは、
Q:エキスパートプログラムで自動売買ができないのですが。
という質問です。単に自動売買ができないだけだと様々な理由が考えられます。
最も基本的なものは、メタトレーダーの設定でエキスパートプログラムが利用できない状態になっている、トレードを許可していない状態になっているなどがあります。これらの解決方法については、「FXメタトレーダー入門」の265ページ以降の解説をご覧ください。
ここでは、それ以外の理由として、「カスタム指標としてシグナルを表示させることはできるが、それをエキスパートプログラムにした場合に売買されない」というケースについて見てみます。
まず、サンプルプログラムとして214ページの「MACross_Ind.mq4」を取り上げます。これは単純な移動平均交差システムなので、期間の異なる二つの移動平均の交差で売買シグナルを表示させるものです。
以下のコードは2本の移動平均線を算出する部分です。
for(int i=limit-1; i>=0; i–)
{
BufFastMA[i] = iMA(NULL,0,FastMA_Period,0,MODE_SMA,PRICE_CLOSE,i);
BufSlowMA[i] = iMA(NULL,0,SlowMA_Period,0,MODE_SMA,PRICE_CLOSE,i);
}
ここで、注意するのはiMA()の最後のパラメータ「i」です。これは最新のバーの位置を0、1つ前のバーを1、2つ前のバーを2というように、移動平均を算出する位置を表すものです。
BufFastMA[i]の[]の中の「i」とiMA()の最後のパラメータの「i」が一致していれば、それぞれの「i」の位置で正しく移動平均の値が算出されることになります。
ここで、間違った例として、iMA()の最後のパラメータを「i-10」としてみます。
for(int i=limit-1; i>=0; i–)
{
BufFastMA[i] = iMA(NULL,0,FastMA_Period,0,MODE_SMA,PRICE_CLOSE,i-10);
BufSlowMA[i] = iMA(NULL,0,SlowMA_Period,0,MODE_SMA,PRICE_CLOSE,i-10);
}
これは、iの位置での移動平均を、iから10バーほど右側のバーから過去に遡ったバーにおける値から算出することを意味します。これは見た目としては、元の移動平均線が左に10バー移動した形になります。そうすると、売買シグナルも10バーほど早く出ることになるので、チャート上で見ると、非常に的確に売買シグナルが発生できているように見えます。

しかし、このシグナルはリアルタイムで出せるものでしょうか?答えはNOです。チャートの右端を見てください。

この図では、最新のバーから過去の10本のバーまでは、移動平均が計算できていません。そうなってくると、リアルタイム、つまり最新のバーでシグナルを出せるはずはありません。このシグナルは10バー経過した後に表示される、言わば「後だしジャンケン」のようなものです。
このようなシグナルは、カスタム指標として表示させる場合、プログラム上の問題はありません。しかし、このシステムをエキスパートプログラムとして書いた場合、どうなるでしょうか?
例えば、222ページのエキスパートプログラム「MACross_Exp.mq4」で、
double FastMA1 = iMA(NULL,0,FastMA_Period,0,MODE_SMA,PRICE_CLOSE,1-10);
double SlowMA1 = iMA(NULL,0,SlowMA_Period,0,MODE_SMA,PRICE_CLOSE,1-10);
double FastMA2 = iMA(NULL,0,FastMA_Period,0,MODE_SMA,PRICE_CLOSE,2-10);
double SlowMA2 = iMA(NULL,0,SlowMA_Period,0,MODE_SMA,PRICE_CLOSE,2-10);
と書いてみます。先ほどと同じく、iMA()の最後のパラメータをそれぞれ -10 します。これをストラテジーテスターで動かしても、全く売買はされません。自動売買では常に最新のバーの位置で売買することになるので、最新のバーで売買シグナルが出せないシステムでは、当然ながら一切売買できないということになります。
ここでのエキスパートプログラムで自動売買のできない理由は、「最新のバーでシグナルを発生するシステムになっていない」ということだったわけです。
この手の間違いは、ネット上に公開されているシグナル指標をそのままエキスパートプログラムに移行しようとする場合によく陥ります。しかし、それもそのはずで、もし、このシグナル指標から移動平均線が消えていて、シグナルの場所だけ表示されていたらどうでしょう? 特に初心者にとっては、プログラムを見てこれが自動売買できないということがすぐにわかるでしょうか?
実際に、そういうプログラムを意図的に公開、もしくは販売しているケースもあるのです。そういう悪質なプログラムに引っかからないためにも、シグナル指標プログラムやエキスパートプログラムにおいて、シグナルを発生させる位置や、そのシグナルの計算のためにどの範囲のデータを使うかということを正確に理解しなければいけないのです。
にほんブログ村 為替ブログへ上位ランキングのブログ記事はこちら
マネポケ金融投資ブログランキングここにも為替ブログ記事が満載!



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