取引システムのコンポーネントを分析することによる有効性の評価
概論
金融市場で取引を始めた人は誰でもすぐに、この分野での成功は、特定のシステム的アプローチを持ってのみ可能であると理解します。詩的で、非システム的で、感情的な取引というのは、原則として良い結果に繋がらないか、繋がったとしても短期的で、最終的には全てが涙に終わります。したがって、グラフィックであれ、インディケータや何かしらのものをベースにしたものであれ、どんな分析も金融市場取引で成功を収めるための重要な要素の一つです。この記事では、いくつかの独立した簡単な取引システムの検証のようなものと、それらの有効性や並行利用の有用性を分析します。
取引システムの有効性を評価する為の基準の定義
原則として、取引システムの有効性の評価というのは、特定かつ指定されたパラメータ、またシステム自体のいくつかの結果の値の総計です。指定パラメータとして、インディケータの期間、ストップロスやテイクプロフィットのレベル、または市場へのエントリーとイグジットへ影響を与えるより複雑なシステム係数のセットを使うことができます。結果の値は、純利益、ドローダウン、通貨証拠金中の成功取引率または収益性のある取引の平均値となります。
通貨市場の性質は常に変化を伴うので、どんな取引システムも時間と共にその有効性は減少していきます。これは結果として得られる指標からも明らかになります。するとシステムの指定パラメータの変更をし、それらを変更する条件に従って調整する必要が出てきます。この記事の中では、複合取引システムとしての理解を定義する必要があります。
複合取引システムは、自分のアルゴリズムやパラメータを持ち、相互に連動して動く個別のブロックのセットです。この時、このシステムに含まれるブロックのうちのあらゆるものの動作は、指定した基準によって評価することができます。図1で示す、システムの有効性の評価図を見てみましょう。複合システムは、A、B、Cの3つのブロックから構成されており、各々が独自の動作パラメータを持っています。このシステムの有効性と動作の評価は、3つのパラメータ、1、2、3で行います。時間の経過とともに、このシステムが取引を行っている市場条件に変化が起こり、パラメータ1-3は満足できるものではない方向へと変わっていき、システムを再設定する時が来たことを知らせることになります。これは次の方法で行うことができます。
- 今日のリアルな市場状況にシステムを適合させる為、9つ全てのパラメータの最適化を行います。しかし、この方法は過剰でもあります。ブロックの内の何が動作不良を起こしているかを明らかにすることができるなら、なぜ全てのパラメータを最適化する必要があるのか?
- 従って、2つ目の方法です。各ブロックの動作の有効性を別個に評価し比較することができる、システムの3つのブロック全てに共通する評価基準K1、K2、K3を作成します。
この方法の利点:
- 過剰性の回避。完璧に動作するものは最適化する必要もありません。
- システムのモニタリング。市場の様々な時間(取引セッションやニュースの配信など)において、別個もしくは一緒にシステムやそのブロックがどのように動作するかを明確にしつつ、ある時間間隔でのK1-K3のパラメータの測定を行うことができます。
- 脆弱性の分析。システム全体ではなく該当するブロックだけを改善または交換する最適化をすることができるように、ブロックのうちのどれがシステム全体を引っ張っているかを明らかにすることができます。
図1. 複合取引システム
システムの要素を分析することによるシステムの有効性の評価例
全ての取引システムの有効性をテストする為に、ブロックが個々にどのように動作しているか、またどのように連携して動作しているかを確認してみましょう。テストシステムは2つのブロックから構成されています。
- ブロックA標準インディケータParabolic SARのシグナルをベースにしています。
- ブロック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 |
これらの結果は、有効性を向上させる為の、お互いに独立した複合システムのブロックの検証は、全てのシステムの評価パラメータに現実的に疑いの余地なく影響を与えるということを示しました。これは、この方法は全てのシステムを一つのオブジェクトとして最適化するよりも過剰ではないという、記事の始めの論題を肯定するものとなりました。また、この方法は更にシステムを観測する機能を提供しました。
まとめ
この記事では、取引システムの要素を分析することによって、取引システムの有効性を評価する方法を検証しました。複合システムとそのモジュールのテストと検証をベースにし、次の結論を導くことができます。
- 最適化と改善を求められる構成要素のみを識別するこの評価方法は、システムの全てのパラメータを最適化するほど過剰ではありません。
- 指定した評価基準を与えるブロックを使った複合体としての取引システムの作成は、より効果的にシステムの管理をし、弱点を特定し、より柔軟にアップグレードすることを可能にします。
MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/1924
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索