MetaTrader 5 herunterladen

Bewertung der Effektivität von Handelssystemen durch eine Analyse ihrer Komponenten

24 Mai 2016, 15:57
Alexander Fedosov
0
697

Einführung

Jeder Trading-Anfänger auf den Finanzmärkten begreift schnell, dass man in dieser Branche Erfolg haben kann, wenn man nur einen gewissen systematischen Ansatz hält. Ein spontanes Handeln, dies aufs Glück, systemlos, emotional durchgeführt wird, führt in der Regel nicht zu positiven Ergebnissen, oder nur zu einem kurzfristigen Erfolg, und schließlich beendet das dramatisch. Von daher jede Analyse, egal ob es eine grafische Analyse, die basierend auf Indikatoren oder auf eine andere Analyse ist, ist eine der wichtigsten Komponenten für das erfolgreiche Handeln auf den Finanzmärkten. Dieser Artikel ist zu einem gewissen Grad eine Forschung von einigen einfachen und unabhängigen Handelssystemen, enthält ihre Wirksamkeitsanalyse und Nützlichkeitsanalyse bei einer gemeinsamen Anwendung.


Die Bestimmung der Kriterien für die Bewertung der Effektivität des Handelssystems

In der Regel eine Bewertung der Wirksamkeit eines Handelssystems ist ein bestimmter Satz von definierten und spezifizierten Parametern, sowie einige der resultierenden Werte des Systems. Als eingegeben Parameter können Perioden von Indikatoren, Stop-Loss oder Take-Profit-Größen oder eine komplexere Reihe von Koeffizienten des Systems, die eine Auswirkung auf den Ein- und Ausstieg aus dem Markt haben, verwendet werden. Die resultierenden Werte sind wiederum Netto-Gewinn, Verlust, Prozentsatz der erfolgreichen Trades oder der Mittelwert der Gewinn-Trades in der Deposites-Währung.

Jedes Handelssystem im Laufe der Zeit reduziert seine Wirksamkeit, da die Art der Devisenmärkte ändert sich ständig, wird das aus den resultierenden Indikatoren deutlich. Von daher müssen die eingegebenen Systemparameter auf die ändernden Bedingungen geändert und angepasst werden. In diesem Artikel wollen wir das Konzept eines komplexen Handelssystems definieren.

Ein komplexes Handelssystem — ist eine Reihe von separaten Blöcken, die ihre eigenen Algorithmen und Parameter haben und sie arbeiten in Verbindung miteinander. Die Arbeit von jedem diesem Block, der in dem System enthalten ist, kann durch einen gegebenen Satz von Kriterien ausgewertet werden. Betrachten wir das Bewertungsschema der Systemseffektivität in Abbildung 1. Das komplexe System hat drei konstituierenden Blöcke A, B, C und jeder von ihnen hat seine persönlichen Arbeitsparameter. Die Arbeit und die Effektivität dieses Systems werden durch drei Parameter bewertet: 1, 2, 3. Im Laufe der Zeit werden die Marktbedingungen, in denen dieses System handelt, sich ändern und die Parameter 1-3 werden auf unbefriedigende Seite geändert, was zu folge signalisiert, dass es Zeit ist, um das System neuzukonfigurieren. Dies kann man mit den folgenden Methoden erfolgen:

  1. Starten Sie die Optimierung aller neun Parameter, um das System auf die aktuellen Marktgegebenheiten anzupassen. Diese Methode enthält jedoch Redundanz - warum alle Parameter optimieren, wenn es möglich ist, herauszufinden, welcher Block die Arbeit schlimmer macht!?
  2. Dementsprechend ist die zweite Methode. Es wird ein gemeinsamer Satz von Bewertungskriterien К1, К2, К3, für alle drei Systemsblöcke erzeugt, was die Arbeitseffizienz für jeden Block separat zu bewerten und zu vergleichen, ermöglicht.

Die Vorteile dieser Methode:

  • Die Redundanzvermeidung. Es besteht keine Notwendigkeit in der Optimierung, wenn Blöcke hervorragend funktionieren.
  • Die Überwachung des Systems. Die Parameter К1-К3 können nach einigen Zeit-Perioden gemessen werden, wodurch das Verhalten des Systems und seine Blöcke zusammen und getrennt zu verschiedenen Zeiten des Marktes (Handelssitzungen, Pressemitteilung, etc.) klargestellt werden können.
  • Die Analyse der Vulnerabilität. Das ermöglicht zu bestimmen, welcher Block das gesamte System nach unten zieht, um lediglich diesen Block danach zu optimieren, zu ersetzen oder zu verbessern, und nicht das gesamte System.


in Abb.1. Das komplexe Handelssystem


Das Bewertungsbeispiel der Effektivität von einem Handelssystem durch eine Analyse seiner Komponenten

Um die Effektivität eines gesamten Handelssystems zu testen, müssen wir überprüfen, wie die Systemsblöcke getrennt voneinander und zusammenarbeiten. Das Testsystem besteht aus zwei Blöcken:

  1. Der Block A. Der ist auf den Signalen des standarten Indikators Parabolic SAR basierend.
  2. Der Block B. Der ist auf den Signalen des standarten Indikators Accelerator Oscillator(AC) basierend.

Wir werden direkt eine Reihe von Kriterien für die Bewertung dieser Blöcke definieren:

  • Das Kriterium К1 - Nettogewinn.
  • Das Kriterium К2 - die maximale Drawdown.
  • Das Kriterium К3 - Die Gewinn-Trades (in% von allen).

Für eine vollständige Klarheit werden wir die gleichen Indikatoren wie die Parameter der Gesamteffektivität wählen:

  • Der Parameter 1 - Nettogewinn.
  • Der Parameter 2 — die maximale Drawdown.
  • Der Parameter 3 — Die Gewinn-Trades (in% von allen).

Die Beispiele der Signale für den Markteintritt für diese Indikatoren befinden sich in der Dokumentation der standerten Bibliothek von MQL5: Signale Parabolic SAR und Signale Accelerator Oscillator (erste Bedingungen). Für jeden von ihnen werden wir die Teilnahmebedingungen beschreiben und die Bedingungen herauszufinden, unter denen sie in einem vorgegebenen Test-Intervall wirksam sind.

Alle Parameter des Tests-Expert Advisors sehen folgendermaßen aus:

in Abb.2. EA-Parameter


//+------------------------------------------------------------------+
//|                                                                  |
//|                                                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;
//--- Die Bedingungen für den Markteintritt des Moduls 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);

     }
//--- Die Bedingungen für den Markteintritt des Moduls auf 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);

     }
//--- Die Bedingungen für den Markteintritt bei der Zusammenarbeit von zwei Moduls
   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);

     }

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

Der erste Parameter von EA ist tm (Test mode) und kann die Werte 1, 2 oder 3 halten. Diese Werte entsprechen für drei Arbeitsarten:

  • tm = 1. Der wird nur die Markteintrittsbedingungen mit dem Indikator Parabolic SAR verwendet. Die Arbeitsart nur für den Block A.
  • tm = 2. Der wird nur die Markteintrittsbedingungen mit dem Indikator Accelerator Oscillator verwendet. Die Arbeitsart nur für den Block B.
  • tm = 3. Die gemeinsame Arbeit beider Blöcke. Dabei arbeitet das ganze System.

Bei der Änderung des Parameters Test Mode, können wir uns interessierten Parameter erfahren: für die Blöcke A und B sind es K1-K3, für das ganze System sind es Parameter 1-3. Im Folgenden sind die Testergebnisse des Blocks auf Parabolic SAR (Bild 3), AC (Abb. 4) und ihrer gemeinsamen Arbeit (Abb. 5).


in Abb.3. Der Test des Moduls Parabolic SAR



in Abb.4. Der Test des Moduls AC



in Abb.5. Die gemeinsame Arbeit der Moduls Parabolic SAR und AC

Basierend auf den Ergebnissen von drei verschiedenen Arbeitsarten wird die Vergleichstabelle zur Verdeutlichung und zur Verfügung gestellt:

Test Mode Nettogewinn Profit Trades,% Maximale Drawdown
1 27,56 37,91 32,71
2 106,98 39,19 38,94
3 167,16 40,64 18,62

 

Die Simulation der Systemsverschlechterung

Lassen Sie uns die Arbeitsparameter des Blocks A (Test Mode = 1) in Richtung ihrer Effektivität-Reduktion verändern. Dies gibt uns die Antwort auf die Frage, was mit dem System geschehen wird, falls einer seiner Blöcke sich schlecht ändert.

Um die Effektivitätgeringung des Systems zu modellieren,simulieren wir einen Parameter, der zur Arbeit des Blocks A gehört - das ist Timeframe for the calculation module1 — - die ist folgendermaßen in Abb. 6 gezeigt. Dadurch wird die Periode seiner Berechnung, die auf Basis des Parabolic SAR ist, sich ändern. Zufolge wird es auf die Markteintrittsstelle auswirken, und somit ändert es die Effektivität des gesamten Systems.

in Abb.6. Die Modellierung der Gerinnung in Systemseffektivität



in Abb.7. Das Ergebnis der Änderung von Moduls Parametern basierend auf Parabolic SAR

Zwecks der Erläuterung werden wir die beobachtete Leistung des Blocks A mit zwei unterschiedlichen Werten seiner Parameter Timeframe for the calculation module1 vergleichen:

Timeframe for the calculation module1 Nettogewinn Profit Trades,% Maximale Drawdown
1 Hour 27.56 37.91 32.71
4 Hours 2.54 36.73 43.21

 

Dies zeigt, dass die Berechnung der 4-Stunden-Periode gab uns schlechtere Ergebnisse der Moduloperation für alle drei Bewertungskriterien. Die Testen des gesamten Systems mit absichtlich verschlechterten Werten von einem seinen Komponenten hat auch die Effektivität der Parameter 1-3 reduziert, wie in Abb. 8 gezeigt ist.


in Abb.8. Die gemeinsame Arbeit der Moduls Parabolic SAR (verschlechtert) und AC

Jetzt werden wir alle Testergebnisse zusammenfassen, um zu bestimmen, wie die Änderungen im Block A auf die Gesamteeffektivität des Systems ausgewirkt haben.

Timeframe for the calculation module1 Nettogewinn (Modul 1) Profit Trades,%
(Modul 1)
die maximale Drawdown,%
(Modul 1)
Nettogewinn
(das System)
Profit Trades,%
(das System)
die maximale Drawdown,%
(das System)
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

Die Ergebnisse zeigten, dass die Forschung jedes Blocks getrennt im komplexen System, zwecks der Effektivität zu verbessern, aktuell und gut auf die Auswertungsparameter des gesamten Systems auswirkt. Die Thesen am Anfang dieses Artikels wurden auch bestätigt, dass diese Methode weniger redundant ist als die Optimierung des gesamten Systems als ein einzelnes Objekt; Darüber hinaus bietet diese Methode die zusätzlichen Fähigkeiten, das System zu überwachen.


Fazit

In diesem Artikel wurde die Bewertungsmethode der Effektivität von Handelssystemen durch eine Analyse ihrer Komponenten betrachtet. Auf der Grundlage des Tests und der Forschung der Blocksystems-Komponente und seiner Module, können folgende Schlussfolgerungen gezogen werden:

  • Diese Bewertungsmethode ist weniger redundant als die Optimierung aller Systemparameter, die nur durch die Komponenten identifiziert werden, welche die Optimierung und Verbesserung fordern.
  • Die Erstellung der Handelssystems in Form der Komponenten, mit der Verwendung der Blöcke, die von festgelegten Kriterien bewertet werden können, ermöglicht sie besser zu steuern, Schwachstellen zu erkennen und mit mehr Flexibilität zu aktualisieren.
Ein separater Ordner muss für den korrekte Test erstellt werden, in dem beide Dateien zum Beispiel MQL4 \ Experts \ article1924 platziert werden sollten.

Übersetzt aus dem Russischen von MetaQuotes Software Corp.
Originalartikel: https://www.mql5.com/ru/articles/1924

Beigefügte Dateien |
trading.mqh (30.03 KB)
Verbesserung der Codequalität mit Hilfe eines Komponententests Verbesserung der Codequalität mit Hilfe eines Komponententests

Selbst einfache Programme haben oft Fehler, die unglaubhaft zu sein scheinen. "Wie konnte ich das kreieren?" ist unser erster Gedanke, wenn ein solcher Fehler aufgedeckt wird. "Wie kann ich so etwas verhindern?" ist die zweite Frage, die uns aber weniger häufig in den Sinn kommt. Es ist unmöglich, einen absolut einwandfreien Code zu kreieren, vor allem bei großen Projekten, but es ist möglich, Technologien für eine rechtzeitige Fehlererkennung zu verwenden. Der Artikel beschreibt, wie die MQL4 Codequalität mit Hilfe des beliebten Komponententestverfahren verbessert werden kann.

Wettbewerb an Expert Advisors innerhalb eines Expert Advisor Wettbewerb an Expert Advisors innerhalb eines Expert Advisor

Mit dem virtuellen Handel können Sie einen anpassungsfähigen Expert Advisor kreieren, der das Einsetzen von virtuellen Trades im realen Markt automatisch ein- und ausschalten wird. Kombinieren Sie mehrere Strategien in einem einzigen Expert Advisor! Ihr Multi-System Expert Advisor wird automatisch eine Handelsstrategie wählen, mit der Sie, basierend auf der Rentabilität der virtuellen Trades, am besten im realen Markt handeln können. Diese Herangehensweise ermöglicht eine Reduzierung der Inanspruchnahme und eine Erhöhung der Rentabilität Ihrer Arbeit auf dem Markt. Experimentieren Sie und teilen Sie Ihre Ergebnisse mit anderen! Ich denke, viele Leute werden sich dafür interessieren, Ihr Portfolio von Strategien kennenzulernen.

Die Verwendung der Fuzzy-Logik im Trading mit Hilfe von MQL4 Die Verwendung der Fuzzy-Logik im Trading mit Hilfe von MQL4

Der Artikel enthält Beispiele für die Fuzzy-Logik-Theorie im Trading mit Hilfe von MQL4. Es wird die Entwicklung eines Indikators und eines EAs durch die FuzzyNet Bibliothek für MQL4 beschrieben.

Wie ein Marktindikator für alle nicht standarten Charts geschrieben werden soll Wie ein Marktindikator für alle nicht standarten Charts geschrieben werden soll

Mit Offline-Charts der Programmiersprache MQL4 und mit ein kleinem Lust darauf können Sie jede Art von Grafiken erhalten: "Tic-Tac-Toe", "Renko", "Kagi", "Range Bars", Equivolume Charts usw. In diesem Artikel zeigen wir Ihnen, wie Sie das ohne DLL tun können, deshalb könnten Sie solche Indikatoren wie "Two-in-one" im Markt veröffentlichen und erwerben.