パラメーターを変更する方法

Eyecatch MetaTrader 4 プログラム中級編

 今回は、バックテストパラメーターを変更する方法です。

 サンプルプログラムはこちらです。Zip圧縮していますので解凍してご利用ください。

 サンプルプログラムの使い方は、以下の記事で説明しています。 

パラメーターを変更する方法

 バックテストでパラメーターを変更する方法ですが、テスターを開く前に、プログラムで下準備をしておかないといけません。

 まず、int start() の上にグローバル変数と呼ばれるものを作ります。

 グローバル変数とは、普通の変数は毎回int start() が実行されるたびに変数の中身が初期化されるのですが、グローバル変数はint start() が実行されても初期化されずに中の数値がそのまま残ります。

 これを使うことによって、int start() が呼び出されても初期化したくない数値を残すことが出来ます。

 グローバル変数を宣言する場所は、int start() のような関数の中以外なら何処でも良いのですが、基本的に一番上に書きます。

 便利なので、興味がある人は色々と試してみてください。

 グローバル変数を宣言したら、int start() の中などで変数を使ってください。

 オーダー関数のロット数、スリップページ、ストップロス、リミットなどによくグローバル関数が使われいます。

Ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, slippage, Ask -(stoploss * Point), Ask+(takeprofit * Point), "Buy", 10, 0, Red);

 このように、すると後でグローバル変数の中身を変更するだけで、ロット数などを変更することが出来ます。


 次に、このグローバル変数の中身をバックテストで変更するための方法です。

 グローバル変数の宣言の前にextern と付けてください。

 これだけです。

 実に簡単ですね。

 実際に宣言する例を書いておきます。

extern double stoploss = 50;

 こんな感じでコードを書いてください。

 バックテストで変更したいパラメーターに全部extern を付けたら下準備完了です。

 コンパイルした後に、MetaTrader 4テスターを出してください。

テスター画面

 作ったシステムをセットして、画像の赤丸を付けてあるExpert propertiesをクリックして下さい。

 下の画像のようなウィンドウが出てきます。

テスター画面「Testing」タブ

 上のタブのTestingの赤丸の場所で元金の変更が出来ます。

 次に上のタブでパラメーターの入力を開いてください。

テスター画面「パラメーター入力」タブ

 ここで、先程作ったグローバル変数のパラメーターを変更することが出来ます。

 パラメーターを変更するには、変更したいパラメーターのValueを変更してOKを押してください。

 TakeProfitのパラメーターを変更したい場合は、上の画像の赤丸の場所の数値を変更してOKを押してください。

 Saveを選択する必要はありません。

 あとは、バックテストをすればパラメーターが変更されたバックテストの結果を見れます。

 サンプルプログラムでは、移動平均線の短期線、長期戦のパラメーター、オーダーする時のロット数、スリップページ、ストップロス、リミットが変更出来るようになっています。

 コードを見られたい方はサンプルプログラムを御覧下さい。

 サンプルプログラムの注意点ですが、ストップロスとリミットが設定出来るようになっていますが、0を入力すると一切売買が無くなります。

 普通はオーダー関数のストップロスのところに0を入力するとストップロスとリミットの設定が無い状態になるのですが、今回のサンプロプログラムでは

Ask -(stoploss * Point)

と、なっていますので、グローバル関数のstoploss が0の場合はAskだけになり、仕掛けとストップロスの値が同じになってしまいますので、バックテストが正常に作動しません。

 ストップロスとリミットを機能しないようにするには、グローバル変数に設定するストップロスとリミットを絶対に実行されないぐらい高い値にするか、If文で工夫して0で機能しないようにするしかありません。

 If文で機能しないようにするのも、簡単に出来ると思いますので、中途半端が嫌いな人は挑戦してみてください。

 今回はこれで終了です。

注意

内容には注意を払っていますが、保障は出来ません。
実際に運用する場合は、自己責任でお願いします。 

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