Maschinelles Lernen im Handel: Theorie, Modelle, Praxis und Algo-Trading - Seite 120

 
Alexey Burnakov:
  • Ich werde versuchen, Modelle auf der Grundlage des maximalen FV auszuwählen (jetzt wähle ich Modelle nach MO aus). Das heißt, ich werde die Funktion zur Bewertung der Modellqualität ändern. HZ....

Die richtige Funktion zur Bewertung der Qualität des Modells ist sehr wichtig, denn das, was Sie suchen und zu maximieren versuchen, ist das, was Sie am Ende erhalten werden. Wenn Sie die Modellgenauigkeit verwenden, kann es leicht zu einem lokalen Maximum kommen, bei dem das Modell immer die Klasse mit der höchsten Anzahl von Beispielen liefert. Für Trainingsdaten mit unausgewogenen Klassen ist es besser, F-Score oder Cohen's Kappa zu verwenden. Aber auch mit ihnen hatte ich Probleme, denn der Preisanstieg pro Bar kann unterschiedlich sein, und selbst bei einer positiven Schätzung kann man im Minus sein - die Anzahl der Gewinngeschäfte wird höher sein als die der Verlustgeschäfte, aber ein paar Verlustgeschäfte können große, uneinbringliche Verluste verursachen. Die Handelssimulation und die Bewertung des Modells auf der Grundlage der Handelsergebnisse ist das Richtige, da stimme ich Ihnen zu, ich habe vor kurzem auch damit begonnen. Sie benötigen Rentabilität bei geringem Drawdown - daher sollte die Modellbewertung diese Konzepte verwenden.

Ich denke, dass MO keine gute Wahl ist, weil es den Drawdown nicht berücksichtigt, der wichtig ist. Von allen Funktionen, die für die Einschätzung von EAs im MT5 zur Verfügung stehen, gefallen mir Recovery Factor und Sharpe Ratio am besten.
Der Erholungsfaktor ist der Gesamtgewinn geteilt durch die maximale Inanspruchnahme während des gesamten Zeitraums. Ziemlich einfach, aber effektiv.
Sharpe Ratio - viele Beschreibungen im Internet, aber ich habe nicht viele Formeln gefunden. Es gibt einen Code für MT4, ich denke, wir sollten ihn auf R übertragen und ausprobieren.

double GetSharpeRatioFromHistory(double riskFreeYearlyIncome = 0.01){
   double profitsArray[];
   int profitsArraySize = 0;
   
   double profitsAvg = 0.0;
   int profitsAvgCount = 0;
   
   int ordersHistoryTotal = OrdersHistoryTotal();
   if(ordersHistoryTotal == 0){
      return 0.0;
   }
   for(int i=0; i<ordersHistoryTotal; i++){
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){
         if((OrderSymbol() == _Symbol) && (OrderMagicNumber() == magic)){
            double profitForTrade = (OrderProfit() + OrderCommission() + OrderSwap());
            double seconds = double(OrderCloseTime() - OrderOpenTime());
            double riskFreeRate = riskFreeYearlyIncome / double(365*24*60*60) * seconds;
            double tradeResult = profitForTrade - riskFreeRate;
            
            profitsArraySize = ArrayResize(profitsArray, profitsArraySize+1);
            if(profitsArraySize>0){
               profitsArray[profitsArraySize-1] = tradeResult;
            }
            
            profitsAvg += tradeResult;
            profitsAvgCount++;
         }
      }
   }
   
   if(profitsArraySize == 0){
      return 0.0;
   }
   
   profitsAvg /= double(profitsAvgCount);
   
   double stdDev = 0.0;
   for(int i=0; i<profitsArraySize; i++){
      stdDev += ((profitsArray[i]-profitsAvg)*(profitsArray[i]-profitsAvg)/double(profitsArraySize));
   }
   
   if(stdDev == 0.0){
      return 0.0;
   }

   return profitsAvg/stdDev;
}

Der Parameter riskFreeYearlyIncome - jährliche Rendite für eine risikofreie Anlage (Bankeinlage), im Beispiel ist es 1%. Die Sharpe Ratio berücksichtigt, wie viel besser die Strategie im Vergleich zu einer solchen Anlage ist.
double seconds = double(OrderCloseTime() - OrderOpenTime()) - wie lange ein Handel in Sekunden geöffnet war. Beim Bar Trading ist dies jeweils die Anzahl der Sekunden in einem Bar.

 
Dr.Trader:

1) Die richtige Funktion zur Bewertung der Qualität des Modells ist sehr wichtig, denn das, wonach wir suchen und was wir zu maximieren versuchen, ist das, was wir am Ende erhalten.

2) Aber auch mit ihnen hatte ich Probleme, weil der Preisanstieg pro Bar kann unterschiedlich sein, und auch mit einer positiven Bewertung, können Sie im negativen sein - die Zahl der Gewinn-Trades wird mehr als verlieren, aber ein paar Verlust-Trades können eine große, unwiederbringliche Verlust haben.

3) Einen Handel zu simulieren und das Modell auf der Grundlage der Handelsergebnisse zu bewerten, ist richtig, da stimme ich Ihnen zu, ich habe vor kurzem auch damit begonnen. Sie brauchen Rentabilität bei geringem Drawdown - daher sollte die Modellbewertung diese Konzepte verwenden.

4)

Ich denke, dass MO keine gute Wahl ist, weil es den Drawdown nicht berücksichtigt, der wichtig ist. Meine Lieblingsfunktionen im MT5 sind Recovery Factor und Sharpe Ratio.
Der Erholungsfaktor ist der Gesamtgewinn geteilt durch die maximale Inanspruchnahme während des gesamten Zeitraums. Ziemlich einfach, aber effektiv.
Sharpe Ratio - viele Beschreibungen im Internet, aber ich habe nicht viele Formeln gefunden. Es gibt einen solchen Code für MT4, ich denke, wir sollten ihn auf R übertragen und ausprobieren.


1) Unbedingt

2) genau.

3) Ja, es hilft, die Verzerrung des Ausgangspunkts der Bewertung zu beseitigen.

4) FS ist der Rückgewinnungsfaktor. Ich habe generell großen Respekt vor ihr. Ich gebe das in die Schätzfunktion ein, das ist ganz einfach.

Sharpe. Es ist ganz einfach! Ich erkläre.

a) Sie erhalten einen Vektor von Handelsergebnissen in Pips, richtig?

b) Sie müssen den Handel mit REINVESTMENT simulieren und den Vektor der Punkte in einen Vektor der prozentualen Abstufungen der Einlage umwandeln. Beispiel: Wir beginnen mit 100.000 Dollar. Wir handeln 0,1 Lot zu 0,001 (zehn Punkte). Das sind 10 Dollar pro Los. Dieser Wert entspricht also 10 / 100 000. Und so weiter, wobei die Vergrößerung oder Verkleinerung der Partie berücksichtigt wird.

c) Berechnen Sie anhand des sich ergebenden Vektors der prozentualen Abstufungen: Durchschnitt, st.Abweichung.

d) Geben Sie eine bestimmte risikofreie Rendite pro Jahr ein (3%) - die Zahl ist bedingt, eine kleine Zahl.

e) Entweder rechnen Sie Ihre Geschäfte in durchschnittliche Jahreserträge um, oder Sie zerlegen die risikofreie Rendite pro Jahr durch die durchschnittliche Rendite pro Geschäft. Erledigt.

f) (Ihre durchschnittliche Rendite pro Handel (pro Zeitraum) - risikofreie Rendite) / Standardabweichung

Ich habe den Code für R noch nicht. Aber es sollte nicht schwierig sein, eine solche Funktion zu schreiben.

 

Auf den Finanzmärkten wird alles umgeschult! Auch was nicht umgeschult wird, wird umgeschult.

Die robuste lineare Regression ist weniger retrainiert, bietet aber eine so beschissene Lernqualität, dass sie auch bei der Extrapolation auf neue Daten beschissen ist.

 
Alexey Burnakov:

Ihre Idee, Kursgewinne zu kategorisieren, war für mich von Anfang an eine rein emotionale Angelegenheit. Wenn wir Trends vorhersagen, schauen wir uns ZZ an und es ist klar: hier ist eine Klasse und hier ist eine andere Klasse. Betrachtet man die Kurve des Preisanstiegs, so zeigt sich ein chaotisches Ruckeln um den Nullpunkt. Wo sind hier die deutlich sichtbaren Klassen?

Es ist ein reines Gefühl, dass ich der Statistik große Bedeutung beimesse - alles sollte ohne Mathematik klar und deutlich sein.

Darüber hinaus wird für Preissteigerungen auf den Finanzmärkten seit vielen Jahren das ARIMA-ARCH-Verfahren entwickelt, das recht gut funktioniert. Diese Oper hat sogar Modelle, die Hearst berücksichtigen. Was ist besser als eine Klassifizierung?

Klassifizierung ist die Muster - "Kopf und Schultern", die Suche nach denen wir automatisiert haben und die eine deutlich sichtbare Klasse voraussagen. Bei der Klassifizierung finden wir ein Muster (z. B. in Form eines Baumes) und sagen: "Nach diesem Muster wird es Wachstum geben. Wenn wir die Zielvariable richtig formuliert haben, wird sie das auch. Hier ist ZZ nicht die richtige Zielvariable. Die Idee dabei war, ein zukünftiges Wachstum von 100 Pips vorherzusagen. Eine solche Zielvariable scheint mir viel richtiger zu sein.

Schlussfolgerung. Wir sollten mit der Zielvariablen beginnen, das Ziel ist immer unser Ein und Alles, falsche Ziele führen in den Sumpf

 
SanSanych Fomenko:

Ihre Idee , Kursgewinne zu kategorisieren , war für mich von Anfang an eine rein emotionale Angelegenheit. Wenn wir Trends vorhersagen, schauen wir uns ZZ an und es ist klar: Hier ist eine Klasse und hier ist eine andere Klasse. Betrachtet man die Kurve der Preissteigerungen, so zeigt sich ein chaotisches Ruckeln um den Nullpunkt. Wo sind hier die deutlich sichtbaren Klassen?

Es ist ein reines Gefühl, dass ich der Statistik große Bedeutung beimesse - alles sollte ohne Mathematik klar und deutlich sein.

Darüber hinaus wird für Preissteigerungen auf den Finanzmärkten seit vielen Jahren das ARIMA-ARCH-Verfahren entwickelt, das recht gut funktioniert. Diese Oper hat sogar Modelle, die Hearst berücksichtigen. Was ist besser als eine Klassifizierung?

Klassifizierung ist die Muster - "Kopf und Schultern", die Suche nach denen wir automatisiert haben und die eine deutlich sichtbare Klasse voraussagen. Bei der Klassifizierung finden wir ein Muster (z. B. in Form eines Baumes) und sagen: "Nach diesem Muster wird es Wachstum geben. Wenn wir die Zielvariable richtig formuliert haben, wird sie das auch. Hier ist ZZ nicht die richtige Zielvariable. Die Idee dabei war, ein zukünftiges Wachstum von 100 Pips vorherzusagen. Eine solche Zielvariable scheint mir viel richtiger zu sein.

Schlussfolgerung. Man muss mit der Zielvariablen beginnen, wie immer ist das Ziel unser Ein und Alles, falsche Ziele führen in den Sumpf

Ich weiß nicht, was daran gefühlsmäßig falsch sein soll. Das ist eine Möglichkeit, die Sache zu betrachten. Die Farbe der Kerze wird auch so genannt.

Ich möchte Sie daran erinnern, dass die Regressions- und Klassifizierungsaufgaben vor der Phase des Aufbaus eines rentablen Systems eine feste Größe waren.

Außerdem bin ich zu dem Punkt gekommen, an dem ich nicht nur das Vorzeichen des Wachstums vorhersage, sondern ein Wachstum mit einem größeren Modul. Das heißt, wir kaufen nur dort, wo das System ein starkes Wachstum vorhersagt, nicht nur ein Wachstum. Auch beim Verkauf. Technisch gesehen, lernt die Maschine die Regression. Und dann interpretiere ich seine Ausgabe als stark aufwärts, stark abwärts, baumelnd in einem Kanal.

Dies kommt der Vorhersage eines künftigen Anstiegs um 100 Pips sehr nahe. Nur ist mir selbst nicht klar, wie Sie sich die Formalisierung einer solchen Zielvorgabe vorstellen. Was bedeutet es, wenn vor dem Wachstum ein Rückgang von 90 Pips zu verzeichnen ist und dieses Wachstum erst in einer Woche erreicht wird?

Bei meinem 9-Uhr-Horizont liegt ein starker Anstieg bei etwa 20 Pips. Nach 9 Stunden wird der Handel geschlossen.

Und in der Tat sage ich die Klasse jetzt überhaupt nicht voraus (Anstieg / Rückgang / Schwätzer / starker Anstieg). Ich baue in der Tat ein System auf, dessen Note in der Lernphase an der Reifeerwartung des Berufs gemessen wird. Das heißt, die Klassifizierungsgenauigkeit mag gering sein (bei mir 53 %), aber wenn man in die richtige Richtung trifft, ist der Gewinn etwas höher als wenn man nicht trifft. Spüren Sie den Unterschied in der Problemstellung? Die Klassifizierungsgenauigkeit korreliert mit der Rentabilität des Handels, stimmt aber nicht vollständig mit ihr überein.

 

Übrigens ist auch der Erholungsfaktor in Abhängigkeit von der Bewertung der Modellqualität einseitig. Ich kann 10 Geschäfte und 1 Verlustgeschäft haben, oder 500 Geschäfte und 10 Verlustgeschäfte. Im zweiten Fall kann die FS niedriger und der Gewinn 50 Mal höher sein.

Alternativ können Sie auch den Gesamtgewinn nehmen und davon den maximalen Drawdown abziehen. Hier wird zumindest der Gewinn maximiert.

Oder der traditionelle Rentabilitätsfaktor: Gesamtgewinn/Gesamtverlust.

 
Alexey Burnakov:

Im zweiten Fall kann die FS niedriger und der Gewinn 50 Mal höher sein.

Es kommt auf das Risiko an, das Sie eingehen wollen. Zum Beispiel gibt es zwei Signale: Das erste bringt 100% Gewinn pro Jahr bei einem maximalen Drawdown von 10%. Das zweite Signal beträgt 300% des Gewinns bei einem Drawdown von 40%. Das zweite Signal ist also die Gewinnführung.
Aber wenn Sie PV berechnen, wird der Führer das erste Signal sein, und es ist richtig, weil Sie einfach die Größe der Transaktionen (in Lots) des ersten Signals in viermal erhöhen können, was den gleichen Drawdown wie das zweite Signal geben wird, aber mit größeren Gewinnen. Wenn Sie keinen hohen Prozentsatz Ihres Kontos riskieren möchten, können Sie die Größe der Lose des zweiten Signals um das Vierfache reduzieren, was das gewünschte Risiko von 10 % des Kontos ergibt, aber der Gewinn wird auch geringer sein als der des ersten Signals.

Das heißt, der Handelsplan für die Strategie kann wie folgt aussehen: Bestimmen Sie den maximal möglichen Drawdown durch die Roll-Forward-Strategie; berechnen Sie, wie oft dieser Drawdown größer/kleiner ist als Ihr zulässiger Wert für den Kontostand; berechnen Sie die Losgröße, damit diese Zahlen konvergieren.
Die Verwendung von FS bedeutet, dass Sie vor Beginn des Handels alle Risiken kalkulieren und eine geeignete Losgröße festlegen. Je geringer der Drawdown der Strategie beim Handel ist, desto größer ist das Handelsvolumen, das Sie verwenden können.

 
Alexey Burnakov:

Oder der traditionelle Rentabilitätsfaktor: Gesamtgewinn/Gesamtverlust.

IMHO ist das eher akzeptabel:

kriterium_auswertung_TC = total_profitable_transactions / (total_profitable_transactions + total_loss_transactions)

vorausgesetzt, dass der Handel mit einem festen Los erfolgt.

Wenn das Kriterium höher als 0,5 ist, hat der TS einen Gesamtgewinn, andernfalls einen Verlust ausgewiesen.

Der Vorteil dieses Kriteriums ist, dass es streng rationiert ist und sein Wert den Bereich von 0 bis einschließlich 1,0 nicht überschreiten kann.

Drawdowns, auch trotz des Endgewinns des Handels, beeinflussen dieses Kriterium negativ, d.h. sie werden als negativer Faktor betrachtet.

 
Yury Reshetov:

IMHO ist das eher akzeptabel:

kriterium_auswertung_TC = total_profitable_transactions / (total_profitable_transactions + total_loss_transactions)

unter der Bedingung, dass mit einem festen Los gehandelt wird.

Wenn das Kriterium höher als 0,5 ist, hat der TS einen Gewinn, andernfalls einen Verlust ausgewiesen.

Der Vorteil dieses Kriteriums ist, dass es streng rationiert ist und sein Wert den Bereich von 0 bis einschließlich 1,0 nicht überschreiten kann.

Drawdowns, auch trotz des Endgewinns des Handels, beeinflussen dieses Kriterium negativ, d.h. sie werden als negativer Faktor betrachtet.

"Die_Anzahl_der_Verluste" - ich möchte klarstellen, dass ich den absoluten Wert meine. Vielen Dank, ich habe noch nie ein solches normiertes Kriterium gesehen.
 
Yury Reshetov:

IMHO ist das eher akzeptabel:

kriterium_auswertung_TC = total_profitable_transactions / (total_profitable_transactions + total_loss_transactions)

unter der Bedingung, dass mit einem festen Los gehandelt wird.

Wenn das Kriterium höher als 0,5 ist, hat der TS einen Gewinn, andernfalls einen Verlust ausgewiesen.

Der Vorteil dieses Kriteriums ist, dass es streng rationiert ist und sein Wert den Bereich von 0 bis einschließlich 1,0 nicht überschreiten kann.

Drawdowns, auch trotz des Endgewinns des Handels, beeinflussen dieses Kriterium negativ, d.h. sie werden als negativer Faktor betrachtet.

Was ist, wenn wir den Hauptgewinn bei einigen wenigen Geschäften erzielen, während bei Tausenden von anderen Geschäften kleine Verluste anfallen? - Ich halte das nicht für eine gute Idee.