Hallo,
ich bin beim Backtesting auf etwas gestossen, was nicht funktionierte, eventuell hat jemand Erfahrung damit.
Es geht um die QUIT Funktion bzw. um das Stoppen des Systems bei einem bestimmen STRATEGYPROFIT Wert.
Bei meinem Backwardstesting funktioniert das nicht, daher wollte ich frage ob jemand Erfahrung hat und ob das nur in backwards nicht geht, aber in echt schon.
z.B.
IF Strategyprofit -1000 THEN
QUIT
END IF
oder
if Gewinn < (-a*startcontracts + dyncontracts*a) THEN
contractnumber = 0
ENDIF
Danke für eure Hilfe.
MFG
Wolfi
Um eine Strategie vollständig zu stoppen, sollte dein Code so aussehen:
IF Strategyprofit <-1000 THEN
QUIT
ENDIF
Hast du das schon so geschrieben?
Sie können in der Dokumentation etwas mehr über die STOP-Funktion erfahren: https://www.prorealcode.com/documentation/quit/
Ja, habe ich probiert und soeben noch einmal probiert.
Das Ergebnis sieht aber komisch für mich auch, bis zu einem gewissen Wert funktioniert es recht gut und dann auf einmal ist ein Riesen Sprung drinnen.
Im Detail stelle den Wert auf -1000, dann stoppt er bzw. drowdown ist 1200, – 1500 drowndown 1700 und dann auf einmal bei -2500 ist der drowndown -14000, er hat aber keine Position die so groß ist dann.
Ich schick dir den Code hier mit.
Ich habe auch probiert die Zeile des Codes im Programm zu verändern, am Anfang oder Ende, aber das hat keinen Einfluss, was ich gesehen habe.
Der mitgeliefert Code ist irgendein System von mir.
// Tagestrend H1 17042017
// System optimiert wegen retourrechnen und weiters Stop Limit reduziert
// Festlegen der Code-Parameter H1
DEFPARAM CumulateOrders = False // Kumulieren von Positionen deaktiviert
// Das Handelssystem wird um 0:00 Uhr alle pending Orders stornieren und alle Positionen schließen. Es werden vor der "FLATBEFORE"-Zeit keine neuen Orderaufträge zugelassen.
DEFPARAM FLATBEFORE = 090000
// Stornieren aller pending Orders und Schließen aller Positionen zur "FLATAFTER"-Zeit
DEFPARAM FLATAFTER = 173000
// dynamische Anpassung contract auf Basis Evaluierung / testen des Wertes
//c1 = AverageTrueRange[10](close)
IF Strategyprofit <-2500 THEN
QUIT
ENDIF
startcontracts = 5 //start of contract system with 2000 Euro Base
Gewinn = STRATEGYPROFIT
if gewinn > 2000 then
dyncontracts = 1
ENDIF
if gewinn > 4000 then
dyncontracts = 2
ENDIF
if gewinn > 6000 then
dyncontracts = 3
ENDIF
if gewinn > 8000 then
dyncontracts = 4
ENDIF
if gewinn > 10000 then
dyncontracts = 5
ENDIF
//dyncontracts = round(Gewinn/1500)
//dyncontracts = 0
contractnumber = startcontracts + dyncontracts
//c5 = AverageTrueRange[10](close)
indicator2 = Average[200](close)
indicator3 = Average[200](close)
//indicator4 = Average[80](close)
//indicator5 = Average[80](close)
c2 = (indicator2 > indicator3[4])
c3 = (indicator2 < indicator3[4])
//c4 = (indicator4 > indicator5[7])
//c5 = (indicator4 < indicator5[7])
if currenttime = 100000 and c2 then
BUY contractnumber CONTRACT AT MARKET
ENDIF
if currenttime = 100000 and c3 then
SELLSHORT contractnumber CONTRACT AT MARKET
ENDIF
SET STOP %LOSS 0.55
//SET STOP LOSS 1.5*c1
//SET TARGET %PROFIT 0.8
//SET TARGET PROFIT 1.5*c1
//----
Weil auch der höchste berechnete Verlust nicht in einer Größenordnung ist, wo man sagt er macht Tausende Euro Minus bei einem falschen Trade.
MFG
Wolfi
Strategieprofit nur geschlossene Aufträge, es berechnet nicht den ganzen Gewinn mit aktuellen geöffneten Aufträgen. Wussten Sie es schon?
Das ist mir bekannt, das wenn alle Positionen geschlossen sind die Berechnung erfolgt und nicht die Potentielle Gewinne berücksichtig werden. Für mich ist es aber trotzdem nicht erklärbar, warum ein so großer Sprung drinnen ist.
ich sehe z.B. das bei einer Erhöhung des Verlustes bei welchem das System beendet werden soll, dass ein gewaltiger Sprung im Drowndown vorhanden ist, der weit über dieser Grenze liegt, aber der angezeigte maximale Verlust ist viel kleiner, siehe z.B. aus den beigefügten Bilder.
In den Bilder sieht man:
DAXmini, H1, 10.000 Startkapital, Spread 1
- Bild ist mit Grenze bei -2000 Euro = sieht logisch aus
- Bild ist mit Grenze bei -2000 Euro = sieht nicht logisch aus, weil max. drohdown = 14000 Euro, aber Höchster Verlust ist mit 702 Euro angeführt
–> Also wäre der extrem Fall, das System hat einen Strategyprofit von -1999,99 Euro und beim nächsten Trade können maximal die -702 Euro (höchster Verlust) hinzukommen und dann das System gestoppt werden.
Eventuell habe ich einen Gedankenfehler, aber so würde ich mir diese Funktionen erwarten aus den vorhanden Zahlen aus dem Backtesting.
Meiner Meinung nach sollten Sie GRAPH STRATEGYPROFIT und sehen, ob es effektiv den -2000 Verlust und wann erreicht hat.
Vielen Dank, ich hab meinen Fehler schon gesehen, dass System funktioniert schon. Der Drowndown und maximale Verlust haben keine Aussage, weil erst bei einem absolut Wert von -2000 des Systemes, es abgeschalten wird.
Der Drowdown kann auch passieren natürlich nach dem vorher schon viel viel mehr gewonnen wurde und dadurch nicht die Schwelle von -2000 durchbrochen wird.
Daher habe ich dann das System entwickelt, welches den Stop kontinuierlich nachzieht.
if Gewinn < (-a*startcontracts + dyncontracts*a) THEN
contractnumber = 0
ENDIF
Vielen Dank beim Schreiben hier ist mir nun der Fehler aufgefallen und vielen Dank für den Hinweis mit der GRAPH-Funktion
Hallo und vielen Dank für die tolle Info!
if Gewinn < (-a*startcontracts + dyncontracts*a) THEN
contractnumber = 0
ENDIF
Bitte das noch einmal für Nicht Mathematiker wenn möglich. Besonders würde mich das (-a*) interessieren von der Bedeutung her.
bedeutet dass das Strategyprofit damit das System nicht ganz abschaltet sondern in der eingestellten Anzahl die Strategie sich wiederholen lässt.