Probleme mit Code; “Highest” bzw “Lowest”
Forums › ProRealTime Deutsch forum › ProOrder Support › Probleme mit Code; “Highest” bzw “Lowest”
- This topic has 14 replies, 3 voices, and was last updated 2 years ago by robertogozzi.
-
-
01/29/2022 at 12:46 PM #186959
Hallo alle zusammen!
Ich habe vor wenigen Wochen einen Testaccount mit PRT V11 abgeschlossen.
Meine in der Zeit erstellten Algo-Codes liefen schon ganz gut im Probebetrieb.
Nun habe ich kürzlich ein Konto bei IG eröffnet und mit der Premium-Version von PRT verknüpft.
Beim Upload meiner Codes stellte ich (nach mühsamen Trial&Error) fest, daß es wohl Probleme gibt mit meinen “Highest” und “Lowest”-Codestücken.
ZB
“IF Close < Lowest[2] AND … THEN …” lief vorher (im Backtest) einwandfrei.
“IF Close > Highest[5] AND … THEN …” ebenso.Alles jeweils im Tick-by-Tick-Mode.
Nun stelle ich beim Backtest desselben Codes via IG/PRT fest, daß ALLE meine HIGHEST/LOWEST Bedingungen offenbar als “nicht erfüllt” gelten und meine Einstiegs-(Buy/Sell)codes daher auch keine Einstiege mehr generieren.
Sobald ich exakt diese Bedingungen lösche funktioniert der Rest technisch einwandfrei – wenn auch das Ergebnis nicht wie gewünscht aussieht.
Ich habe leider keine Ahnung, woran das liegt.
Zeitzonen sind korrekt eingestellt, Datenfeed ist da.Gibt es jemanden, der ähnliche Erfahrungen gemacht hat und mir da vielleicht aushelfen kann?
Vielen vielen Dank im Voraus!
Beste Grüße
Stefan
01/29/2022 at 3:04 PM #186977Sie sollten Ihren Code und Informationen über das gehandelte Instrument/Vermögenswert und den Zeitrahmen veröffentlichen, um Ihre Trades replizieren zu können.
01/29/2022 at 3:31 PM #186988Handelwert: ALLE (konkret aktuell “Deutschland 40 Kassa 1€”)
Zeitrahmen: ALLE (Backtest und Live)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232DEFPARAM PreLoadBars = 5000// Festlegen der Code-ParameterDEFPARAM 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 = 080000// Stornieren aller pending Orders und Schließen aller Positionen zur "FLATAFTER"-ZeitDEFPARAM FLATAFTER = 220000// Verhindert das Platzieren von neuen Ordern zum Markteintritt oder Vergrößern von Positionen vor einer bestimmten UhrzeitnoEntryBeforeTime = 080000timeEnterBefore = time >= noEntryBeforeTime// Verhindert das Platzieren von neuen Ordern zum Markteintritt oder Vergrößern von Positionen nach einer bestimmten UhrzeitnoEntryAfterTime = 220000timeEnterAfter = time < noEntryAfterTime// Verhindert das Trading an bestimmten WochentagenTradeday = OpenDayOfWeek > 0 OR OpenDayOfWeek < 6PositionSizeLong = 1PositionSizeShort = 1ForbiddenLong = 0ForbiddenShort = 0//*************************************************************************////allgemeines Daytrading M/W/D: o/o/o ////*************************************************************************//// Bedingungen zum Einstieg in Short-Positionen ////***********************************************//IF NOT LongOnMarket AND NOT ForbiddenShort AND TradeDay AND Time >= 091500 AND Time <= 214500 AND TRADEON THEN//TrendDown1IF Close < Close[1] AND Close[1] < Close[2] AND Average[50] < Average[100] AND Average[100] < Average[200] AND Average[2500] < Average[4500] AND Aroondown Crosses over Aroonup AND Aroondown < 80 AND RSI < 50 AND MACD < 0 THENTrailingFlag = 0SellShort PositionSizeShort CONTRACTS AT MARKETENDIF//SwingDown1IF Close < Open AND Close < Close[1] AND Close < Lowest[3] AND Close < Average[50] AND Average[50] < Average[100] AND Average[100] < Average[200] AND Close > Average[2500] AND Close > Average[4500] AND Aroondown Crosses over Aroonup AND Aroondown < 80 THENTrailingFlag = 0SellShort PositionSizeShort CONTRACTS AT MARKETENDIF//SwingDown2IF Close < Open AND Close < Close[1] AND Close < Lowest[2] AND Close > Average[2500] AND Close < Average[4500] AND Aroondown Crosses over Aroonup AND Aroondown < 40 AND Aroonup < 80 THENTrailingFlag = 0SellShort PositionSizeShort CONTRACTS AT MARKETENDIF//SwingDown3IF Close < Open AND Close < Close[1] AND Close < Lowest[2] AND Close > Average[1000] AND Close > Average[4500] AND Aroondown Crosses over Aroonup AND Aroondown < 40 AND Aroonup < 80 THENTrailingFlag = 0SellShort PositionSizeShort CONTRACTS AT MARKETENDIF//50Cross200downIF Close < Open AND Close < Close[1] AND Close < Lowest[2] AND Close < Average[50] AND Average[50] crosses under Average[200] AND MACD < 0 AND Close < Pivot THENTrailingFlag = 2SellShort PositionSizeShort CONTRACTS AT MARKETENDIFENDIF//**********************************************//// Bedingungen zum Einstieg in Long-Positionen ////*********************************************//IF NOT ShortOnMarket AND NOT ForbiddenLong AND TradeDay AND Time >= 091500 AND Time <= 214500 AND TRADEON THENIF Close > Open AND Close > Close[1] AND Close > Highest[3] AND Close > Average[50] AND Average[50] > Average[100] AND Average[100] > Average[200] AND Aroonup Crosses over Aroondown AND Aroondown < 30 AND Aroonup < 70 AND Close > Supertrend AND RSI > 60 THENTrailingFlag = 0Buy PositionSizeLong CONTRACTS AT MARKETENDIF//TrendUp2IF Close > Open AND Close > Close[1] AND Close > Highest[3] AND Close > Average[50] AND Close > Average[4500] AND Aroonup Crosses over Aroondown AND Aroondown < 30 AND Aroonup < 50 AND Close > Supertrend AND RSI > 60 THENTrailingFlag = 0Buy PositionSizeLong CONTRACTS AT MARKETENDIF//TrendUp3: Open>Highest löschen für TurboIF Close > Open AND Close > Close[1] AND Close > Highest[4] AND Close < Average[200] AND Aroonup Crosses over Aroondown AND Aroondown < 20 AND Aroonup < 50 AND RSI < 30 THENTrailingFlag = 0Buy PositionSizeLong CONTRACTS AT MARKETENDIF//SwingUp1IF Close > Open AND Close > Close[1] AND Close > Highest[3] AND Close < Average[2500] AND Close > Average[4500] AND Aroonup Crosses over Aroondown AND Aroonup < 70 AND RSI < 30 THENTrailingFlag = 0Buy PositionSizeLong CONTRACTS AT MARKETENDIF//SwingUp2IF Close > Open AND Close > Close[1] AND Close > Highest[3] AND Close > Average[200] AND Close < Average[2500] AND Close < Average[4500] AND Aroonup Crosses over Aroondown AND Aroonup < 70 THENTrailingFlag = 0Buy PositionSizeLong CONTRACTS AT MARKETENDIF//SwingUp3IF Close > Open AND Close > Close[1] AND Close > Highest[3] AND Close < Average[2500] AND Close < Average[4500] AND Aroonup Crosses over Aroondown AND Aroonup < 70 THENTrailingFlag = 0Buy PositionSizeLong CONTRACTS AT MARKETENDIF//50Cross200upIF Close > Open AND Close > Close[1] AND Close > Highest[3] AND Close > Average[50] AND Average[50] crosses over Average[200] AND MACD > 0 AND Close > Pivot THENTrailingFlag = 2Buy PositionSizeLong CONTRACTS AT MARKETENDIFENDIF//*************************************************************************////Xetra-Korrektur High Low Close, Pivot, Resistance, Support ////*************************************************************************//if Time = 220000 AND OPENDAYOFWEEK <6 AND OPENDAYOFWEEK >0 thenDayClose = CloseDayHigh = Highest[840]DayLow = Lowest[840]ENDIFPivot= (DayHigh + DayLow + DayClose) / 3ResR1 = Pivot + (Pivot - DayLow)ResR2 = Pivot + (Dayhigh - Daylow)ResR3 = Dayhigh + (2 * (Pivot - Daylow))SupS1 = Pivot - (Dayhigh - Pivot)SupS2 = Pivot - (Dayhigh - Daylow)SupS3 = Daylow - (2 * (Dayhigh - Pivot))//*************************************************************************////Moving-Average-Clustering-FilterCode (optional) ////*************************************************************************//ClusterSave = 1 //1=ON, 0=OFFx = 15*pipsize //15-pip rangema5 = average[5,0](close)ma50 = average[50,0](close)ma100 = average[100,0](close)ma200 = average[200,0](close)MaxMA = max(ma5,max(ma50,max(ma100,ma200)))MinMA = min(ma5,min(ma50,min(ma100,ma200)))IF (MaxMA - MinMA) <= x AND ClusterSave = 1 THENTradeon = 0ELSIF (MaxMA - MinMA) > x OR (ClusterSave = 0) THENTradeon = 1ENDIF//*************************************************************************////trailing stop function Risk, Long, Short ////*************************************************************************//trailingstartL = 35 //LONG trailing will start @trailinstart points profittrailingstartS = 35 //SHORT trailing will start @trailinstart points profittrailingL = 20 //trailing step to move the "stoploss"trailingS= 20 //trailing step to move the "stoploss"trailingR= 15 //trailing start+step to move the "stoploss" for risky positionsSaveDistanceL = 10 //Minimum Stop-Abstand 10 lt IGSaveDistanceS = 10 //Minimum Stop-Abstand 10 lt IGSaveDistanceR = 10 //Minimum Stop-Abstand 10 lt IGMinimumPlus = 3 //Anzahl Pips zum Breakeven inkl. Spread+GebührenSET TARGET pProfit 80//reset the stoploss valueIF NOT ONMARKET THENTrailingFlag = 0NewSL = 0FailsaveSL = 0ENDIF//************************////manage long positions ////***********************//IF LOngONMarket AND TrailingFlag = 0 THENnewSL = tradeprice(1)-(trailingstartL*pipsize)FailsaveSL = newSL-(trailingstartL*pipsize)ENDIF//breakevenIF (close-tradeprice(1)) >= ((MinimumPlus+SaveDistanceL)*pipsize) AND TrailingFlag = 0 THENTrailingFlag = 1newSL = tradeprice(1)+(3*pipsize)FailsaveSL = newSL-(trailingstartL*pipsize)ENDIFIF (close-newSL) >= ((trailingL)*pipsize) AND TrailingFlag = 1 THENnewSL = close-(trailingL*pipsize)FailsaveSL = newSL-(trailingstartL*pipsize)ENDIFIF LongOnMarket AND TrailingFlag = 2 THENnewSL = tradeprice(1)-(trailingR*pipsize)FailsaveSL = newSL-(trailingR*pipsize)//breakevenIF (close-tradeprice(1)) >= ((MinimumPlus+SaveDistanceR)*pipsize) THENnewSL = tradeprice(1)+(3*pipsize)FailsaveSL = newSL-(trailingR*pipsize)TrailingFlag = 3ENDIFIF (close-newSL) >= (trailingR*pipsize) AND TrailingFlag = 3 THENnewSL = close-(trailingR*pipsize)FailsaveSL = newSL-(trailingR*pipsize)ENDIFENDIF//************************////manage Short positions ////************************//IF ShortONMarket AND TrailingFlag = 0 THENnewSL = tradeprice(1)+(trailingstartS*pipsize)FailsaveSL = newSL+(trailingstartS*pipsize)ENDIF//breakevenIF (tradeprice(1)-close) >= ((MinimumPlus+SaveDistanceS)*pipsize) AND TrailingFlag = 0 THENTrailingFlag = 1newSL = tradeprice(1)-(3*pipsize)FailsaveSL = newSL+(trailingstartS*pipsize)ENDIFIF (newSL-close) >= (trailingS*pipsize) AND TrailingFlag = 1 THENnewSL = close+(trailingS*pipsize)FailsaveSL = newSL+(trailingstartS*pipsize)ENDIFIF ShortOnMarket AND TrailingFlag = 2 THENnewSL = tradeprice(1)+(trailingR*pipsize)FailsaveSL = newSL+(trailingR*pipsize)ENDIF//breakevenIF (tradeprice(1)-close) >= ((MinimumPlus+SaveDistanceR)*pipsize) THENnewSL = tradeprice(1)-(3*pipsize)FailsaveSL = newSL+(trailingR*pipsize)TrailingFlag = 3ENDIFIF (newSL-close) >= (trailingR*pipsize) AND TrailingFlag = 3 THENnewSL = close+(trailingR*pipsize)FailsaveSL = newSL+(trailingR*pipsize)ENDIF//stop order to exit the positionsIF newSL>0 THENSELL AT newSL STOPEXITSHORT AT newSL STOPENDIF//failsaveSL if rejected SLIF LongOnMarket AND close <= FailsaveSL THENSELL AT MarketENDIFIF ShortOnMarket AND close >= FailsaveSL THENEXITSHORT AT MarketENDIF01/29/2022 at 4:23 PM #187002Addendum:
gehandelte Timeframe 1 Minute01/29/2022 at 9:12 PM #187020Ich würde gerne sehen, dass es nach all Ihrem Programmieraufwand gut funktioniert! Das hast du gut gemacht!
Ich schätze, es gibt zu viele Bedingungen, um gleichzeitig übereinstimmend / wahr zu sein und somit die Eröffnung von Trades zu ermöglichen.
Kreuze über / unter können oft ein Killer sein, wenn sie zu oft verwendet oder mit vielen anderen Bedingungen kombiniert werden.
Ich bekomme 90 Trades, wenn ich alle Kreuze auf > ändere … wünschte, ich hätte 2 oder 3 Kreuze gleichzeitig gemacht (nicht alle auf einmal).
Ein paar Ideen, die Sie trotzdem berücksichtigen sollten.
1 user thanked author for this post.
01/29/2022 at 9:46 PM #187038Danke für den Tip! 🙂
01/29/2022 at 9:58 PM #187039Im Testaccount hatte ich mit exakt diesem Code (plus einen weiteren Code-Teil für Tagesschluss-Rally und einen Simple-Range-BreakOut-Code, optional ein Money-Management-Code und ein Schutzcode gg hohe Volatilität (Kurs über R2 oder unter S2)) bei kleinsten Änderungen im Backuptest in 10,5 Monaten (01.02.2021 bis ca 20.12.2021) ca 120-130 Trades bei Win/Loose-Rate von 62%, Gain/Lost-Ratio von 3,5.
Jetzt 0,0. Nada. Niente. Gleicher Code, gleicheer Backtest. Und das scheint NUR an den “Highest” bzw “Lowest”-Bedingungen zu liegen. Wahrscheinlich ist der Grund ganz banal und ich habe irgend etwas in den Einstellungen bei PRT oder IG übersehen?01/30/2022 at 11:52 AM #18705301/30/2022 at 11:53 AM #187054Zeile 18 sollte AND anstelle von OR verwenden, um die Tage von 1 bis 5 zu begrenzen: Tradeday = OpenDayOfWeek > 0 AND OpenDayOfWeek < 6
Ich konnte keinen Trade eröffnen!
01/30/2022 at 12:08 PM #187056Ich bekomme 1 Trade beim Backtest von 100.000 Balken auf DAX M1.
Wenn ich alle Kreuze auf Kreuze unter ändere (kein Sinn, nur um Trades zu bekommen), dann bekomme ich 7 Trades über 100.000 Balken.
Ich sage immer noch, die zahlreichen Bedingungen sind zusammen zu restriktiv … die Bedingungen sind selten zusammen wahr.
Probieren Sie Rollback-Versionen aus, wenn Sie sagen, dass es gut funktioniert hat, und führen Sie dann jeweils einen Rollforward durch?
Lass uns bitte wissen, wie es dir geht. Ich werde weiter daran denken, Bruch- oder Bust-Tests zu beantragen! 🙂
01/30/2022 at 1:59 PM #187066Ich kann bis 1 Millionen backtesten. der Trade kommt aus Zeile 32, wo ich keine “Highest”/”Lowest”-Vergleiche eingefügt habe.
Bei Backtest vom 01.02. bis 20.12.2021 habe ich immer ca 120 Trades (ungefähr 80 Wins/45 Losses; Ratio 3,5, MaxDrawdown 735,- bei 5,-€/Pip, Gewinn insgesamt 20.000,-€) erhalten.
Entwickelt habe ich die Regeln bei 200.000 Ticks Anzeige (ca Mai bis Dezember war das bei mir).
Es hat alles im Demo-Account einwandfrei funktioniert.
Das gehandelte Produkt war vom Demo-Account die Eurex-Micro-Dax 1,-€.Nun handele ich via IG den Deutschland 40 Kassa 1€.
Ich vermute, es könnte ein anderes Problem sein – nicht im Code, sondern im Daten-Feed zB bei IG?
01/30/2022 at 2:07 PM #18706701/30/2022 at 2:11 PM #18706801/30/2022 at 2:55 PM #187074WOW!
Ja, DAS ist es!
VIELEN VIELEN VIELEN Dank!
Da wäre ich nie drauf gekommen!
Ich hatte keine Idee, und das Handbuch und alle anderen Sources haben mir keinen Hinweis gegeben!
Ich werde jetzt den Code anpassen, noch ein paar Änderungen für Eleganz und Lesbarkeit einfügen.
Ist es okay, wenn ich meine gesamte Strategie als Dank für die Hilfe öffentlich zur Verfügung stelle !?Liebe Grüße
Stefan1 user thanked author for this post.
01/30/2022 at 5:35 PM #187078 -
AuthorPosts