
MQL5ウィザード:新バージョン
メタトレーダー5ターミナルは改良を続け、新たな特徴を備えています。新しいメタトレーダー5ビルド439には最新のMQL5ウィザードが含まれ、これにより、フレキシブルなトレードルールにもとづくエキスパートアドバイザを作成することができます。本稿ではMQL5ウィザードの新たな可能性について述べ、 このアプリケーションで生成されるエキスパートアドバイザのアーキテクチャにおける変更点を説明します。
背景
MQL5ウィザードは当初、トレーダーがMQL5を使って容易にプログラムを作成するのに役立つ手軽なツールとして設計されました。MQL5ウィザードの初期バージョンではすでに、ソースコードをMQL5で入手し、シンプルなモジュールセットとしてすぐに使うことのできるエキスパートアドバイザを、素早く作成することが可能でした。重要なのは、MQL5言語を知っている必要はないということです-必要なのは、「独自のエキスパートアドバイザをMQL5ウィザードで作成する」という記事を読むのみです。
このウィザードで作成されるエキスパートアドバイザには、3つのモジュールが含まれます:
各EAモジュールは、特定のクラスにもどついて独自のエキスパートアドバイザを修正するための、豊富な機会を提供しています。
標準ライブラリには、マネー管理、オープンポジション管理、そしてトレーディングシグナルの生成のさまざまなメカニズムを実行するために、フル機能ですぐに使えるクラスセットが含まれています。
このアプローチにより、実証済でありよく機能するモジュールにもとづいてトレーディングロボットを作成することができます。いくつかの手順を経て必要なパラメータを設定するだけでよいのです。しかし経験上分かっていることですが、どんなに優れた例を出してカスタムクラス記述の原則を説明しても、必ずしもMQL5プログラミング初心者の手助けをすることができるとは限りません。
旧バージョンのMQL5ウィザードのもう1つの欠点は、若干修正を加えた新しいトレーディングアルゴリズムを実行するために、新しいクラスを記述する必要があるということです。
この経験とユーザからのコメントにより、MetaQuotesは、より一層多くの機能を備えたMQL5ウィザードの上級バージョンを作成することを決定しました。
トレーディングシグナルを生成する新しいコンセプト
旧バージョンのMQL5ウィザードの主な障害は、独自のトレーディングシグナルを作成する際に生じる問題点と関係していました。したがってウィザードの新バージョンを開発する際には、シンプルな原則にもとづき、複合トレーディングシグナルの作成を単純化することに重点が置かれました。
この目的のため、以下の変更がtrading signals generator(以下シグナルと表記)のベースクラスに適用されました。
- (CExpertSignalクラスに由来する)あらゆるシグナルは、起こりうる価格変動について意見を与える「アドバイザー」の予測にもとづきます。次に、これらのアドバイザーもCExpertSignalクラスに由来することから、独自のアドバイザーを備えることができます。各シグナルのアドバイザー数は、64までの値をとることができます。
- CExpertSignalクラスには新しい手法が加わり、これにより価格変動の方向性に関する「投票」が行われます。さらに、そのような「投票」に参加するための新しいメカニズムも含まれています。
- よりフレキシブルな意思決定のため、意思決定にかかわる各シグナル(「アドバイザー」もシグナルであることを忘れないでください)は、自身の(現在のとは異なる)マーケット手段および/または自身のタイムフレームから、情報を受け取ることができます。
したがって、マーケットのどの方面へ参入するかについての意思決定は、今や「集団的に」、すなわち、各アドバイザーの「熟慮された意見」を考慮して行行うことができるのです。
シグナルは価格変動の方向性に関して、実装されたマーケットパターン検知の(シグナル特有の)アルゴリズムにもとづいて「投票」を行います。例えば、ストキャスティクスベースのシグナルによって、価格のリバーサルやダイバージェンスなどを特定することができます。
標準ライブラリにはすでに、さまざまなインディケータにもとづいた、すぐに利用できる20のシグナルが含まれています。
トレーディング意思決定の新たなメカニズム
シグナルによるトレーディング意思決定メカニズムは、以下の主な条件の形で提示されます:
- 各シグナルは独自のマーケットパターン(価格とインディケータの値のいくつかの組み合わせ)を備えています。
- 各マーケットパターンには、1から100までの重みづけされた値が与えられます。値が大きいほど、パターンの影響力が強くなります。
- 各パターンは、特定の方向への価格変動の予測を生成します。
- 適用されたパターンから受け取った予測を比較して最も影響力の強いものが選択され、予測が-100から+100までの範囲で与えられます。この時、サインは予測された変動方向を決定します(マイナス-価格減少、プラス-価格上昇)。予測の絶対値は、発見された最適パターンに対応しています。この結果が、一般投票へ送られます。
- モジュール内での各アドバイザの予測は、0から1.0までの重みづけ因子とともに投票され、設定(「重みづけ」)により特定されます。
- 投票結果は-100から+100までの数値となり、この際にサイン は予測された変動の方向を決定し、絶対値によりシグナルの強さを表します。これは、モジュールのすべてのアドバイザによる重みづけされた予測の算術平均として計算されます。この結果がシグナルの予測であり、絶対値はシグナルの影響度を表します。
生成された各エキスパートアドバイザには、2つのパラメータ-ポジションをオープン、またはクローズすることについて意思決定を行う閾値(ThresholdOpenとThresholdClose)-0から100までの値を取ることができる、が含まれます。シグナルの強さが閾値を超えると、意思決定が行われてトレード操作が実行されます。
MQL5ウィザードを使って作成されたEAは3つのパートから構成され、 そのうち最も重要となるのが、トレードシグナルを生成するモジュールを含むヘッドです。そこで、シグナルモジュール内のプロセスを以下のように表すことができます:
この図は、シグナルモジュールが2つのブロック-マーケットパターンブロックと、アドバイザブロック、を含むことができることを示しています。パターンブロックは、各パターンの中で最も強いものを選択して予測を作成します。投票では、アドバイザ(他のシグナル)の予測に対応する重みづけを掛け合わせて結果の値を合計し、算術平均予測を作成します。このケースでは、シグナルモジュールは、現状において-36.6 = (-100+60-54)/3であると算出しました。これは、強さの絶対値が36.6の売り予測を意味します。
意思決定メカニズムの2つの単純な例を考えてみます。
ThresholdOpen=20、およびThresholdClose=90のエキスパートアドバイザがあると仮定します。重みづけ0.4のMAにもとづくシグナルモジュールと、重みづけ0.8のストキャスティクスがトレードの意思決定に関与します。得られたトレーディングシグナルの2つのオプションを検討します:
- オプション1
価格が、上昇するMAインディケータの上方に交差しました。これは、MAモジュールに埋め込まれている価格上昇のマーケットパターンの1つに対応しています。強さは100です。同時に、ストキャスティクスが下落し価格のダイバージェンスが形成されました。これはストキャスティクスモデルで実行される、価格下落を示唆するパターンです。このパターンの強さは80です。
最終投票の結果を計算する。MAモジュールから得られる重みづけされた予測値は、0.4 * 100 = 40と計算されます。ストキャスティクスモジュールによる重みづけされた予測値は、0.8 * (-80) = -64と計算されます。最終予測値は、2つの重みづけされた予測値の算術平均:(40 - 64)/2 = -12と算出されます。これは、条件度12の売りシグナルです。閾値の20に達していません。結果として、トレード操作は実行されません。
オプション2
価格が、上昇するMAインディケータの下方に交差しました。これは、MAモジュールに 埋め込まれている価格下落のマーケットパターンにの1つに対応しています。強さは10です。同時に、ストキャスティクスが下落し価格のダイバージェンスが形成されました。これはストキャスティクスモジュールで実行される、価格下落を示唆するパターンです。このパターンの強さは80です。
最終投票の結果を計算する。MAモジュールから得られる重みづけされた予測値は、0.4 * 10 = 4と計算されます。ストキャスティクスモジュールによる重みづけされた予測値は、0.8 * (-80) = -64と計算されます。最終予測値は、2つの重みづけされた予測値の算術平均: (4 - 64)/2 = -30と算出されます。これは、条件度30の売りシグナルです。閾値の20を超えています。したがって、この結果はショートポジションをオープンするシグナルとなります。
図1チャート中のマーケットパターンの例
この図は、例に挙げたマーケットパターンを示しています:
a)価格のダイバージェンスとストキャスティクスが、オプション1と2で用いられます。
b)価格はMAインディケータとボトムから上方へ交差します-これはオプション1で用いられています。
c) 価格がMAと上方から下方へ交差します-これはオプション2で用いられています。
EAでシグナルを組み合わせる
独自のエキスパートアドバイザを作成するためには、まずどの手段やタイムフレームを使ってトレードするかを決める必要があります。次に、トレーディングに用いるインディケータにもとづいてシグナルを選択しなければなりません。
紹介した例では、次のような条件があります。
- トレードされるシンボルはEURUSDです。タイムフレームはM10です。
- 用いられるシグナル:
- EMA('EURUSD',M10,31)-指数移動平均にもとづくシグナル;
- Stochastic('EURUSD',M10,8,3,3)-ストキャスティクスにもとづくシグナル;
- EMA('EURUSD',H1,24)-異なるタイムフレームからの指数移動平均にもとづくシグナル;
- Stochastic('EURJPY',H4,8,3,3)-異なるシンボルとタイムフレームからのストキャスティクスにもとづくシグナル;
- IntradayTimeFilter-その日の時刻と、その日が週の中で何日目か、によるフィルタ。
新しいMQL5ウィザードでトレーディングロボットを作成する
エキスパートアドバイザのソースコードは、メタエディタのMQL5ウィザードを用いて生成されます。
トレーディング戦略の基本クラスは、terminal_data_folder\MQL5\Include\Expert\に配置されています。トレードシグナルクラス、 オープンポジショントレーリングクラス、そしてマネーおよびリスク管理のクラスのすぐに使用可能なアルゴリズムは、Signal、Trailing、およびMoneyサブフォルダ内に配置されています。MQL5ウィザードはこれらのフォルダ内でファイルをパースして、エキスパートアドバイザのコードを生成するのに用いられます。
図2MQL5ウィザードの基本クラス
MQL5ウィザードを起動するにはツールバーの「新規」をクリックするか、「ファイル」メニューから「新規」を選択します(もしくは、Ctrl+Nを入力します):
図3MQL5ウィザードを起動する
次に、作成したいプログラムのタイプを選択します。この例では、「エキスパートアドバイザ (生成)」オプションを選択します:
図4プログラムタイプを選択する
ステップ1エキスパートアドバイザの一般プロパティ
次にダイアログボックスを開き、エキスパートアドバイザの一般プロパティを設定します:
図5エキスパートアドバイザの一般プロパティ
作成するエキスパートアドバイザ名、作成者名、ウェブサイトへのリンクをそれぞれ、「名称」「作成者」および「リンク」フィールドに設定します。
エキスパートアドバイザはさらに、以下の入力パラメータを備えています:
- Symbol (the string type)-EAの実行対象シンボル;
- TimeFrame (the ENUM_TIMEFRAMES type)-EAの実行対象となるタイムフレーム。
デフォルトでは、両オプションとも「current」に設定されています(すなわち、エキスパートアドバイザはどのようなシンボル/タイムフレームにおいても検証されてトレードを行います)。
しかし、それが常に良いとはかぎりません。例えば、AUDNZDの週足チャート上で、間違えてEURUSDのデイトレ用の(その上クロスペアからの確定を使用して)エキスパートアドバイザセットアップを行うとします。これは、良いことではなさそうです。
したがって、必要なパラメータを設定するべきです。次のステップでは、EAがトレードを行うトレードシグナルのタイプを選択します。シンボルを選択するには、「次へ」をクリックします。
ステップ2トレードシグナルのモジュールを選択する
ポジションオープン、クローズのアルゴリズムはトレードシグナルのモジュールにより決定されます。トレードシグナルモジュールには、ポジションのオープニング/クロージング/リバースのルールが含まれます。
エキスパートアドバイザでは、同時に64までの異なるトレードシグナルモジュール(もしくは、設定が異なる同一モジュール)を用いることができます。
図6EAシグナル(開始)パラメータ
標準ライブラリには、すぐに使うことができるトレードシグナルモジュールが含まれています:
- インディケータのシグナル<アクセラレータ・オシレータ>;
- インディケータのシグナル<適応型移動平均>;
- インディケータのシグナル<オーサム・オシレータ>;
- オシレータのシグナル<ベアパワー>;
- オシレータのシグナル<ブルパワー>;
- オシレータのシグナル<コモディティ・チャネル・インデックス>;
- オシレータのシグナル<デマーカー>;
- インディケータのシグナル<ダブル指数移動平均>;
- インディケータのシグナル<エンベロープ>;
- インディケータのシグナル<フラクタル適応型移動平均>;
- デイトレ時刻フィルタのシグナル;
- オシレータのシグナル<移動平均のコンバージェンス/ダイバージェンス>;
- インディケータのシグナル<移動平均>;
- インディケータのシグナル<パラボリックSAR(ストップアンドリバース)>;
- オシレータのシグナル<相対力指数>;
- オシレータのシグナル<相対的活力指数>;
- オシレータのシグナル<ストキャスティクス>;
- オシレータのシグナル<トリプル指数平均>;
- インディケータのシグナル<トリプル指数移動平均>;
- オシレータのシグナル<ウィリアムズのパーセントレンジ>。
図7シグナルを選択する
「参照事項」にしたがって、まず最初に「インディケータのシグナル<移動平均>」を選択します。
必要なパラメータ(PeriodMAとMethod)を設定します。「名称」フィールドをダブルクリックして、Weight以外のすべてのパラメータを最適化の対象外にします(デフォルトでは、すべてのシグナルパラメータが入力済パラメータにマークされています)。
ここで、「シンボル」と「タイムフレーム」について触れなければなりません。これらのフィールドは、シグナルの適切な設定が現在のパラメータと異なる場合には、入力されなければなりません。シグナルについては、現在の設定は「上位インテリジェンス」のものになります(エキスパートアドバイザの場合)。
図8シグナルパラメータの設定
残りのシグナルを追加し、必要なパラメータを設定します。最適化のため、すべてのシグナルについてWeightパラメータだけは残してください。
シグナルの設定はこれで完了です。「次へ」をクリックして次に進みます。
図9EAシグナル(終了)のパラメータ
ステップ3オープンポジショントレーリングモジュールを選択する
次のステップとして、オープンポジショントレーリングアルゴリズムを選択します(トレーリングストップ)。トレーリングを使うと、獲得した利益をセーブすることができます。
このモジュールの設定については、MQL5ウィザード:エキスパートアドバイザをプログラミングなしに作成するで詳細に述べられています。このケースでは、トレーリングは使わないことにします。
図10ポジショントレーリングのアルゴリズムを選択する
ステップ4マネーおよびリスク管理のモジュールを選択する
最後のステップとして、エキスパートアドバイザで用いるマネー及びリスク管理のシステムを選択する必要があります。このモジュールの設定については、MQL5ウィザード:エキスパートアドバイザをプログラミングなしに作成するで詳細に述べられています。このケースでは、固定ロットを用います。
図11マネー管理アルゴリズムを選択する
これですべて終了です。「終了」をクリックします。
作成したエキスパートアドバイザをメタトレーダー5ストラテジーテスターでチェックする
すべての標準ライブラリコンポーネントが存在すれば、生成されたエキスパートアドバイザのコンパイルが成功します。エキスパートアドバイザの最適なパラメータセットが、メタトレーダー5ストラテジーテスターによる最適化後に示されます。
EAの最適化のためには、01.01.10から01.01.11までの期間を選択して、2つのステージで実行します。
第1のステージ:「シグナルの重みづけ、エントリ/退場条件のトリガとなる閾値、およびトレードレベルの選択」。
図12エキスパートアドバイザ最適化のパラメータ
これが、最適化の最も良い実行結果です。
図13エキスパートアドバイザ最適化の結果
(プロフィットと最大ドローダウンに関して)すでに良い結果が得られています。固定ロットで「トレーディング」していたことを忘れてはなりません。
ですが、この結果をさらに改良してみましょう。このこのために、別のシグナルがあります(この設定はまだ用いていません)。パラメータ最適化により見つかった値は、エキスパートアドバイザで認識されるマーケットパターンを示しています。
しかし、結果としてのマーケットパターンが、いつでも同じように良いとは限らないと仮定します。最適化の結果に、時間フィルタを適用してみましょう。
そのために、「IntradayTimeFilter」シグナルの「Bad hours」パラメータによってエキスパートアドバイザを最適化してみましょう。「Bad hours」パラメータは、24ビットのビットマップ(1日当たりの時間数)です。ビットマスクの各ビットが、時間の1つとユニークにマッチします(マスク内のビット数と1日の時間数がマッチします)。いずれの1ビット値も、現在の時間を示す数がこのビットの数に等しい場合は、すべての投票結果が無効となります(すなわち、この時間はトレーディングにふさわしくないと認識されます)。
すべての「良い」時間と「悪い」時間の組み合わせにより、ステップ1において、パラメータを0から2^24-1(分かりやすくいうと16,777,215)の間で最適化することができます。
図14エキスパートアドバイザ最適化のパラメータ
最適化の結果、11,665,415という値が得られました。この意味を理解するために、以下にバイナリで表現してみます。
- 101100100000000000000111-すなわち、「悪い」時間の数が0、1、2、17、20、21、そして23というこ とになります。
これらが、すべての最適化後に得られるエキスパートアドバイザのパラメータです。
図15エキスパートアドバイザのプロパティ
最適なパラメータを含む、1つの検証レポートを添付します。利益がより大きく、ドローダウンはより小さくなります。時間によるフィルタリング後、経過期間におけるトレーディングシステムの結果が向上したと結論付けることができます。
結論
トレーディング戦略のクラスを用いると、メタエディタでMQL5ウィザードによるトレーディング戦略を正しく検証するためのロボット作成が、たいへん容易になります。今や、エキスパートアドバイザのソースコード全体を、すぐに使うことのできるモジュールの組み合わせにもとづいて、あるいは独自モジュールを用いて、構築することができるのです。
MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/275





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