English Русский 中文 Español Deutsch Português 한국어 Français Italiano Türkçe
MQL5ウィザード:プログラミングしないExpert Advisorsの作成

MQL5ウィザード:プログラミングしないExpert Advisorsの作成

MetaTrader 5トレーディングシステム | 6 10月 2015, 17:22
13 459 0
MetaQuotes
MetaQuotes

はじめに

自動化トレーディングシステムを作成するとき必要なのは、マーケット状況を分析するアルゴリズムを書き、トレーディングシグナル、ご自身のオープンポジションを追跡するアルゴリズムを生成し、また資金管理とリスクマネジメントのシステムも生成することです。

ひとたびモジュールのコードが書かれればもっとも困難な仕事は全パーツをアセンブルし、トレーディングロボットのソースコードをデバッグすることです。ここでの主要な役目はモジュール連携のアーキテクチャが行います。:構築がおそまつであれば、エラー検索と修正に時間の大部分を費やすことになってしまいます。また、どんなモジュールであれ、アルゴリズムを置き換えると、ソースコード全体を書きなおすことになりかねません。

MQL5では、オブジェクト指向アプローチによって、 自動化トレーディングシステムのプログラミングと検証がかなり簡略化されています。

MetaQuotes Software Corp. はトレーディング戦略に実装するクラスを開発してきました。ここでは 要求されるトレードシグナル(現在20あります)、Trailing (同4)、Money Management (同5)モジュールを選択することでExpert Advisorsのコードを自動的に直接MetaEditorに作成することができます。これらモジュールをコンバインすることで、すぐに使えるトレーディングシステムのバリアントをたくさん入手することができます。

どのモジュールの実装にもみなさん独自のクラスを使用することも可能です。ご自身で作成、またJobsサービスを使って注文してください。

本稿ではMQL5ウィザードを使ってExpert Advisorを自動生成することについて考察していきます。そしてプログラムは不要なのです!


1. MQL5ウィザードを使用したトレーディングロボットの作成

Expert AdvisorのソースコードはMetaEditorでMQL5 Wizardを使って生成されます。

トレーディング戦略の基本クラスは '\<client_terminal_directory>\MQL5\Include\Expert\' フォルダにあります。すぐに使えるトレードシグナルクラスのアルゴリズム、オープンポジション追跡のクラス、資産とリスク管理のクラスはSignal、Trailing and Moneyサブフォルダにあります。MQL5ウィザードはこれらフォルダのファイルを解析し、Expert Advisor'のコード作成に使います。

MQL5ウィザードを起動するにはツールバーの『新規』ボタンをクリックするか、『ファイル』メニューから『新規』を選択(あるいは Ctrl+N を押すだけ)します。

図1 MQL5ウィザードの起動

図1. MQL5ウィザードの起動

それから作成したいプログラムタイプを選択します。今回の場合は、『Expert Advisor (作成)』を選択します。

図2 プログラムタイプの選択

図2. プログラムタイプの選択


ステップ 1 Expert Advisorの一般的プロパティ

次にダイアログボックスを開きます。ここではExpert Advisorのプロパティを設定します。

図3 Expert Advisorの一般的プロパティ

図3. Expert Advisorの一般的プロパティ

Expert Advisorの名前、筆者名、『名前』、『筆者』、『リンク』フィールドでみなさんのウェブサイトへのリンクを(それぞれ)指定します。

Expert Advisorには以下のパラメータもあります。

  • シンボル(ストリングタイプ) - Expert Advisorへの作業シンボル
  • 時間枠(timeframeタイプ) - Expert Advisorへの作業時間枠

次のステップでは、トレードシグナルを選択します。それについてエキスパートはトレードを行います。


ステップ2 トレードシグナルのモジュール選択

オープン、クローズポジションのアルゴリズムはトレードシグナルのモジュールによって決定されます。トレードシグナルのモジュールには、オープン/クローズ/リバースポジションのルールが含まれています。

「標準ライブラリ」はすぐに使えるトレードシグナルのモジュールです。

  1. CSignalAC - インディケータのマーケットモデルを基にしたシグナルのモジュール アクセラレータ オシレータ
  2. CSignalAMA - インディケータのマーケットモデルを基にしたシグナルのモジュール 適応移動平均
  3. CSignalAO - インディケータのマーケットモデルを基にしたシグナルのモジュール オーサム オシレータ
  4. CSignalBearsPower - オシレータのマーケットモデルを基にしたシグナルのモジュール ベアーズパワー
  5. CSignalBullsPower - オシレータのマーケットモデルを基にしたシグナルのモジュール ブルパワー
  6. CSignalCCI - オシレータのマーケットモデルを基にしたシグナルのモジュール 商品チャネルl指数
  7. CSignalDeM - オシレータのマーケットモデルを基にしたシグナルのモジュール デマーカ―
  8. CSignalDEM - インディケータのマーケットモデルを基にしたシグナルのモジュール 二重指数移動平均
  9. CSignalEnvelopes - インディケータのマーケットモデルを基にしたシグナルのモジュール エンベロープ
  10. CSignalFrAMA - インディケータのマーケットモデルを基にしたシグナルのモジュール フラクタル適応移動平均
  11. CSignalITF - 時間でシグナルにフィルタをかけるモジュール
  12. CSignalMACD - オシレータのマーケットモデルを基にしたシグナルのモジュール MACD
  13. CSignalMA - インディケータのマーケットモデルを基にしたシグナルのモジュール 移動平均
  14. CSignalSAR - インディケータのマーケットモデルを基にしたシグナルのモジュール パラボリックSAR
  15. CSignalRSI - オシレータのマーケットモデルを基にしたシグナルのモジュール 相対力指数
  16. CSignalRVI - オシレータのマーケットモデルを基にしたシグナルのモジュール 相対活力指数
  17. CSignalStoch - オシレータのマーケットモデルを基にしたシグナルのモジュール ストキャスティック
  18. CSignalTRIX - オシレータのマーケットモデルを基にしたシグナルのモジュール 三重指数移動平均
  19. CSignalTEMA - インディケータのマーケットモデルを基にしたシグナルのモジュール 三重指数移動平均
  20. CSignalWP - オシレータのマーケットモデルを基にしたシグナルのモジュール ウィリアムズ%R

トレードシグナルタイプは『名前』のドロップダウンリストから選択します。

『次へ』ボタンを押したら、ウィンドウが開きます。

図4 Expert Advisorのトレードシグナル選択

図4. Expert Advisorのトレードシグナル選択

トレードシグナルのモジュールを追加するには、『追加』ボタンを押します。

移動平均指数を基に、トレードシグナルを追加します。

図5 トレードシグナルのアルゴリズム選択

図5. トレードシグナルのアルゴリズム選択

トレードシグナルのモジュールにはそれぞれ独自のパラメータがあります。初期設定値を使用できます。

パラメータ作成には2つモードがあります。パラメータアイコンの上でマウスの左ボタンをダブルクリックすると、モード間の切り替えができます。パラメータに強調表示のアイコンがあればそれはExpert Advisorのインプット変数として使用可能です。 そのようなパラメータは後にエキスパートを最適化するのにストラテジーテスタで使用可能です。パラメータがグレーのアイコンになっていたらExpert Advisorのプロパティからは変更できない固定値がはいっています。

リストにトレードシグナルのモジュールが表示されます。

図6 トレードシグナルのモジュールが追加されました。

図6. トレードシグナルのモジュールが追加されました。


ステップ3 オープンポジション追跡のモジュール選択

次のステップはオープンポジション追跡のアルゴリズム (トレーリングストップ)の選択です。トレーリング使用により得た利益を保存することができます。

「標準ライブラリ」にはオープンポジション追跡の方法が複数あります。

  1. CTrailingNone - トレーリングストップは使用されません。
  2. CTrailingFixedPips - 固定ストップレベルに基づくトレーリングストップ
  3. CTrailingMA - MAに基づくトレーリングストップ
  4. CTrailingPSAR - パラボリック SARに基づくトレーリングストップ

われわれのExpert Advisor は『固定ストップレベルに基づくトレーリングストップ』を選択します;

図6 トレーリングオープンポジションのアルゴリズムの選択

図7. トレーリングオープンポジションのアルゴリズムの選択

このタイプのトレーリングにはパラメータが2つあります。」:『ストップレベル』と『プロフィットレベル』(クオートはポイント表記でコンマの後に2桁または4桁)

図7 選択されたトレーリングオープンポジションのアルゴリズムのパラメータ設定

図8. 選択されたトレーリングオープンポジションのアルゴリズムのパラメータ設定


ステップ4 資金とリスク管理のモジュール選択

最終ステップでは、 資金とリスク管理のシステム選択です。これはExpert Advisorで使用されるものです。

このアルゴリズムの目的は、トレーリング処理のためのトレーリングボリューム(単位:ロット)、またリスク管理を決定することです。損失値が許容限度額を超えると(たとえば資本の10%)、資金とリスク管理モジュールが 収益性のないポジションを強制的にクローズします。

「標準ライブラリ」はすぐに使える資金とリスク管理アルゴリズムを複数提供します。

  1. CMoneyFixedLot - 固定されたトレードボリュームでのトレーディング
  2. CMoneyFixedMargin - 固定マージンでのトレーディング
  3. CMoneyFixedRisk - 固定リスクでのトレーディング
  4. CMoneyNone - 最低許容トレードボリュームでのトレーディング
  5. CMoneySizeOptimized - 最適化されたトレードボリュームでのトレーディング

図8 資金とリスク管理のアルゴリズム選択

図9. 資金とリスク管理のアルゴリズム選択

「固定トレードボリュームでのトレーディング」アルゴリズムを選択します。

選択したモジュールには2つパラメータがあります。

  • ロット -ロット単位のトレーディングボリューム
  • パーセント - リスクの最大許容パーセント

図9 資金とリスク管理の選択されたアルゴリズムのパラメータ設定

図10. 資金とリスク管理の選択されたアルゴリズムのパラメータ設定

『終了』をクリックしたら、 \teminal_data_filder\MQL5\Experts\ フォルダにTestExpert.mq5ファイルが表示されます。ファイル名はExpert Advisorに指定し名前に対応しています。


2. MQL5ウィザードを使って作成したExpert Advisorのストラクチャ

MQL5ウィザードを使って作成されたExpert Advisorのソースコードは以下です。

//+------------------------------------------------------------------+
//|                                                   TestExpert.mq5 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Include                                                          |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
//--- available signals
#include <Expert\Signal\SignalMA.mqh>
//--- available trailing
#include <Expert\Trailing\TrailingFixedPips.mqh>
//--- available money management
#include <Expert\Money\MoneyFixedLot.mqh>
//+------------------------------------------------------------------+
//| Inputs                                                           |
//+------------------------------------------------------------------+
//--- inputs for expert
input string             Expert_Title                  ="TestExpert"; // Document name
ulong                    Expert_MagicNumber            =23689;        // 
bool                     Expert_EveryTick              =false;        // 
//--- inputs for main signal
input int                Signal_ThresholdOpen          =10;           // Signal threshold value to open [0...100]
input int                Signal_ThresholdClose         =10;           // Signal threshold value to close [0...100]
input double             Signal_PriceLevel             =0.0;          // Price level to execute a deal
input double             Signal_StopLevel              =50.0;         // Stop Loss level (in points)
input double             Signal_TakeLevel              =50.0;         // Take Profit level (in points)
input int                Signal_Expiration             =4;            // Expiration of pending orders (in bars)
input int                Signal_MA_PeriodMA            =85;           // Moving Average(85,0,...) Period of averaging
input int                Signal_MA_Shift               =0;            // Moving Average(85,0,...) Time shift
input ENUM_MA_METHOD      Signal_MA_Method              =MODE_SMA;    // Moving Average(85,0,...) Method of averaging
input ENUM_APPLIED_PRICE  Signal_MA_Applied             =PRICE_CLOSE; // Moving Average(85,0,...) Prices series
input double             Signal_MA_Weight              =1.0;          // Moving Average(85,0,...) Weight [0...1.0]
//--- inputs for trailing
input int                Trailing_FixedPips_StopLevel  =30;           // Stop Loss trailing level (in points)
input int                Trailing_FixedPips_ProfitLevel=50;           // Take Profit trailing level (in points)
//--- inputs for money
input double             Money_FixLot_Percent          =10.0;         // Percent
input double             Money_FixLot_Lots             =0.1;          // Fixed volume
//+------------------------------------------------------------------+
//| Global expert object                                             |
//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+
//| Initialization function of the expert                            |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Initializing expert
   if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing expert");
      ExtExpert.Deinit();
      return(-1);
     }
//--- Creating signal
   CExpertSignal *signal=new CExpertSignal;
   if(signal==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating signal");
      ExtExpert.Deinit();
      return(-2);
     }
//---
   ExtExpert.InitSignal(signal);
   signal.ThresholdOpen(Signal_ThresholdOpen);
   signal.ThresholdClose(Signal_ThresholdClose);
   signal.PriceLevel(Signal_PriceLevel);
   signal.StopLevel(Signal_StopLevel);
   signal.TakeLevel(Signal_TakeLevel);
   signal.Expiration(Signal_Expiration);
//--- Creating filter CSignalMA
   CSignalMA *filter0=new CSignalMA;
   if(filter0==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter0");
      ExtExpert.Deinit();
      return(-3);
     }
   signal.AddFilter(filter0);
//--- Set filter parameters
   filter0.PeriodMA(Signal_MA_PeriodMA);
   filter0.Shift(Signal_MA_Shift);
   filter0.Method(Signal_MA_Method);
   filter0.Applied(Signal_MA_Applied);
   filter0.Weight(Signal_MA_Weight);
//--- Creation of trailing object
   CTrailingFixedPips *trailing=new CTrailingFixedPips;
   if(trailing==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating trailing");
      ExtExpert.Deinit();
      return(-4);
     }
//--- Add trailing to expert (will be deleted automatically))
   if(!ExtExpert.InitTrailing(trailing))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing trailing");
      ExtExpert.Deinit();
      return(-5);
     }
//--- Set trailing parameters
   trailing.StopLevel(Trailing_FixedPips_StopLevel);
   trailing.ProfitLevel(Trailing_FixedPips_ProfitLevel);
//--- Creation of money object
   CMoneyFixedLot *money=new CMoneyFixedLot;
   if(money==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating money");
      ExtExpert.Deinit();
      return(-6);
     }
//--- Add money to expert (will be deleted automatically))
   if(!ExtExpert.InitMoney(money))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing money");
      ExtExpert.Deinit();
      return(-7);
     }
//--- Set money parameters
   money.Percent(Money_FixLot_Percent);
   money.Lots(Money_FixLot_Lots);
//--- Check all trading objects parameters
   if(!ExtExpert.ValidationSettings())
     {
      //--- failed
      ExtExpert.Deinit();
      return(-8);
     }
//--- Tuning of all necessary indicators
   if(!ExtExpert.InitIndicators())
     {
      //--- failed
      printf(__FUNCTION__+": error initializing indicators");
      ExtExpert.Deinit();
      return(-9);
     }
//--- ok
   return(0);
  }
//+------------------------------------------------------------------+
//| Deinitialization function of the expert                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ExtExpert.Deinit();
  }
//+------------------------------------------------------------------+
//| "Tick" event handler function                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
   ExtExpert.OnTick();
  }
//+------------------------------------------------------------------+
//| "Trade" event handler function                                   |
//+------------------------------------------------------------------+
void OnTrade()
  {
   ExtExpert.OnTrade();
  }
//+------------------------------------------------------------------+
//| "Timer" event handler function                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   ExtExpert.OnTimer();
  }
//+------------------------------------------------------------------+

Expert Advisorのコードには7つセクションがあります。

プログラムプロパティを記述するセクション

#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

インクルードされたファイル

#include <Expert\Expert.mqh>
//--- available signals
#include <Expert\Signal\SignalMA.mqh>
//--- available trailing
#include <Expert\Trailing\TrailingFixedPips.mqh>
//--- available money management
#include <Expert\Money\MoneyFixedLot.mqh>

CExpertクラス(そのインスタンスはExpert Advisorで使用されます)のコードはExpert.mqhファイルにあります。

SignalMA.mqhファイルは選択したトレードシグナルクラス(CSignalMA)のソースコードを含んでいます。TrailingFixedPips.mqhファイルはトレーリングオープンポジションアルゴリズムのクラス(CTrailingFixedPips)のソースコードを含んでいます。資金とリスク管理はMoneyFixedLot.mqhファイルにあるCMoneyFixedLotクラスによって実装されます。

次はExpert Advisorの入力パラメータです。

//--- inputs for expert
input string             Expert_Title                  ="TestExpert"; // Document name
ulong                    Expert_MagicNumber            =23689;        // 
bool                     Expert_EveryTick              =false;        // 
//--- inputs for main signal
input int                Signal_ThresholdOpen          =10;           // Signal threshold value to open [0...100]
input int                Signal_ThresholdClose         =10;           // Signal threshold value to close [0...100]
input double             Signal_PriceLevel             =0.0;          // Price level to execute a deal
input double             Signal_StopLevel              =50.0;         // Stop Loss level (in points)
input double             Signal_TakeLevel              =50.0;         // Take Profit level (in points)
input int                Signal_Expiration             =4;            // Expiration of pending orders (in bars)
input int                Signal_MA_PeriodMA            =85;           // Moving Average(85,0,...) Period of averaging
input int                Signal_MA_Shift               =0;            // Moving Average(85,0,...) Time shift
input ENUM_MA_METHOD      Signal_MA_Method              =MODE_SMA;    // Moving Average(85,0,...) Method of averaging
input ENUM_APPLIED_PRICE   Signal_MA_Applied             =PRICE_CLOSE;// Moving Average(85,0,...) Prices series
input double             Signal_MA_Weight              =1.0;          // Moving Average(85,0,...) Weight [0...1.0]
//--- inputs for trailing
input int                Trailing_FixedPips_StopLevel  =30;           // Stop Loss trailing level (in points)
input int                Trailing_FixedPips_ProfitLevel=50;           // Take Profit trailing level (in points)
//--- inputs for money
input double             Money_FixLot_Percent          =10.0;         // Percent
input double             Money_FixLot_Lots             =0.1;          // Fixed volume

最初の3つのパラメータ(Expert_Title、Expert_MagicNumber、 Expert_EveryTick)は一般的なものです。それらは常に選択されたトレーディングシグナルトレーリング資金とリスク管理アルゴリズムにかかわらず存在します。

ストリング、Expert_TitleパラメータはExpert Advisorの名前を指定し、Expert_MagicNumber はそのID(値はトレードリクエストパラメータで使用されます。)を指定し、Expert_EveryTick パラメータはEAの動作モードを設定するのに使われます。Expert_EveryTick がtrueに設定されていたら、Expert Advisor は新規ティックが使用中シンボルに来るたびにハンドラ関数(トレード条件、コミットトレード処理、トレーリングオープンポジションを確認します。)を呼びます。

Expert Advisorの一般的パラメータの後は、 選択したトレードシグナルアルゴリズムに対する入力パラメータについてです。 (ここでは、( CSignalMAクラスで使用されるパラメータ)

トレーリングオープンポジションのCTrailingStopFixedPipsクラスを選択しました。それはストップロスおよびテイクプロフィットで決められた固定の距離にあるオープンポジションを追跡します。その値は「普通の」 2/4 デジットポイントと定義されています。価格がオープンポジションの方に距離分動き、それTrailing_FixedPips_StopLevelレベルで設定されたポイント数を超えると、Expert Advisorストップロスとテイクプロフィットのレベル値を変更します。(もしTrailing_FixedPips_ProfitLevel > 0であれば)

入力パラメータ、Money_FixLot_Percent および Money_FixLot_Lots が固定トレードロットを伴なうアルゴリズムに対応しています。それはCMoneyFixedLotクラスに実装されています。ここでは、トレードはMoney_FixLot_Lotsの値に等しい固定ボリュームで処理されます。

CMoneyFixedLotクラスはまた、リスクマネジメントのアルゴリズムも実装します。Inp_Money_FixLot_Percentパラメータで指定される損失(現在資本に対して決められたパーセント)が出たら、CMoneyFixedLotクラスが Expert Advisor に収益性のないポジションを強制的にクローズするよう薦め、Expert Advisor はそのようにします。

Expert Advisorの入力パラメータのあとはCExpert クラスのExtExpert オブジェクトが宣言されます。

CExpert ExtExpert;

これはトレーディング戦略クラスのインスタンスです。

CExpertクラスのインスタンスとして、ExtExpert オブジェクトは子オブジェクトである次のクラスを含みます。CExpertSignal(トレードシグナルの基本クラス)、CExpertMoney (資金とリスク管理の基本クラス)、CExpertTrailing(トレーリングオープンポジションの基本クラス)また、CExpert クラスはの次のものを含みます。インスタンスCExpertTrade、各クラスSSymbolInfoCAccountInfoCPositionInfoCOrderInfo 、コンテナCIndicators

Expert Advisorのパラメータ設定をするには、対応しているクラスのインスタンスを作成し、ExtExpertクラスで作成されたオブジェクトの参照を指定します。

Expert Advisor初期化のOnInit関数を考察します。ExtExpertクラスのプロパティを初期化し、コンフィギュアします。


1. ExtExpert クラスの初期化

//--- Initializing expert
   if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing expert");
      ExtExpert.Deinit();
      return(-1);
     }

ExtExpert オブジェクトは Init メソッドを使って初期化されます。ここで、ティック、Expert AdvisorのIDごとに呼んでシンボル、時間枠、メソッドのフラグを設定します。またクラス(この段階ではCExpertSignalCExpertMoneyCExpertTrailing クラスはシグナル、トレーリング、資本管理オブジェクトとして使われます。)のプライベートオブジェクトを作成、初期化します。

ExtExpert オブジェクトがうまく初期化しなければ、Expert Advisor は1を返して終了します。


2. シグナルオブジェクトプロパティの作成と構成

//--- Creating signal
   CExpertSignal *signal=new CExpertSignal;
   if(signal==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating signal");
      ExtExpert.Deinit();
      return(-2);
     }
//---
   ExtExpert.InitSignal(signal);
   signal.ThresholdOpen(Signal_ThresholdOpen);
   signal.ThresholdClose(Signal_ThresholdClose);
   signal.PriceLevel(Signal_PriceLevel);
   signal.StopLevel(Signal_StopLevel);
   signal.TakeLevel(Signal_TakeLevel);
   signal.Expiration(Signal_Expiration);
//--- Creating filter CSignalMA
   CSignalMA *filter0=new CSignalMA;
   if(filter0==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter0");
      ExtExpert.Deinit();
      return(-3);
     }
   signal.AddFilter(filter0);
//--- Set filter parameters
   filter0.PeriodMA(Signal_MA_PeriodMA);
   filter0.Shift(Signal_MA_Shift);
   filter0.Method(Signal_MA_Method);
   filter0.Applied(Signal_MA_Applied);
   filter0.Weight(Signal_MA_Weight);

グナルオブジェクトプロパティのコンフィギュレーションにはいくつかステップがあります。

  • シグナルオブジェクトの作成とそのパラメータ設定パラメータ設定
  • トレードシグナルのモジュール作成とそのCExpertSignal クラスインスタンスへの追加

ExtExpert オブジェクトがうまく初期化しなければ、Expert Advisor は戻りコード(-2 ~ -3)を返して終了します。

パラメータがMQL5ウィザードでどのように指定されているかによって、適切なコードが作成されます。

//--- Set signal parameters
   filter0.PeriodMA(85);                     //--- Parameter was set as fixed in MQL5 Wizard
                                             //--- (gray icon - fixed value equal to 85)
   filter0.SlowPeriod(Signal_MA_Shift);      //--- Parameter was set as input variable
                                             //--- (blue icon - input parameter of Expert Advisor)

パラメータが固定でその値が初期設定値と変わらなければ、作成されたコートにそれは書き込まれません。そのような場いいは、パラメータの初期設定値(クラスに対応して指定されます)が使用されます。


3.トレーリングオブジェクトの作成と構成

//--- Creation of trailing object
   CTrailingFixedPips *trailing=new CTrailingFixedPips;
   if(trailing==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating trailing");
      ExtExpert.Deinit();
      return(-4);
     }
//--- Add trailing to expert (will be deleted automatically))
   if(!ExtExpert.InitTrailing(trailing))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing trailing");
      ExtExpert.Deinit();
      return(-5);
     }
//--- Set trailing parameters
   trailing.StopLevel(Trailing_FixedPips_StopLevel);
   trailing.ProfitLevel(Trailing_FixedPips_ProfitLevel);
トレーリングオブジェクトのコンフィギュレーションにもいくつかステップがあります。
  • トレーリングオブジェクトの作成
  • エキスパートにトレーリングを追加すること
  • トレーリングパラメータの設定

トレーリングオブジェクトがうまく初期化しなければ、Expert Advisor は戻りコード(-4 ~ -5)を返して終了します。それはどのステップでエラーが発生したかによります。


4.資金オブジェクトの作成と構成

//--- Creation of money object
   CMoneyFixedLot *money=new CMoneyFixedLot;
   if(money==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating money");
      ExtExpert.Deinit();
      return(-6);
     }
//--- Add money to expert (will be deleted automatically))
   if(!ExtExpert.InitMoney(money))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing money");
      ExtExpert.Deinit();
      return(-7);
     }
//--- Set money parameters
   money.Percent(Money_FixLot_Percent);
   money.Lots(Money_FixLot_Lots);

資金とリスクオブジェクトのコンフィギュレーションにも4つのステップがあります。

  • 資金オブジェクトの作成
  • エキスパートに資金を追加すること
  • 資金パラメータの設定

資金オブジェクトがうまく初期化しなければ、Expert Advisor は戻りコード( -6 ~ -7)を返して終了します。それはどのステップでエラーが発生したかによります。


5. クラスで使用されるインディケータをすべて初期化します。

//--- Check all trading objects parameters
   if(!ExtExpert.ValidationSettings())
     {
      //--- failed
      ExtExpert.Deinit();
      return(-8);
     }
//--- Tuning of all necessary indicators
   if(!ExtExpert.InitIndicators())
     {
      //--- failed
      printf(__FUNCTION__+": error initializing indicators");
      ExtExpert.Deinit();
      return(-9);
     }
//--- ok
   return(0);

トレードシグナル、トレーリングと資金管理のオブジェクトを作成し初期化したあと、 ExtExpertのValidationSettings() メソッドが呼ばれます。その後、ExtExpertオブジェクトのInitIndicators() メソッドが呼ばれます。それはシグナルオブジェクト、トレーリングオブジェクト、資金オブジェクトを初期化します。

ExtExpertクラスの適切なメソッドを呼ぶことで、 OnDeinitOnTickOnTradeOnTimer イベントのハンドルが行われます。

CExpertメソッド実装について詳細を知りたい場合は、 '\<client_terminal_directory>\MQL5\Include\Expert\expert.mqh'にあるインディケータソースコードを参照いただけます。


3. MetaTrader 5ストラテジーテスタに作成されたExpert Advisorの確認

Standard Library のコンポーネントがすべて存在すれば、作成されたExpert Advisorのコードは問題なくコンパイルされます。

図10 MQL5ウィザードに作成されたExpert Advisorのソースコードコンパイル成功

図11. MQL5ウィザードに作成されたExpert Advisorのソースコードコンパイル成功

結果のExpert Advisorは選択されたアルゴリズムトレードシグナルトレーリングオープンポジション資金とリスク管理に従いトレードを行います。

ご自身の新しく作成されたトレーディングシステムが、MetaTrader 5 クライアント端末からストラテジーテスタを使ってどのように動作するか確認することが可能です。ズ11で初期設定 (EURUSD, H1, 2010.01.01~2011.06.01)により履歴データの検証結果を閲覧することができます。

図11 履歴データ (EURUSD、H1)に関するExpert Advisor検証結果

図12. 履歴データ (EURUSD、H1)に関するExpert Advisor検証結果

Expert Advisorのパラメータの最良設定はMetaTrader 5 ストラテジーテスタの 最適化のあとに見ることができます。


おわりに

トレーディング戦略のクラスを使うと、トレーディングの考え方の作成と検証が驚くほど簡単になります。Expert Advisorのソースコード全体は すぐに使える「標準ライブラリ」 モジュールまたはご自身のモジュールに基づきMQL5ウィザードを使ってMetaEditorに直接構築することができます。

ご自身のトレードシグナルモジュールを書きたくない、または書くことができない場合、常にJobsサービスを利用し、トレーディングロボット全体または必要なモジュールだけを注文することができます。この方法は他にもメリットがあります。

  • 個別のモジュールを作成することはExpert Advisorそのもののコストよりも低くおさえることになるでしょう。
  • できあがったモジュールは、MQL5ウィザードを使って自立したExpert Advisorとトレーディングロボットのファミリー全体(このモジュールを基に)に再利用することが可能です。
  • 注文したモジュールはMQL5ウィザードの追加の要件をきっちりと満たし、このことでコードの質管理が高まります。

MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/171

添付されたファイル |
testexpert.mq5 (7.49 KB)
ファジー理論を使用しインディケータを作成する簡単な例 ファジー理論を使用しインディケータを作成する簡単な例
本稿はファイナンシャルマーケット分析にファジー理論の概念を実用的に適用することに特化しています。エンベロープインディケータ上で2つのファジールールに基づくインディケータ生成シグナルの例を提供します。作成されたインディケータは複数のインディケータバッファを使用します。7個のバッファを計算に、5個のバッファをチャート表示に、2個をカラーバッファとします。
Growing Neural Gas: MQL5への実装 Growing Neural Gas: MQL5への実装
本稿では、Growing neural gas (GNG)と呼ばれるクラスタの適用アルゴリズを実装するムMQL5プログラム開発方法をお見せしていきます。本稿は言語ドキュメンテーションを学習し、一定のプログラミングスキルがあり、神経情報科学分野の基礎知識がある方を対象としています。
標準ライブラリクラスを使ってオリジナルのMarket Watchを作成します。 標準ライブラリクラスを使ってオリジナルのMarket Watchを作成します。
新しいMetaTrader 5クライアント端末とMQL5言語はトレーダーにビジュアル情報を提供する機会をもたらします。 本稿では、汎用的拡張可能なクラスセットを提案します。それはチャート上の任意のテキストの表示作成作業をすべて行うものです。 Market Watch インディケータの例を提供します。
「新規バー」イベントハンドラ 「新規バー」イベントハンドラ
MQL5プログラミング言語はまったく新しいレベルで問題解決をする能力があります。 そういったタスクにして、もオブジェクト指向プログラミングのおかげでそれはすでに高いレベルに引きあげることができるのです。本稿では、かなり力強い多目的ツールに変換されたチャートの新規バーチェックの特にシンプルな例を取り上げます。どんなツールでしょうか?本稿でみつけてください。