
MQL5ウィザード:プログラミングしないExpert Advisorsの作成
はじめに
自動化トレーディングシステムを作成するとき必要なのは、マーケット状況を分析するアルゴリズムを書き、トレーディングシグナル、ご自身のオープンポジションを追跡するアルゴリズムを生成し、また資金管理とリスクマネジメントのシステムも生成することです。
ひとたびモジュールのコードが書かれればもっとも困難な仕事は全パーツをアセンブルし、トレーディングロボットのソースコードをデバッグすることです。ここでの主要な役目はモジュール連携のアーキテクチャが行います。:構築がおそまつであれば、エラー検索と修正に時間の大部分を費やすことになってしまいます。また、どんなモジュールであれ、アルゴリズムを置き換えると、ソースコード全体を書きなおすことになりかねません。
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ウィザードの起動
それから作成したいプログラムタイプを選択します。今回の場合は、『Expert Advisor (作成)』を選択します。
図2. プログラムタイプの選択
ステップ 1 Expert Advisorの一般的プロパティ
次にダイアログボックスを開きます。ここではExpert Advisorのプロパティを設定します。
図3. Expert Advisorの一般的プロパティ
Expert Advisorの名前、筆者名、『名前』、『筆者』、『リンク』フィールドでみなさんのウェブサイトへのリンクを(それぞれ)指定します。
Expert Advisorには以下のパラメータもあります。
- シンボル(ストリングタイプ) - Expert Advisorへの作業シンボル
- 時間枠(timeframeタイプ) - Expert Advisorへの作業時間枠
次のステップでは、トレードシグナルを選択します。それについてエキスパートはトレードを行います。
ステップ2 トレードシグナルのモジュール選択
オープン、クローズポジションのアルゴリズムはトレードシグナルのモジュールによって決定されます。トレードシグナルのモジュールには、オープン/クローズ/リバースポジションのルールが含まれています。
「標準ライブラリ」はすぐに使えるトレードシグナルのモジュールです。
- CSignalAC - インディケータのマーケットモデルを基にしたシグナルのモジュール アクセラレータ オシレータ
- CSignalAMA - インディケータのマーケットモデルを基にしたシグナルのモジュール 適応移動平均
- CSignalAO - インディケータのマーケットモデルを基にしたシグナルのモジュール オーサム オシレータ
- CSignalBearsPower - オシレータのマーケットモデルを基にしたシグナルのモジュール ベアーズパワー
- CSignalBullsPower - オシレータのマーケットモデルを基にしたシグナルのモジュール ブルパワー
- CSignalCCI - オシレータのマーケットモデルを基にしたシグナルのモジュール 商品チャネルl指数
- CSignalDeM - オシレータのマーケットモデルを基にしたシグナルのモジュール デマーカ―
- CSignalDEM - インディケータのマーケットモデルを基にしたシグナルのモジュール 二重指数移動平均
- CSignalEnvelopes - インディケータのマーケットモデルを基にしたシグナルのモジュール エンベロープ
- CSignalFrAMA - インディケータのマーケットモデルを基にしたシグナルのモジュール フラクタル適応移動平均
- CSignalITF - 時間でシグナルにフィルタをかけるモジュール
- CSignalMACD - オシレータのマーケットモデルを基にしたシグナルのモジュール MACD
- CSignalMA - インディケータのマーケットモデルを基にしたシグナルのモジュール 移動平均
- CSignalSAR - インディケータのマーケットモデルを基にしたシグナルのモジュール パラボリックSAR
- CSignalRSI - オシレータのマーケットモデルを基にしたシグナルのモジュール 相対力指数
- CSignalRVI - オシレータのマーケットモデルを基にしたシグナルのモジュール 相対活力指数
- CSignalStoch - オシレータのマーケットモデルを基にしたシグナルのモジュール ストキャスティック
- CSignalTRIX - オシレータのマーケットモデルを基にしたシグナルのモジュール 三重指数移動平均
- CSignalTEMA - インディケータのマーケットモデルを基にしたシグナルのモジュール 三重指数移動平均
- CSignalWP - オシレータのマーケットモデルを基にしたシグナルのモジュール ウィリアムズ%R
トレードシグナルタイプは『名前』のドロップダウンリストから選択します。
『次へ』ボタンを押したら、ウィンドウが開きます。
図4. Expert Advisorのトレードシグナル選択
トレードシグナルのモジュールを追加するには、『追加』ボタンを押します。
移動平均指数を基に、トレードシグナルを追加します。
図5. トレードシグナルのアルゴリズム選択
トレードシグナルのモジュールにはそれぞれ独自のパラメータがあります。初期設定値を使用できます。
パラメータ作成には2つモードがあります。パラメータアイコンの上でマウスの左ボタンをダブルクリックすると、モード間の切り替えができます。パラメータに強調表示のアイコンがあればそれはExpert Advisorのインプット変数として使用可能です。 そのようなパラメータは後にエキスパートを最適化するのにストラテジーテスタで使用可能です。パラメータがグレーのアイコン
になっていたらExpert Advisorのプロパティからは変更できない固定値がはいっています。
リストにトレードシグナルのモジュールが表示されます。
図6. トレードシグナルのモジュールが追加されました。
ステップ3 オープンポジション追跡のモジュール選択
次のステップはオープンポジション追跡のアルゴリズム (トレーリングストップ)の選択です。トレーリング使用により得た利益を保存することができます。
「標準ライブラリ」にはオープンポジション追跡の方法が複数あります。
- CTrailingNone - トレーリングストップは使用されません。
- CTrailingFixedPips - 固定ストップレベルに基づくトレーリングストップ
- CTrailingMA - MAに基づくトレーリングストップ
- CTrailingPSAR - パラボリック SARに基づくトレーリングストップ
われわれのExpert Advisor は『固定ストップレベルに基づくトレーリングストップ』を選択します;
図7. トレーリングオープンポジションのアルゴリズムの選択
このタイプのトレーリングにはパラメータが2つあります。」:『ストップレベル』と『プロフィットレベル』(クオートはポイント表記でコンマの後に2桁または4桁)
図8. 選択されたトレーリングオープンポジションのアルゴリズムのパラメータ設定
ステップ4 資金とリスク管理のモジュール選択
最終ステップでは、 資金とリスク管理のシステム選択です。これはExpert Advisorで使用されるものです。
このアルゴリズムの目的は、トレーリング処理のためのトレーリングボリューム(単位:ロット)、またリスク管理を決定することです。損失値が許容限度額を超えると(たとえば資本の10%)、資金とリスク管理モジュールが 収益性のないポジションを強制的にクローズします。
「標準ライブラリ」はすぐに使える資金とリスク管理アルゴリズムを複数提供します。
- CMoneyFixedLot - 固定されたトレードボリュームでのトレーディング
- CMoneyFixedMargin - 固定マージンでのトレーディング
- CMoneyFixedRisk - 固定リスクでのトレーディング
- CMoneyNone - 最低許容トレードボリュームでのトレーディング
- CMoneySizeOptimized - 最適化されたトレードボリュームでのトレーディング
図9. 資金とリスク管理のアルゴリズム選択
「固定トレードボリュームでのトレーディング」アルゴリズムを選択します。
選択したモジュールには2つパラメータがあります。
- ロット -ロット単位のトレーディングボリューム
- パーセント - リスクの最大許容パーセント
図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、各クラスSSymbolInfo、CAccountInfo、 CPositionInfo、COrderInfo 、コンテナ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ごとに呼んでシンボル、時間枠、メソッドのフラグを設定します。またクラス(この段階ではCExpertSignal、CExpertMoney 、 CExpertTrailing クラスはシグナル、トレーリング、資本管理オブジェクトとして使われます。)のプライベートオブジェクトを作成、初期化します。
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クラスの適切なメソッドを呼ぶことで、 OnDeinit、OnTick、OnTrade 、 OnTimer イベントのハンドルが行われます。
CExpertメソッド実装について詳細を知りたい場合は、 '\<client_terminal_directory>\MQL5\Include\Expert\expert.mqh'にあるインディケータソースコードを参照いただけます。
3. MetaTrader 5ストラテジーテスタに作成されたExpert Advisorの確認
Standard Library のコンポーネントがすべて存在すれば、作成されたExpert Advisorのコードは問題なくコンパイルされます。
図11. MQL5ウィザードに作成されたExpert Advisorのソースコードコンパイル成功
結果のExpert Advisorは選択されたアルゴリズムトレードシグナル、トレーリングオープンポジション、 資金とリスク管理に従いトレードを行います。
ご自身の新しく作成されたトレーディングシステムが、MetaTrader 5 クライアント端末からストラテジーテスタを使ってどのように動作するか確認することが可能です。ズ11で初期設定 (EURUSD, H1, 2010.01.01~2011.06.01)により履歴データの検証結果を閲覧することができます。
図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





- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索