Diskussion zum Artikel "Nützliche und exotische Techniken für den automatisierten Handel"

 

Neuer Artikel Nützliche und exotische Techniken für den automatisierten Handel :

In diesem Artikel werde ich einige sehr interessante und nützliche Techniken für den automatisierten Handel vorstellen. Einige davon sind Ihnen vielleicht schon bekannt. Ich werde versuchen, die interessantesten Methoden zu behandeln und werde erklären, warum es sich lohnt, sie zu verwenden. Außerdem werde ich zeigen, wozu diese Techniken in der Praxis taugen. Wir werden Expert Advisors erstellen und alle beschriebenen Techniken anhand von historischen Kursen testen.

In der Tat kann diese Technik nicht nur für Martingale, sondern auch für alle anderen Strategien verwendet werden, die eine ausreichend hohe Handelsfrequenz haben. In diesem Beispiel werde ich die Metrik basierend auf dem Saldorückgang verwenden. Denn alles, was mit dem Saldo zusammenhängt, wird als einfacher angesehen. Lassen Sie uns die Saldenkurve in steigende und fallende Segmente unterteilen. Zwei benachbarte Segmente bilden eine Halbwelle. Die Anzahl der Halbwellen tendiert gegen unendlich, da die Anzahl der Transaktionen gegen unendlich tendiert. Eine endliche Stichprobe genügt uns, um das Martingal ein wenig profitabler zu machen. Das folgende Diagramm erklärt die Idee:

Saldenwellen

Die Abbildung zeigt eine gebildete Halbwelle und diejenige, die gerade begonnen hat. Jedes Saldenkurve besteht aus solchen Halbwellen. Die Größe dieser Halbwellen schwankt ständig, und wir können auf dem Diagramm immer Gruppen solcher Halbwellen unterscheiden. Die Größe dieser Halbwellen ist in der einen Welle kleiner und in der anderen größer. Indem wir also die Losgrößen schrittweise verringern, können wir warten, bis eine Halbwelle mit einem kritischen Drawdown in der aktuellen Gruppe erscheint. Da die Losgrößen dieses kritischen Drawdowns in der Serie minimal sein werden, wird dies die gesamte durchschnittliche Metrik aller Wellengruppen erhöhen und als Ergebnis sollten die gleichen Leistungsvariablen des ursprünglichen Tests ebenfalls steigen.

Für die Implementierung benötigen wir zwei zusätzliche Eingabeparameter für das Martingal:

  • { DealsMinusToBreak } - die Anzahl der Verlustpositionen des vorherigen Zyklus, bei deren Erreichen die Losgröße des Zyklus auf den Startwert zurückgesetzt werden soll
  • { LotDecrease } - Schritt zum Verringern der Losgröße des Zyklus, wenn ein neuer Zyklus in der Historie der Abschlüsse erscheint

Mit diesen beiden Parametern können wir erhöhte Losgrößen für sichere Halbwellengruppen und reduzierte Losgrößen für gefährliche Halbwellengruppen bereitstellen, was theoretisch die oben genannten Leistungskennzahlen erhöhen sollte.

Autor: Evgeniy Ilin

 

traditionell nützlich und aufschlussreich.

Denkanstöße

 

etwas konvergierten alle Funktionen zu der klassischen

Volumen_im_Markt = K*exp(N*Saldoabschlag)

oder ich habe auf der falschen Diagonale gelesen :-)

🤔

 
Maxim Kuznetsov:

alle Funktionen sind zu den Klassikern übergegangen.

Volumen_im_Markt = K*exp(N*Saldoabzug)

oder ich habe auf der falschen Diagonale gelesen :-)

🤔

Nun, wenn wir über klassische Martingale sprechen, dann ja ) Ich nehme an, du meinst den letzten Punkt. Da ist es ein bisschen anders. Vielleicht sollte ich das erklären. Wenn wir die Equity- oder Balance-Linie in Segmente unterteilen, gibt es Segmente mit erhöhtem durchschnittlichem Drawdown und mit verringertem Drawdown. In den Segmenten, in denen der Drawdown erhöht ist, sollten wir versuchen, ein Minimum an Lots bereitzustellen, und in den Segmenten, in denen der Drawdown verringert ist, ein Maximum an Lots, so dass wir die Bedeutung der riskanten Bereiche verringern und die Bedeutung der sicheren Bereiche erhöhen. Das Ergebnis ist, dass eine verlustbringende Strategie durch den geschickten Einsatz dieser Technik in eine leicht positive Strategie umgewandelt werden kann. Es kann viele Variationen geben, man muss es nur versuchen, sonst geht es nicht. Theorie ohne Praxis ist nur Theorie )

 
Evgeniy Ilin:

Nun, wenn wir über das klassische Martingal sprechen, dann ja ) Ich verstehe, dass Sie den letzten Punkt meinen. Dort ist es ein bisschen anders. Vielleicht sollte ich das erklären. Wenn wir die Equity- oder Balance-Linie in Segmente unterteilen, gibt es Segmente mit erhöhtem durchschnittlichem Drawdown und mit verringertem Drawdown. In den Segmenten, in denen der Drawdown erhöht ist, sollten wir versuchen, ein Minimum an Lots bereitzustellen, und in den Segmenten, in denen der Drawdown verringert ist, ein Maximum an Lots, so dass wir die Bedeutung der riskanten Bereiche verringern und die Bedeutung der sicheren Bereiche erhöhen. Das Ergebnis ist, dass eine verlustbringende Strategie durch den geschickten Einsatz dieser Technik in eine leicht positive Strategie umgewandelt werden kann. Es kann viele Variationen geben, man muss es nur versuchen, sonst geht es nicht. Theorie ohne Praxis ist nur Theorie )

wenn ich wüsste, wo ich hinfallen soll, hätte ich ein Bett gemacht :-))

es geht um die Bereiche mit erhöhtem/verringertem Saldoabzug und Risikobereiche...

Sie sind nicht im Voraus bekannt, sondern erst im Nachhinein. Und wenn sie bekannt wären, dann würde die Methode des "auf dem Zaun sitzen" alles beherrschen :-) einfach nicht in riskanteren Bereichen handeln.

 
Maxim Kuznetsov:

Wenn ich wüsste, wohin ich fallen soll, hätte ich ein Bett dafür gemacht.)

es geht um die Bereiche erhöhter/verringerter Saldoabzug und Risikobereiche....

sie sind nicht im Voraus bekannt, sondern erst im Nachhinein. Und wenn sie bekannt wären, dann würde die Methode "auf dem Zaun sitzen" alles beherrschen :-) einfach nicht in riskanteren Bereichen handeln.

Es ist ganz einfach, auf einen niedrigeren Drawdown folgt immer ein höherer Drawdown und umgekehrt ) jetzt können Sie sich einen Strohhalm legen )

 

wirklich sehr nützlich. Um Gewinn zu machen, indem man Lose kontrolliert, anstatt feste Lose zu verwenden.

Übrigens, was ist der Test Timeframe für die PartialClosing EA?

 
Zhongquan Jiang:

wirklich sehr nützlich. Profitieren Sie von der Kontrolle der Lose, anstatt feste Lose zu verwenden.

Übrigens, was ist der Test Timeframe für die PartialClosing EA?

Vielen Dank! Partial Closing Backtest ist 2000-2021 auf M5 Zeitrahmen. Aber ich denke, es muss auch auf M1 oder einem höheren Zeitrahmen funktionieren. )

 
Evgeniy Ilin:

Es ist ganz einfach, auf einen niedrigeren Drawdown folgt immer ein höherer Drawdown und umgekehrt ) jetzt können Sie Ihr Stroh legen )

In der Praxis sollte das Bild aus dem Artikel ein paar mehr Punkte haben, wie diese.


Momente, in denen der Drawdown über das Modell oder die Erholung deutlich hinausgegangen ist...
nach denen Maßnahmen ergriffen werden, um Lose zu manipulieren
je näher sie an den Spitzen sind, desto näher sind wir an den klassischen Martingales, aber weiter weg, natürlich, interessanter.

 
Maxim Kuznetsov:

In der Praxis sollte das Bild aus dem Artikel ein paar mehr Punkte wie diese haben


Momente, in denen der Drawdown über das Modell oder die Erholung deutlich hinausgegangen ist...
nach denen Maßnahmen ergriffen werden, um Lose zu manipulieren
je näher sie an den Spitzen sind, desto näher sind wir an den klassischen Martingales, aber weiter weg, natürlich, interessanter.

Nun, im Allgemeinen, ja, aber es ist notwendig, den Leuten etwas Futter zu geben, damit sie anfangen, ein wenig nachzudenken). Es gibt kein explizites Rezept, nur das allgemeine Prinzip, dass all diese Dinge ein Wellenprozess sind, wie man die Grenzen der Bereiche genau definiert, ist ein großer Spielraum für Kreativität, ich habe nur das einfachste Beispiel gegeben. Im Allgemeinen gibt allein das Verständnis dieses Prinzips einen Drehpunkt, von dem aus man anfangen kann zu denken ) und es ist nicht einmal notwendig, dass meine Rezepte die besten sein werden ) je mehr Leute, desto unwahrscheinlicher, dass meine Lösung die beste sein wird .

 

Wahrscheinlich habe ich den Sinn nicht ganz verstanden, aber sollte es wirklich so sein und nicht umgekehrt (hervorgehoben)?

void PartialCloseType()//teilweise Schließung des Auftrags
   {
   bool ord;
   double ValidLot;
   MqlTick TickS;
   SymbolInfoTick(_Symbol,TickS);
            
   for ( int i=0; i<OrdersTotal(); i++ )
      {
      ord=OrderSelect( i, SELECT_BY_POS, MODE_TRADES );
                            
      if ( ord && OrderMagicNumber() == MagicF && OrderSymbol() == _Symbol )
         {
         if ( OrderType() == OP_BUY )
            {
            ValidLot=CalcCloseLots(OrderLots(),(Open[0]-Open[1])/_Point);
            if ( ValidLot > 0.0 ) ord=OrderClose(OrderTicket(),ValidLot,TickS.bid,MathAbs(SlippageMaxClose),Green);
            }
         if ( OrderType() == OP_SELL )
            {
            ValidLot=CalcCloseLots(OrderLots(),(Open[1]-Open[0])/_Point);
            if ( ValidLot > 0.0 ) ord=OrderClose(OrderTicket(),ValidLot,TickS.ask,MathAbs(SlippageMaxClose),Red);
            }         
         break;
         }
      }

In diesem Fall kommt es zu einer teilweisen Schließung einer Position, wenn die Kursbewegung und der festgelegte Auftrag in der Richtung übereinstimmen. D.h. eine gewinnbringende Position wird geschlossen, während eine Verlustposition bestehen bleibt.