English Русский 中文 Español Deutsch Português
MT4のストラテジーテスターでバイナリーオプションを行う方法

MT4のストラテジーテスターでバイナリーオプションを行う方法

MetaTrader 4 | 30 1月 2017, 08:59
47 270 0
Martin Amiri
Martin Amiri

目次

1. イントロダクション
2. インストール
3 バイナリ オプションストラテジー例
3.1. バイナリ オプションストラテジーの決定
3.2 バイナリ オプションストラテジーの作成
3.2.1 インプットパラメータ
3.2.2 Binary-Options-Strategy-Libraryの読み込み
3.2.3 CallStrategy() の追加
3.2.4 CheckMyRules() ・ ヘルプ関数の実装
3.2.5 デバッグ値の出力
3.2.6. 外部インジケーター (ex4 ファイル) の使用
3.3. コードの完成
4 バックテスト (ビデオ) の実行
5 フォワード テストを実行
6. FAQ
7. その他


1. イントロダクション

この記事では、バイナリオプションストラテジーを構築し、MT4 のストラテジーテスターで検証する方法を紹介します。デフォルトのMT4 のストラテジーテスターでは、EAとインジケーターをテストできますが、バイナリ オプションは扱うことができません。MT4 のストラテジーテスターでバイナリー オプションストラテジーをテストすることが、バイナリ オプションストラテジーテスターの役割です。

内容は次のとおりです。

バイナリ-オプション-ストラテジ-テスターで (上の画像の青としてマーク) 、仮想的に注文し、バックテストやフォワードのテストと結果を介して、 (上の画像で赤色でマーク) インジケータに格納されているバイナリ オプションストラテジーを構築する例です。

注意事項:過去のデータでのバックテストが決して未来においても正しいとは限りません。しかし、おおよその値を考慮することができます。
。バックテストの質は過去のデータの質によって異なります。したがって高品質なデータセットを使用することを強くお勧めします!


2. インストール

マーケットプレイスからバイナリ オプションストラテジーテスターをダウンロードします。
MT4のストラテジーテスターでバイナリー オプションをテストするフレームワーク。

なぜバイナリ オプションストラテジーテスター ユーティリティが必要なのでしょうか?
バイナリ オプションストラテジーは、仮想トレードを配置し、 (バイナリ-オプション-ストラテジー-ライブラリ) を介してバイナリ オプションストラテジーテスターの関数を呼び出します。製品にライセンスがある場合、MQL4に関連したものだけです。したがってバイナリ オプションストラテジーを購入しなければなりません。

BinaryOptionsStrategyLibrary.mqhを無料ダウンロードし、\Include フォルダーに配置します ([MT4 にパス] \MQL4\Include):
無料ライブラリは、バイナリ オプションストラテジーをシンプルに構築して、バイナリ オプションストラテジーテスターと通信する関数を提供します。詳細については、ライブラリのバイナリ オプションストラテジーライブラリを参照してください。

KVO.mq4インジケーターを無料ダウンロードし、\Indicators\Downloads にコンパイル済みの KVO.ex4 ファイルを配置します。 ([MT4パス] \MQL4\Indicators\Downloads):
KVOインジケーターを使用例として、外部評価インジケーターおよびex4 のアクセスを表示します。「3.2.6 外部インジケーター (ex4 ファイル) の使用」https://www.mql5.com/zh/code/8677で詳細をご確認ください。

セクション3に移りましょう。次の例のコードをダウンロードするだけです。

オプションとして、 BinaryOptionsStrategyExample.mq4をダウンロードし、\Indicators にコンパイル済みの BinaryOptionsStrategyExample.ex4 ファイルを配置します。 ([MT4パス] \MQL4\Indicators):
このバイナリー オプションストラテジーの例のコードをダウンロードしてください。

.mq4 をコンパイルするには、(KVO.mq4 と BinaryOptionsStrategyExample.mq4 - バイナリ-オプション-ストラテジー-Library.mqh) を メタエディターで開き、「コンパイル」をクリックしてください。


3. バイナリーオプションのストラテジーの例

次の手順は、バイナリ オプションストラテジーテスターと通信するインジケーターを作成する方法です。自分で構築するか、 BinaryOptionsStrategyExample.mq4のコードをダウンロードできます。

注意事項:このストラテジーは、収益性の高いバイナリー オプションストラテジーではありません!バイナリ オプションストラテジーテスター ユーティリティと通信するためのインジケーターの一例です。もちろん自分で収益性の高いストラテジーを構築しなければなりません。しかし、このユーティリティのテストやバイナリー オプションストラテジーを改善するのに役立ちます。


3.1 バイナリー オプションストラテジーを定義

まず第一に、 ストラテジーと可変値 (インプットパラメータ) を定義しなければなりません。MQL4ドキュメントでは、 iCustom でできるすべてのテクニカル指標を示しています: https://docs.mql4.com/indicators

単純移動平均のクロスを利用したストラテジーを作成しましょう。マニュアルで移動平均の値を得ることができます。: https://docs.mql4.com/indicators/ima

さらに言うと、 (短期・長期)MAの平均期間の値を選択できます。シンボル、期間シフトなど、その他の値はテストケース (例えばシンボル上、テスターを実行) に依存し、自動的に設定される必要があります。したがって、基本的には移動平均の次の変数を必要します。

int ma_period
int ma_method
int applied_price

クロスをチェックする 2 つの移動平均と、 インプットパラメータを必要します。

int period_fast        =  5;
int period_slow        = 10;
int method_both        =  0; 
int applied_price_both =  0; 


3.2 バイナリー オプションストラテジーを作成

バイナリ オプションストラテジーテスターを実行しているグラフにドラッグするインジケーターを作成する必要があります。

メタエディターを開きます。 (MT4 で「MetaQuotes メタエディター」->「ツール」をクリック、または F4 を押します)

メタエディタ

MQLウィザードが表示されます。空のインジケーターを作成し、「次へ」をクリックして「カスタム インジケーター」を選択します。

エディタのカスタム インジケータ

"追加"ボタンをクリックして名前、著作権だけでなく、インプットパラメータの種類と既定値 (初期値) のリンクをエントリーし、「次へ」を押してください。

エディタのカスタム インジケーターの値

イベント ハンドラーに刻むごとに のストラテジーを確認するイベントが必要です。これは"OnCalculate"なので、チェック ボックスを選択します。「次へ」を押します。

エディタのカスタム インジケーターのイベント

デバッグ値を出力する別のウィンドウが必要です。「別ウィンドウでインジケータ」のチェック ボックスを選択します。「完了」を押してください。

言語エディターのカスタム インジケーターのプロパティ

インジケータの最初のコードが表示されます。

//+------------------------------------------------------------------+
//|                                 BinaryOptionsStrategyExample.mq4 |
//|                                       Copyright 2016, __martin__ |
//|                         https://www.mql5.com/zh/users/__martin__ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, __martin__"
#property link      "https://www.mql5.com/zh/users/__martin__"
#property version   "1.00"
#property strict
#property indicator_separate_window
//---インプットパラメータ
input int      period_fast=5;
input int      period_slow=10;
input int      method_both=0;
input int      applied_price_both=0;
//+------------------------------------------------------------------+
//カスタム インジケーター初期化関数 |
//+------------------------------------------------------------------+
intOnInit()
  {
//---インジケーター バッファ マッピング
  
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
intOnCalculate(const int rates_total
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
  
//---prev_calculated の戻り値
   return(rates_total);
  }
//+------------------------------------------------------------------+


3.2.1 インプットパラメータ

MQLウィザードで初期のインプットパラメータを作成し、次の手順で強化していきます。 (3.2 作成バイナリ オプションストラテジーを参照してください)

適用価格と平均インプットパラメータの移動平均法の int 値をエントリーする必要性を避けるために、method_both と applied_price_both の型は、既定値を持つ列挙体の型を int から変更されます。

ENUM_MA_METHOD: https://docs.mql4.com/constants/indicatorconstants/enum_ma_method
ENUM_APPLIED_PRICE: https://docs.mql4.com/constants/indicatorconstants/prices#enum_applied_price_enum

さらにインプットパラメータのコメントは変数名ではなくラベルとしてコメント表示に追加されます。

...

//---インプットパラメータ
input int                period_fast        =  5;           //短期MAの値
input int                period_slow        = 10;           //長期MAの値
input ENUM_MA_METHOD     method_both        = MODE_SMA;     //MA の方法
input ENUM_APPLIED_PRICE applied_price_both = PRICE_CLOSE;  //MAの適用価格

...

このインプットパラメータだけでなく、インプットパラメータの「ラベル」がドロップダウン リストで提供されます。

バイナリー オプションストラテジーのインプットパラメータ


3.2.2 バイナリ-オプション-ストラテジー-ライブラリをインクルード

すでにダウンロードしてライブラリに格納されている場合、2を参照してください。インストール) \Include フォルダにライブラリを入れることができます ([MT4パス] \MQL4\Include)。

//+------------------------------------------------------------------+
//|                                 BinaryOptionsStrategyExample.mq4 |
//|                                       Copyright 2016, __martin__ |
//|                         https://www.mql5.com/zh/users/__martin__ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, __martin__"
#property link      "https://www.mql5.com/zh/users/__martin__"
#property version   "1.00"
#property strict
#property indicator_separate_window

#include<BinaryOptionsStrategyLibrary.mqh>

//---インプットパラメータ

...
このライブラリは上のような例でのみ有効です。(MT4 の \Include フォルダーに配置した場合)
ライブラリの内容を変更する必要はありません!

バイナリ-オプション-ストラテジー-ライブラリは、2つの新しいパラメータとインプットパラメータを強化します。

  • 1つのロウソク足につき2回以上トレードしないようにします。
  • 新しいロウソク足の初めにだけチェックします。

バイナリー オプションストラテジーのインプットパラメータの強化


3.2.3 CallStrategy() の追加

CallStrategy () の呼び出しを追加-新しいティックごとにストラテジーを呼び出すストラテジーインジケーターの OnCalculate() 関数。CallStrategy() は、上記のような inlcuded があるバイナリ オプションストラテジーライブラリにあります。

...

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---

   CallStrategy(); //Call the strategy, function is locatet in BinaryOptionsStrategyLibrary.mqh (included above)

//---prev_calculated の戻り値

   return
(rates_total);
  }
//+------------------------------------------------------------------+

CallStrategy ()-バイナリ-オプション-ストラテジー-ライブラリ内の関数は、バイナリー オプションストラテジーの条件の場所、インジケーターの名前、 CheckMyRules() 関数を呼び出します
。したがってバイナリ オプションストラテジーのインジケーターで CheckMyRules() 関数を実装する必要があります


3.2.4 CheckMyRules() とヘルプ関数を実装

CheckMyRules ()-関数は、バイナリ オプションストラテジーライブラリを介してと呼ばれるストラテジーの条件を実装します。ヘルプ関数 GetValuesForMA() から移動平均の値を考慮しながら if 条件を比較する変数に格納されています。


...

//---インプットパラメータ
input int                period_fast        =  5;           //短期MA
input int                period_slow        = 10;           //長期MA
input ENUM_MA_METHOD     method_both        = MODE_SMA;     //MAのメソッド
input ENUM_APPLIED_PRICE applied_price_both = PRICE_CLOSE;  //MA 適用価格

...

//+------------------------------------------------------------------+
//ここでトレードルールは - 以下の例を参照してください。 |
//ストラテジーテスター でトレードするにはこの関数を呼び出します。 |
//禁止事項: |
//-関数の名前変更 |
//-パラメータの追加 例えば CheckMyRules(int a) |
//-関数の戻り値の型の変更、例えば int CheckMyRules() |
//+------------------------------------------------------------------+
void CheckMyRules()
  {
  
   //シフト値を保存 (現在ロウソク足)現在のロウソク足、-> =
   //以下を参照してください-GetValueForMA()
   double emaSlow_Current = GetValueForMA(period_slow, 0);
   double emaFast_Current = GetValueForMA(period_fast, 0);

   //Store MA values with shift=1 (past candle) -> last candle,
   //ヘルプ関数を以下を参照してください-GetValueForMA()
   double emaSlow_Past = GetValueForMA(period_slow, 1);
   double emaFast_Past = GetValueForMA(period_fast, 1);

   if(emaFast_Past > emaSlow_Past
   && emaFast_Current < emaSlow_Past) //長期MA と短期MA がクロスするかチェックしてください
     {
      PlaceTrade(OP_SELL); //売りトレード BinaryOptionsStrategyFunctions.mqh
     }
  
   if(emaFast_Past < emaSlow_Past
   && emaFast_Current > emaSlow_Past) //長期MA と短期MAがクロスするかチェックしてください
     {
      PlaceTrade(OP_BUY); //買いトレード BinaryOptionsStrategyFunctions.mqh
     }
  
  }

//+------------------------------------------------------------------+
//下の例を参照してください |
//+------------------------------------------------------------------+
//---
//+------------------------------------------------------------------+
//期間、メソッド、適用価格、シフトの MA の値を取得します。 |
//| 詳細は https://docs.mql4.com/indicators/ima    |
//+------------------------------------------------------------------+
double GetValueForMA(int _period,int _shift)
  {
   return iMA(NULL,0,_period,0,method_both,applied_price_both,_shift);
  }
 


3.2.5 Debug の値をPrint

PrintDebugValue() のプリント アウトは、テスターの実行中に値をデバッグします。次の例では、移動平均がラベルとして出力されます。


...

//---インプットパラメータ
input int                period_fast        =  5;           //短期MA
input int                period_slow        = 10;           //長期MA
input ENUM_MA_METHOD     method_both        = MODE_SMA;     //MAのメソッド
input ENUM_APPLIED_PRICE applied_price_both = PRICE_CLOSE;  //MA 適用価格

...

//+------------------------------------------------------------------+
//ここでトレードルールは - 以下の例を参照してください。 |
//ストラテジーテスター でトレードするにはこの関数を呼び出します。 |
//禁止事項: |
//-関数の名前変更 |
//-パラメータの追加 例えば CheckMyRules(int a) |
//-関数の戻り値の型の変更、例えば int CheckMyRules() |
//+------------------------------------------------------------------+
void CheckMyRules()
  {
  
   //Store MA values with shift=0 (current candle) -> current candle,
   //以下を参照してください-GetValueForMA()
   double emaSlow_Current = GetValueForMA(period_slow, 0);
   double emaFast_Current = GetValueForMA(period_fast, 0);

   //シフト値を保存 shift=1 (past candle) -> last candle
   //以下を参照してください-GetValueForMA()
   double emaSlow_Past = GetValueForMA(period_slow, 1);
   double emaFast_Past = GetValueForMA(period_fast, 1);

   PrintDebugValue("emaSlow_Current: ",(string)emaSlow_Current,0); //ラベルとライン 0 の値
   PrintDebugValue("emaFast_Current: ",(string)emaFast_Current,1); //ラベルとライン 1 の値
   PrintDebugValue("emaSlow_Past: ",(string)emaSlow_Past,2);       //ラベルと ライン2の値
   PrintDebugValue("emaFast_Past: ",(string)emaFast_Past,3);       //ラベルと ライン3の値

   if(emaFast_Past > emaSlow_Past
   && emaFast_Current < emaSlow_Past) //長期MAが短期MA を越えるかどうかチェックしてください
     {
      PlaceTrade(OP_SELL); //売りトレード BinaryOptionsStrategyFunctions.mqh
     }
  
   if(emaFast_Past < emaSlow_Past
   && emaFast_Current > emaSlow_Past) //長期MA が短期MA を越えるかどうかチェックしてください
     {
      PlaceTrade(OP_BUY); //買いトレード BinaryOptionsStrategyFunctions.mqh
     }
  
  }

//+------------------------------------------------------------------+
//下の例を参照してください |
//+------------------------------------------------------------------+
//---

//+------------------------------------------------------------------+
//期間、メソッド、適用価格、シフトの MA の値を取得します。 |
//| 詳細は https://docs.mql4.com/indicators/ima    |
//+------------------------------------------------------------------+
double GetValueForMA(int _period,int _shift)
  {
   return iMA(NULL,0,_period,0,method_both,applied_price_both,_shift);
  }
 


3.2.6 外部インジケーター (ex4 ファイル) の使用

コンパイル済みの ex4-ファイルが存在する場合でも、アクセスできます。

ラインが0以上で買い、0以下で売り取引する KVO インジケーター https://www.mql5.com/zh/code/8677を考えましょう。KVO.mq4インジケーターをダウンロードし、コンパイル (ex4 ファイル)し、\Indicators\Downloads に ([MT4 にパス] \MQL4\Indicators\Downloads)保存します。

コンパイルするには、メタエディタのコンパイルをクリックして、MT4 を再起動します。

まず、アクセスに関連する値が格納されているバッファを識別しなければなりません。したがって、使用するインジケーターのすべてのバッファを表示し、KVO インジケーターをドラッグします。データ ウィンドウでマウスが通過した期間のインジケーターのバッファ値が表示されます。

外部インジケーター バッファと値

データ ウィンドウのラベルは、インジケーターの 2 番目のバッファ値のシグナル線を告げています。インジケーターのバッファにラベルが設定されていない場合、グラフやインジケーターにクロスの下で表示されている値を持つバッファの値を比較することによって右の1つを見出すことができます。バッファ値が0 で始まるということは、値1がバッファ0となり、値2がバッファ2となります。

次に、外部インジケータにアクセスするための、すべてのインプットパラメータを知らなければなりません。すべてのインプットパラメータを参照してください。

KVO のインプットパラメータ

(既定の) インジケーターにアクセスする値: 34、55、13。( iCostumに基づいて) 最後のロウソクの値のインジケーターのパラメーターを持つ値を取得する可能性を提供します。さらに、インジケーターの値をバッファに格納し、ストラテジーの if 条件を強化します。


...

//---インプットパラメータ
input int                period_fast        =  5;           //短期MA
input int                period_slow        = 10;           //長期MA
input ENUM_MA_METHOD     method_both        = MODE_SMA;     //MAのメソッド
input ENUM_APPLIED_PRICE applied_price_both = PRICE_CLOSE;  //MA 適用価格

...

//+------------------------------------------------------------------+
//ここでトレードルールは - 以下の例を参照してください。 |
//ストラテジーテスター でトレードするにはこの関数を呼び出します。 |
//禁止事項: |
//-関数の名前変更 |
//-パラメータの追加 例えば CheckMyRules(int a) |
//-関数の戻り値の型の変更、例えば int CheckMyRules() |
//+------------------------------------------------------------------+
void CheckMyRules()
  {
  
   //Store MA values with shift=0 (current candle) -> current candle,
   //以下を参照してください-GetValueForMA()
   double emaSlow_Current = GetValueForMA(period_slow, 0);
   double emaFast_Current = GetValueForMA(period_fast, 0);

   //シフト値を保存 shift=1 (past candle) -> last candle
   //以下を参照してください-GetValueForMA()
   double emaSlow_Past = GetValueForMA(period_slow, 1);
   double emaFast_Past = GetValueForMA(period_fast, 1);

   //現在のロウソク (シフト 0) から KVO インジケーターのシグナル値 (バッファ 1) を格納
   double kvoSignal = GetValuesFromIndicator__KVO__(1,0);

   PrintDebugValue("emaSlow_Current: ",(string)emaSlow_Current,0); //ラベルとライン0 の値
   PrintDebugValue("emaFast_Current: ",(string)emaFast_Current,1); //ラベルとライン1 の値
   PrintDebugValue("emaSlow_Past: ",(string)emaSlow_Past,2);       //ラベルと ライン2の値
   PrintDebugValue("emaFast_Past: ",(string)emaFast_Past,3);       //ラベルと ライン3の値

   if(emaFast_Past > emaSlow_Past
   && emaFast_Current < emaSlow_Past //長期MA が短期MA を越えるかどうかチェックしてください
   && kvoSignal < 0) //KVO のシグナル値が 0 以下か確認してください
     {
      PlaceTrade(OP_SELL); //売りトレード BinaryOptionsStrategyFunctions.mqh
     }
  
   if(emaFast_Past < emaSlow_Past
   && emaFast_Current > emaSlow_Past //長期MA が短期MA を越えるかどうかチェックしてください
   && kvoSignal > 0) //KVO のシグナル値が 0 以上か確認してください
     {
      PlaceTrade(OP_BUY); //買いトレード BinaryOptionsStrategyFunctions.mqh
     }
  
  }

//+------------------------------------------------------------------+
//下の例を参照してください |
//+------------------------------------------------------------------+
//---

//+------------------------------------------------------------------+
//期間、メソッド、適用価格、シフトの MA の値を取得します。 |
//| 詳細は https://docs.mql4.com/indicators/ima    |
//+------------------------------------------------------------------+
double GetValueForMA(int _period,int _shift)
  {
   return iMA(NULL,0,_period,0,method_both,applied_price_both,_shift);
  }

//+------------------------------------------------------------------+
//外部インジケーターから値を取得する例 |
//| 参照 https://docs.mql4.com/indicators/icustom                     |
//パラメータ: |
//int _buffer - インジケーター バッファ (0 で始まる) |
//int _shift -; シフトする値、0 = 現在のロウソク 1 = 前のページ ロウソク足 |
//+------------------------------------------------------------------+
double GetValuesFromIndicator__KVO__(int _buffer, int _shift=0) //Change "__KVO__" to indicator name
  {

   return (
            iCustom (
                      NULL,                      //変更不要 選択した現在の期間に対して NULL
                      0,                         //変更不要 選択された現在のシンボルの場合は 0

                      //BEGIN EDIT
                      "\\Downloads\\KVO.ex4",    //ファイルパスとインジケーター (*.ex4 ファイル) のファイル名
                      //インジケーターエントリー
                      34,
                      55,
                      13,
                      //インプットの終わり
                      //編集終了

                      _buffer,                   //バッファのインデックス (0 から始まる)、_buffer 関数パラメータの変更不要
                      _shift                     //シフト (現在のロウソクの 0) _shift 関数パラメータの変更不要
                    )
          );

  }
 

また、使用されている KVO インジケーターの値と のストラテジーインジケーターのインプットパラメータを強化し、ヘルプ関数で変数に値を設定することが可能です。このチュートリアルでは、単なる例ですが、このバリアントは示しません。


3.3 コードの完成

下記は、すべての手順をテストし、結果をグラフに表示する準備ができた、バイナリ オプションストラテジー例の全体コードです。

//+------------------------------------------------------------------+
//|                                 BinaryOptionsStrategyExample.mq4 |
//|                                       Copyright 2016, __martin__ |
//|                         https://www.mql5.com/zh/users/__martin__ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, __martin__"
#property link      "https://www.mql5.com/zh/users/__martin__"
#property version   "1.00"
#property strict
#property indicator_separate_window

#include<BinaryOptionsStrategyLibrary.mqh>

//+------------------------------------------------------------------+
//インプットパラメータ - 以下の例を参照してください |
//+------------------------------------------------------------------+
//---インプットパラメータ
input int                period_fast        =  5;           //短期MA の値
input int                period_slow        = 10;           //長期MAの値
input ENUM_MA_METHOD     method_both        = MODE_SMA;     //MAのメソッド
input ENUM_APPLIED_PRICE applied_price_both = PRICE_CLOSE;  //MA 適用価格

//+------------------------------------------------------------------+
//カスタム インジケーター初期化関数 |
//+------------------------------------------------------------------+
intOnInit()
  {
//---インジケーター バッファ マッピング

//---
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//カスタム インジケーター関数 |
//+------------------------------------------------------------------+
intOnCalculate(const int rates_total
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---

   CallStrategy(); //ストラテジーを呼び出す関数です (上記付属) BinaryOptionsStrategyLibrary.mqh の locatet

//---prev_calculated の戻り値
   return(rates_total);
  }

//+------------------------------------------------------------------+
//以下の例を参照してください。 |
//ストラテジーテスター のトレードするにはこの関数を呼び出します。 |
//禁止事項: |
//-関数の名前の変更 |
//-パラメータの追加、例えば CheckMyRules(int a) |
//-関数の戻り値の型の変更、例えば int CheckMyRules() |
//+------------------------------------------------------------------+
void CheckMyRules()
  {
  
   //Store MA values with shift=0 (current candle) -> current candle,
   //以下を参照してください-GetValueForMA()
   double emaSlow_Current = GetValueForMA(period_slow, 0);
   double emaFast_Current = GetValueForMA(period_fast, 0);

   //Store MA values with shift=1 (past candle) -> last candle,
   //以下を参照してください-GetValueForMA()
   double emaSlow_Past = GetValueForMA(period_slow, 1);
   double emaFast_Past = GetValueForMA(period_fast, 1);
  
   //現在のロウソク (シフト 0) から KVO インジケーターのシグナル値 (バッファ 1) を格納
   double kvoSignal = GetValuesFromIndicator__KVO__(1,0);
  
   PrintDebugValue("emaSlow_Current: ",(string)emaSlow_Current,0); //ラベルとライン0 の値
   PrintDebugValue("emaFast_Current: ",(string)emaFast_Current,1); //ラベルとライン1 の値
   PrintDebugValue("emaSlow_Past: ",(string)emaSlow_Past,2);       //ラベルと ライン2の値
   PrintDebugValue("emaFast_Past: ",(string)emaFast_Past,3);       //ラベルと ライン3の値

   if(emaFast_Past > emaSlow_Past
   && emaFast_Current < emaSlow_Past    //長期MA が短期MA を越えるかどうかチェックしてください
   && kvoSignal < 0)                    //KVO のシグナル値が 0以下か確認してください
     {
      PlaceTrade(OP_SELL);              //売りトレード BinaryOptionsStrategyLibrary.mqh
     }
  
   if(emaFast_Past < emaSlow_Past
   && emaFast_Current > emaSlow_Past    //長期MA が短期MA を越えるかどうかチェックしてください
   && kvoSignal > 0)                    //KVO のシグナル値が 0 以上確認してください
     {
      PlaceTrade(OP_BUY);               //買いトレード BinaryOptionsStrategyLibrary.mqh
     }
  
  }

//+------------------------------------------------------------------+
//下の例を参照してください |
//+------------------------------------------------------------------+
//---

//+------------------------------------------------------------------+
//期間、メソッド、適用価格、シフトの MA の値を取得します。 |
//| 詳細は https://docs.mql4.com/indicators/ima    |
//+------------------------------------------------------------------+
double GetValueForMA(int _period,int _shift)
  {
   return iMA(NULL,0,_period,0,method_both,applied_price_both,_shift);
  }

//+------------------------------------------------------------------+
//外部インジケーターから値を取得する例 |
//| 参照 https://docs.mql4.com/indicators/icustom                     |
//パラメータ: |
//int _buffer - インジケーター バッファ (0 で始まる) |
//int _shift -; シフトする値0 = 現在のロウソク 1 = 前のロウソク足 |
//+------------------------------------------------------------------+
double GetValuesFromIndicator__KVO__(int _buffer, int _shift=0) //インジケーター名"__KVO__"に変更
  {
   return (
            iCustom (
                      NULL,                      //変更不要 選択した現在の期間
                      0,                         //変更不要 選択された現在のシンボルの場合は 0
                  
                      //BEGIN EDIT
                      "\\Downloads\\KVO.ex4",    //ファイルパスとインジケーター (*.ex4 ファイル) のファイル名
                      //BEGIN INDCATORS INPUTS
                      34,
                      55,
                      13,
                      //インプットの終わり
                      //編集の終わり
                  
                      _buffer,                   //バッファのインデックス (0 から始まる)、_buffer 関数パラメータの変更不要
                      _shift                     //シフト (現在のロウソクの 0) _shift 関数パラメータの変更不要
                    )
          );
  }
//+-----------------------------------------------------------------+


4. バックテスト (ビデオ) を実行します。

次のビデオは、MT4 のストラテジーテスターでバイナリー オプションストラテジーのバックテストを実行する様子を示しています。

  • MT4 のストラテジーテスターでバイナリ オプションストラテジーテスターを起動し、エントリーのパラメータを設定
  • バイナリ オプションのストラテジーインジケーターをドラッグ、インプットパラメータと「許可する外部EAインポート」「共通」タブでチェックを設定
  • テスター実行中にその値を表示するグラフに使用されるインプットパラメータをドラッグします。(省略可能)
  • ストラテジーテスター (オプション) の [一時ストップ] ボタンを使用してテンプレートのすべての設定を保存します。
  • ストラテジーテスター チャートでバイナリー オプションストラテジーの結果を見ましょう。 


5. フォワード テストを実行します。

ライブでテストする際は、単にチャートにインジケーターをドラッグします。

  • バイナリ オプションストラテジーテスター ユーティリティをドラッグし、インプットパラメータを設定します。
  • バイナリ オプションのストラテジーインジケーターをドラッグ、インプットパラメータと「許可する外部EAインポート」「共通」タブでチェックを設定
  • フォワード テスト (省略可能) 実行中に、その値を表示するグラフに使用されるインプットパラメータを使用するインジケーターをドラッグします。
  • すべての設定で再度テストを実行するためのテンプレート設定を保存します。
  • バイナリ オプションストラテジーの結果を参照してください。


6. FAQ

問: なぜ収益性の低いバイナリー オプションストラテジーの例を使ったのですか?
答: これは単に例であり、どのようにストラテジーを構築するかを示したものにすぎないからです。

問: バイナリ オプションストラテジーテスターで、「配列範囲外」というエラーが出て、ストップします。なぜでしょう?
答: バイナリ オプションストラテジーテスターは、チャートの状態を分析するために、エラーを吐き出すことがあります。これを止める場合は、設定でオフにしてください。

問: インジケータをドラッグした後に矢印が表示されません。何が起こったのでしょうか?
答: グラフのストラテジーインジケーターをドラッグして、「共通」のタブ「外部EAのインポートを許可する」を有効にする必要があります (エラーが表示されます)。

問: 「外部EAインポートを許可」にし、インジケーターをドラッグしたのに矢印が表示されません。なぜでしょう?
答: バーチャルトレードを実行するバイナリ-オプション-ストラテジー-テスターの関数を呼び出す必要があります。製品にライセンスがある場合、その元でのみ稼働するものもあります。したがって、有料版を買う必要があります。

問: 「呼び出せません」というエラーが表示され、インジケータをドラッグしても矢印が表示されません。何ができるでしょう?
答: BinaryOptionsStrategyLibrary.mqhの最新バージョン (大きい v1.00) を使用します。BinaryOptionsStrategyLibrary.mqh のコードのバージョンのタグをチェックし、 BinaryOptionsStrategyLibrary の更新履歴 v1.01を参照してください。

問: ストラテジーテスターのタブ「結果」、「グラフ」、「レポート」に何も表示されません。どこで結果を見ることができるでしょうか?
答: MT4 のストラテジーテスターではバイナリ オプションは扱えないので、そのタブは無効です。したがって、このユーティリティは損益を計算し、グラフに結果を出力します。


7. その他

MT4のストラテジーテスターでバイナリーオプションの自動売買を行うということが、このユーティリティのテーマでした。多くのコンセプトと実装だけでなく、バイナリ オプションストラテジーテスターのドキュメントに多くの時間を費やして開発しました。おそらく、もっと良い方法がどこかにあり、ニーズに合うように改善されることでしょう。改善のアイデアのご連絡をお待ちしています!
 

MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/2820

添付されたファイル |
インジケータのバッファや配列を使わずにヒストグラムを形成する統計分布 インジケータのバッファや配列を使わずにヒストグラムを形成する統計分布
この記事では、グラフィックメモリの助けを借りて、相場の統計的分布ヒストグラムをプロットする可能性について説明します。サンプルのヒストグラムと mql5のグラフィカルオブジェクトの「非表示」関数があります。
GUIによる汎用的なオシレーター GUIによる汎用的なオシレーター
この記事では、独自のグラフィカルインターフェイスを使用して、よくあるオシレーターに基づく汎用的なインジケータの作成プロセスについて説明します。GUIは、ユーザーが迅速かつ容易に、グラフ ・ ウィンドウから (開くことがなくそのプロパティ)、各オシレーターの設定を直接変更するとでき、特定のタスクに最適なオプションを選択することができます。
取引通貨バスケットでの利用可能なパターン 取引通貨バスケットでの利用可能なパターン
前の記事に則って、トレーダーが認識可能なパターンについて分析を試みます。また、各パターンの利点、欠点を考慮し、それに関する推奨事項を示します。ウィリアムズのオシレータに基づいたインジケーターを分析ツールとして使用します。
グラフィカルインタフェースX: テキストエディットボックス、ピクチャスライダー、及びシンプルなコントロール(ビルド5) グラフィカルインタフェースX: テキストエディットボックス、ピクチャスライダー、及びシンプルなコントロール(ビルド5)
この記事では、テキストエディットボックス、ピクチャスライダー、および追加的なシンプルなコントロール(テキストラベルとピクチャ)の新しいコントロールについて検討します。ライブラリは成長を続けており、新しいコントロールの導入に加えて、以前作成されたものも改善されています。