English Русский 中文 Español Deutsch Português
取引システムのコンポーネントを分析することによる有効性の評価

取引システムのコンポーネントを分析することによる有効性の評価

MetaTrader 4テスター | 13 5月 2016, 14:11
926 0
Alexander Fedosov
Alexander Fedosov

概論

金融市場で取引を始めた人は誰でもすぐに、この分野での成功は、特定のシステム的アプローチを持ってのみ可能であると理解します。詩的で、非システム的で、感情的な取引というのは、原則として良い結果に繋がらないか、繋がったとしても短期的で、最終的には全てが涙に終わります。したがって、グラフィックであれ、インディケータや何かしらのものをベースにしたものであれ、どんな分析も金融市場取引で成功を収めるための重要な要素の一つです。この記事では、いくつかの独立した簡単な取引システムの検証のようなものと、それらの有効性や並行利用の有用性を分析します。


取引システムの有効性を評価する為の基準の定義

原則として、取引システムの有効性の評価というのは、特定かつ指定されたパラメータ、またシステム自体のいくつかの結果の値の総計です。指定パラメータとして、インディケータの期間、ストップロスやテイクプロフィットのレベル、または市場へのエントリーとイグジットへ影響を与えるより複雑なシステム係数のセットを使うことができます。結果の値は、純利益、ドローダウン、通貨証拠金中の成功取引率または収益性のある取引の平均値となります。

通貨市場の性質は常に変化を伴うので、どんな取引システムも時間と共にその有効性は減少していきます。これは結果として得られる指標からも明らかになります。するとシステムの指定パラメータの変更をし、それらを変更する条件に従って調整する必要が出てきます。この記事の中では、複合取引システムとしての理解を定義する必要があります。

複合取引システムは、自分のアルゴリズムやパラメータを持ち、相互に連動して動く個別のブロックのセットです。この時、このシステムに含まれるブロックのうちのあらゆるものの動作は、指定した基準によって評価することができます。図1で示す、システムの有効性の評価図を見てみましょう。複合システムは、A、B、Cの3つのブロックから構成されており、各々が独自の動作パラメータを持っています。このシステムの有効性と動作の評価は、3つのパラメータ、1、2、3で行います。時間の経過とともに、このシステムが取引を行っている市場条件に変化が起こり、パラメータ1-3は満足できるものではない方向へと変わっていき、システムを再設定する時が来たことを知らせることになります。これは次の方法で行うことができます。

  1. 今日のリアルな市場状況にシステムを適合させる為、9つ全てのパラメータの最適化を行います。しかし、この方法は過剰でもあります。ブロックの内の何が動作不良を起こしているかを明らかにすることができるなら、なぜ全てのパラメータを最適化する必要があるのか?
  2. 従って、2つ目の方法です。各ブロックの動作の有効性を別個に評価し比較することができる、システムの3つのブロック全てに共通する評価基準K1、K2、K3を作成します。

この方法の利点:

  • 過剰性の回避。完璧に動作するものは最適化する必要もありません。
  • システムのモニタリング。市場の様々な時間(取引セッションやニュースの配信など)において、別個もしくは一緒にシステムやそのブロックがどのように動作するかを明確にしつつ、ある時間間隔でのK1-K3のパラメータの測定を行うことができます。
  • 脆弱性の分析。システム全体ではなく該当するブロックだけを改善または交換する最適化をすることができるように、ブロックのうちのどれがシステム全体を引っ張っているかを明らかにすることができます。


図1. 複合取引システム


システムの要素を分析することによるシステムの有効性の評価例

全ての取引システムの有効性をテストする為に、ブロックが個々にどのように動作しているか、またどのように連携して動作しているかを確認してみましょう。テストシステムは2つのブロックから構成されています。

  1. ブロックA標準インディケータParabolic SARのシグナルをベースにしています。
  2. ブロックB標準インディケータAccelerator Oscillator(AC)のシグナルをベースにしています。

これらのブロックを評価基準に従ってすぐに定義していきましょう。

  • 基準1 — 純利益。
  • 基準2 — 最大ドローダウン。
  • 基準3 — 利益性の高い取引(全体の%)。

システムの全体的な有効性のパラメータとして、同様の指標を選択します。

  • パラメータ1 — 純利益。
  • パラメータ2 — 最大ドローダウン。
  • パラメータ3 — 利益性の高い取引(全体の%)。

これらのインディケータの為の市場エントリーのシグナル例は、MQL5標準ライブラリのドキュメント(シグナルParabolic SARシグナルAccelerator Oscillator(最初の条件))で見ることができます。それぞれのエントリー条件と、どのような条件がテスト期間で有効に動作するかを明らかにしていきましょう。

テストされるエキスパートアドバイザーの全てのパラメータは以下のようになります。

図2. エキスパートアドバイザーのパラメータ


//+------------------------------------------------------------------+
//|                                                                  |
//|                                                Alexander Fedosov |
//|                           https://www.mql5.com/ru/users/alex2356 |
//+------------------------------------------------------------------+
#property copyright "Alexander Fedosov"
#property link      "https://www.mql5.com/ru/users/alex2356"
#property version   "1.00"
#property strict

#include "trading.mqh"

input int            tm = 1;                       //Test mode 1,2 or 3
input int            SL = 40;                      //Stop-loss
input int            TP = 70;                      //Take-profit
input bool           lot_const = false;            //Lot of balance?
input double         lt=0.01;                      //Lot if Lot of balance=false 
input double         Risk=2;                       //The risk in the lot of the balance, %
input int            Slippage= 5;                  //Slippage
input int            magic = 2356;                 //Magic number
input ENUM_TIMEFRAMES tf1 = PERIOD_H1;             //Timeframe for the calculation module1
input ENUM_TIMEFRAMES tf2 = PERIOD_M5;             //Timeframe for the calculation module2
input double         Step = 0.02;                  //Step PSAR
input double         Mxm = 0.2;                    //Maximum PSAR

CTrading tr(magic,Slippage,lt,lot_const,Risk,5);
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(tm<1 || tm>3)
      return;
//--- Parabolic SARモジュールの為の市場エントリー条件
   if(tm==1 && !tr.isOpened(magic))
     {
      double psar[],prc[];
      ArrayResize(psar,3);
      ArrayResize(prc,3);
      for(int i=0; i<3; i++)
        {
         psar[i]=iSAR(_Symbol,tf1,Step,Mxm,i);
         prc[i]=iClose(_Symbol,tf1,i);
        }

      if(psar[2]>prc[2] && psar[1]<prc[1] && psar[0]<prc[0])
         tr.OpnOrd(OP_BUY,lt,TP,SL);
      if(psar[2]<prc[2] && psar[1]>prc[1] && psar[0]>prc[0])
         tr.OpnOrd(OP_SELL,lt,TP,SL);

     }
//--- ACモジュールの為の市場エントリー条件
   if(tm==2 && !tr.isOpened(magic))
     {
      double ac[];
      ArrayResize(ac,3);
      for(int i=0; i<3; i++)
         ac[i]=iAC(Symbol(),tf2,i);

      if(ac[2]>0 && ac[1]>0 && ac[1]>ac[2])
         tr.OpnOrd(OP_BUY,lt,TP,SL);
      if(ac[2]<0 && ac[1]<0 && ac[1]<ac[2])
         tr.OpnOrd(OP_SELL,lt,TP,SL);

     }
//--- 2つのモジュールを一緒に使用した際の市場エントリーの条件
   if(tm==3 && !tr.isOpened(magic))
     {
      double psar[],prc[],ac[];
      ArrayResize(psar,3);
      ArrayResize(prc,3);
      ArrayResize(ac,3);
      for(int i=0; i<3; i++)
        {
         psar[i]=iSAR(_Symbol,tf1,Step,Mxm,i);
         prc[i]=iClose(_Symbol,tf1,i);
         ac[i]=iAC(Symbol(),tf2,i);
        }
      if((psar[2]>prc[2] && psar[1]<prc[1] && psar[0]<prc[0]) || (ac[2]>0 && ac[1]>0 && ac[1]>ac[2]))
         tr.OpnOrd(OP_BUY,lt,TP,SL);
      if((psar[2]<prc[2] && psar[1]>prc[1] && psar[0]>prc[0]) || (ac[2]<0 && ac[1]<0 && ac[1]<ac[2]))
         tr.OpnOrd(OP_SELL,lt,TP,SL);

     }

  }
//+------------------------------------------------------------------+

テストするエキスパートアドバイザーの最初のパラメータtm (Test mode)は、1、2または3の値となります。これらの数値は、3つの動作モードに対応しています。

  • tm = 1. Parabolic SARインディケータを使用した市場エントリーの条件のみ使用します。ブロックAのみの動作モード。
  • tm = 2. Accelerator Oscillatorインディケータを使用した市場エントリーの条件のみ使用します。ブロックBのみの動作モード。
  • tm = 3. 2つのブロックの共同動作。全てのシステムが動作します。

Test Modeのパラメータを変更することで、私達が興味のあるパラメータを明らかにすることができます(ブロックAやBにはK1-K3、全てのシステムにはパラメータ1-3です)。次に、Parabolic SAR(図3)、AC(図4)、それらの連携動作(図5)のブロックのテスト結果が表示されています。


図3. Parabolic SARモジュールのテスト



図4. ACモジュールのテスト



図5. Parabolic SARとACモジュールの連携動作

3つの動作モードの結果をベースにした、比較表を引用します。

Test Mode 純利益 利益のある取引、% 最大ドローダウン
1 27,56 37,91 32,71
2 106,98 39,19 38,94
3 167,16 40,64 18,62

 

システムの動作が悪化した場合のシュミレーション

ここで、ブロックA(Test Mode = 1)の動作パラメータを、有効性を低下させる方向へ変化させましょう。これはそのブロックの一つの動作が悪化した場合に、システムに何が起こるかという疑問に対する答えを与えてくれます。

システムの有効性の低下をシュミレーションする為に、ブロックAの動作に関わる一つのパラメータを変更します。これはTimeframe for the calculation module1で、以下の図6に引用されています。これは、Parabolic SARをベースにした計算期間を変更するもので、市場へのエントリーポイントに影響を与えるので、全てのシステムの動作の有効性を変えるものです。

図6. システムの有効性低下のシュミレーション



図7. Parabolic SARをベースにしたモジュールパラメータの変更結果

分かりやすくする為に、私達が観察するブロックAの動作の値と、Timeframe for the calculation module1:パラメータの2つの異なる値を比較しましょう。

Timeframe for the calculation module1 純利益 利益のある取引、% 最大ドローダウン
1 Hour 27.56 37.91 32.71
4 Hours 2.54 36.73 43.21

 

明らかに4時間の期間の計算は、全ての3つの評価基準で悪化したモジュール動作の結果を示しました。構成物のうちの一つの数値を故意に下げた全てのシステムのテストも、図8で示されているように、システムの有効性のパラメータ1-3も減少させました。


図8. Parabolic SAR (悪化)とACモジュールの連携動作

ここで、ブロックAの動作の変化がシステム全体の有効性にどのように影響を与えたかを明確にする為に、全ての結果を一つにまとめましょう。

Timeframe for the calculation module1 純利益(モジュール1) 利益のある取引、%
(モジュール1)
最大ドローダウン、%
(モジュール1)
純利益
(システム)
利益のある取引、%
(システム)
最大ドローダウン、%
(システム)
4 Hours 2.54 36.73 43.21 139.34 40.00 24.9
1 Hour 27.56 37.91 32.71 167.16 40.64 18.62

これらの結果は、有効性を向上させる為の、お互いに独立した複合システムのブロックの検証は、全てのシステムの評価パラメータに現実的に疑いの余地なく影響を与えるということを示しました。これは、この方法は全てのシステムを一つのオブジェクトとして最適化するよりも過剰ではないという、記事の始めの論題を肯定するものとなりました。また、この方法は更にシステムを観測する機能を提供しました。


まとめ

この記事では、取引システムの要素を分析することによって、取引システムの有効性を評価する方法を検証しました。複合システムとそのモジュールのテストと検証をベースにし、次の結論を導くことができます。

  • 最適化と改善を求められる構成要素のみを識別するこの評価方法は、システムの全てのパラメータを最適化するほど過剰ではありません。
  • 指定した評価基準を与えるブロックを使った複合体としての取引システムの作成は、より効果的にシステムの管理をし、弱点を特定し、より柔軟にアップグレードすることを可能にします。
適切なテストの為には、別個にフォルダを作成する必要があります。例えば、MQL4\Experts\article1924というフォルダを作り、ここへ両方のファイルを置いてください。

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

添付されたファイル |
trading.mqh (14.94 KB)
analysis.mq4 (3.37 KB)
シグナル計算機 シグナル計算機
シグナル計算機は、MetaTrader 5のターミナルから直接動作し、ターミナルがシグナルの事前選択とソートを行います。これこそがこの計算機の大きな長所でもあります。これによって、MetaTrader 5のターミナルでは、自分の取引口座と最大限に互換性のあるシグナルのみユーザーに見えることになります。
GUIコントロールのレイアウトとコンテナの使用:CGrid クラス GUIコントロールのレイアウトとコンテナの使用:CGrid クラス
この記事では、1つのレイアウトマネージャを使用して、レイアウトやコンテナに基づいて、GUI作成の代替方法を提示しています。CGridクラスは、グリッドレイアウトを使用して、他のコンテナやコントロールのコンテナとして機能する補助コントロールです。
MQL5言語でのTelegram用ボットの作成 MQL5言語でのTelegram用ボットの作成
この記事では、MQL5言語でのTelegram用ボットの作成を順を追って説明していきます。この資料は、トレードロボットを自分のモバイルデバイスに繋げたい人にとって、興味深いものになると思います。記事では、トレードシグナルのリンクの実行、サイト上の情報の検索、取引口座の状態や相場、チャートのスクリーンショットをあなたのモバイルデバイスへ送信するボットの例をご紹介します。
ファジーロジックの概要 ファジーロジックの概要
ファジーロジックは、数学的論理と集合論の境界を拡張します。この記事では、マムダニ型とスゲノ型モデルを使用して、2つのファジー推論システムを説明し、ファジー理論の基本的な原則を取り扱います。MQL5FuzzyNetライブラリを使用して、これら2つのシステムに基づいてファジーモデルの実装について説明します。