cago Posted November 19, 2011 Report Posted November 19, 2011 Hallo zusammen Habe unter OnBarUpdate drei Entry's programmiert, deren Ausführung vom vorhergehenden Entry abhängen. Den Code seht ihr im Anhang.Wenn ich den Code nun im MarketReplay teste, funktioniert das auch. Siehe Realtime.jpg. Im Backtest.jpg seht ihr denselben Zeit-Ausschnitt, jedoch aus dem Strategyanalyzer, also den Code ge-backtestet:-). Hier stelle ich fest, dass 1. der dritte Entry zusammen mit dem zweiten Entry eingegangen wird und 2., dass der Stop nur die Quantity vom ersten Entry nimmt und damit noch eine Position offen bleibt, bis ExitOnClose eintritt. Habe im Code ja "Position.Quantity" stehen, weshalb meines Erachtens in diesem Beispiel die ganze Menge von 132 Stk. gestoppt werden müsste. Im MarketReplay Modus sind es korrekterweise die 88 Stk (Der Entry3 wurde hier nicht gefillt). Die Frage ist nun, warum das so ist und wie ich den Code umprogrammieren könnte, damit er auch im Backtest korrekt funktioniert.Falls dieser Codeausschnitt nicht reicht, gebt mir Bescheid, dann lade ich den ganzen Code hoch.. Danke und Grüssecago
DarthTrader Posted November 20, 2011 Report Posted November 20, 2011 Hallo cago, die Entries im Backtest werden ja auch an ganz anderer Stelle eingegangen, als wie im Replay-Modus,nämlich einige Bars vorher. Der Entry-Bar im Backtest ist sehr lang (siehe High).Evtl. sind dort bereits beide Entry-Bedingungen erfüllt (für Entry 2+3), das würde es erklären. Um festzustellen, warum du keinen Fill im Replay bekommen hast, müsste ich das komplette*.cs File mal selbst durchlaufen lassen und bräucte dann noch so Angaben wir, Markt, Timeframe, usw. Beste GrüßeDT P.S.: Generell würde ich mich eher auf den Replay-Modus verlassen. 1
cago Posted November 21, 2011 Author Report Posted November 21, 2011 Hallo DT Danke für die Antwort. Habe noch ein paar Fehler im Code gefunden, jedoch ist es jetzt noch schlimmer als vorher :-) Code (als txt, musst du noch in cs ändern) und BT / RealTrading - Vergleich sind wieder im Anhang. Was ich festgestellt habe: *Backtest über einen längeren Zeitraum, z.B. 3 Jahre = Nicht ein einziger Trade wird mit mehreren Entrys ausgeführt.Selbes Setup, aber nur 3 Tage Backtest = Mehrere Entrys werden eingegangen.Das ist doch sehr komisch... *Auch was die Stops betrifft, reagiert das Backtesting komplett anders (falsch!!). Siehe Bilder im Anhang. *Backtesting: Bar0 = Entrysignal / Bar1 = Orderversand + TradeRealtrade : Bar0 = Entrysignal + Orderversand + Trade *Könnte das etwas mit dem Multi-Time-Frame zu tun haben? Wichtig: Man kann in den Parameter Einstellungen BackTesting oder RealTrading wählen. Damit ändert man eigentlich die Berechnung für die Kontogrösse:Beim BT berechnet der Code die KontogrösseBeim RT wird die Kontogrösse vom Brocker (oder hier vom Sim Account genommen) Die Parameter, welche ich verwendet habe sind bereits im Code.Timeframe 5minAktie Apple Danke und GrüssecagoMM-RM-PS_(test_und_live).txt
cago Posted November 21, 2011 Author Report Posted November 21, 2011 update: Habe die Entry-Orders (EnterLong) durch EnterLongLimit mit Limitpreis GetcurrentAsk/Bid ersetzt. Soviel ich weiss, wird im Backtest der Close genommen, nun funktionieren aber die mehrfachen Entrys im BT.Das Problem mit dem Stop, welcher nur die erste Entrymenge tradet, habe ich aber immernoch...Realtrading kann ich momentan leider nicht testen. Grüssecago
cago Posted November 22, 2011 Author Report Posted November 22, 2011 update 2: Habe wohl etwas voreilig geschrieben... Das Problem war nicht die Orderart:Habe die Entry-Orders (EnterLong) durch EnterLongLimit mit Limitpreis GetcurrentAsk/Bid ersetzt. Soviel ich weiss, wird im Backtest der Close genommen, nun funktionieren aber die mehrfachen Entrys im BT. Habe für den Einstieg in den 2. Lot eine Kurserhöhung um 1R plus die Handelsgebühren pro abgeschlossenem Trade berücksichtigen wollen. Stattdessen habe ich die Gebühren für sämtliche bisher angefallen Trades eingerechnet:Performance.AllTrades.TradesPerformance.Commission Je mehr Trades getätigt wurden, desto unwahrscheinlicher wurde mit der Zeit, dass ein zweiter Order möglich wird..Habe den Teil des Codes nun mit einer ungefähren Gebührenberechnung ersetzt... deshalb funktionierts nun. Wenns jemanden interessiert kann ich ja nochmals den neuen Code hochladen.. Zumindest mich würde es interessieren was ihr davon haltet :-)
DarthTrader Posted November 22, 2011 Report Posted November 22, 2011 Sehr gerne, wenn es keine 5000 Zeilen Code sind :-)
cago Posted November 24, 2011 Author Report Posted November 24, 2011 Sehr gerne, wenn es keine 5000 Zeilen Code sind :-) OK, habe fast alles neu geschrieben da mir noch sehr viele Fehler aufgefallen sind. Dieser Code macht nun fast alles so wie ich es haben möchte, aber: 1. Backtest vs. Marketreplay: Da gibt es immer noch grosse Unterschiede, welche ich mir nicht erklären kann.(Settings: Variablen wie vorgegeben. Achtung, bei den Parametern Backtest für backtesting und Real_Trading für Real Trades :-)Habe das ganze jetzt mal im 1min Timeframe mit AAPL mit den Daten vom 18.11.2011 getestet. 2. Das System kann eigentlich so noch keine Gewinntrades machen, ausser wenn Exit on Close eintritt. Und zwar deshalb, da ich ausser den Stops noch keine Ausstiegsregel habe. Ich wollte deshalb in OnBarUpdate im zweiten Timeframe einen Trailingstop programmieren. Der Code ist nun aber ausgeklammert, da das System damit absolut garnicht mehr funktioniert. Nichteinmal mehr Exit On Close funktioniert da noch... ??? Hat ja ev. jemand eine Ahnung, warum und wie ich korrekt einen Trailing Stop programmieren könnte? Code ist jedenfalls im Anhang. *.txt muss natürlich in .cs. geändert werden und kompilieren :-) 3. Hier nochmals was er eigentlich tun sollte:- Drei Entryorders absetzen, indem in den Trade reinskaliert wird. Abstand zu den Trades entspricht 1R+Gebühren- 1R = StopLoss wird mit dem ATR berechnet. - Für das Risikomanagement wird der aktuelle Kontostand verwendet.- Der Stop soll nach jedem Trade um 1R nachgezogen werden.- Man kann in den Parametern zwischen zwei Einstiegsregeln wechseln. Ich verwende das, um die Regeln umzukehren. Wie gesagt, würde es mich interessieren, was ihr davon haltet... Grüssecago MM-RM-PS_(test_und_live)_AOH_8.txt
DarthTrader Posted November 25, 2011 Report Posted November 25, 2011 Ich habe den Code nur mal kurz überflogen, aber folgendes ist mir bereits aufgefallen: Du setzt die Limit-Orders für Entry2 und Entry3 in OnExecution ab. Das würde ich nicht machen.OnExecution wird nur ab und an mal beim Fill, Partial-Fill, ... durchlaufen. Des Weiteren prüfst Du in OnExecution auf Position.MarketPosition == MarketPosition.Long Der Wert dieser Variable wird aber erst in OnPositionUpdate aktualisiert, weshalb der Code für Entry2 und Entry3 nicht zwingend durchlaufen werden muss. Ich würde die Entries, sofern möglich, immer in OnBarUpdate in den Markt legen.Wenn das in Deinem Fall nicht geht, wäre OnPositionUpdate noch eine Möglichkeit. Bevor ich mich weiter einarbeite, kannst Du Dir das ja erstmal anschauen und evtl. den neuen Code posten. Beste GrüßeDarthTrader 3
cago Posted November 25, 2011 Author Report Posted November 25, 2011 Hi DarthTrader Danke Dir soweit.. ich ändere das und poste den Code dann nochmals.Dass die MarketPosition (Long oder Short) erst so spät, also bei OnPositionUpdate, bekannt ist, ändert natürlich so einiges..:-) Grüssecago
cago Posted November 26, 2011 Author Report Posted November 26, 2011 So, habe wieder viel umprogrammiert. Vieles funktioniert jetzt auch besser, einiges schlechter :-) Habe aber nun festgestellt, dass wenn ich mehrere StopOrder's mit dem selben IOrder Objekt absetze, die alten Stops nicht automatisch gecancelled und neu gesetzt werden. Deshalb habe ich nun für jeden Stop ein eigenes IOrder Objekt, damit ich die nicht mehr gebrauchten Stops einfach mit CancelOrder cancellen kann. Offenbar funktioniert OCO nicht, da ich keinen Targetorder verwende... Allerdings habe ich das Gefühl, dass NT nun nicht mehr weiss wann eine Position von Long/Short auf Flat geht...?? Kann das sein? Jedenfalls geht das System keine Short-Trades mehr ein, was ev. darauf zurück zu führen ist... Grüssecago MM-RM-PS_(test_und_live)_AOH_10 - Kopie.txt
DarthTrader Posted December 5, 2011 Report Posted December 5, 2011 Allerdings habe ich das Gefühl, dass NT nun nicht mehr weiss wann eine Position von Long/Short auf Flat geht...?? Kann das sein? Jedenfalls geht das System keine Short-Trades mehr ein, was ev. darauf zurück zu führen ist... Er kann auch nicht Short gehen, wenn so etwas in den Entry-Bedingungen steht: #region EnterLonG if( BarsInProgress == 0 ) { // Long-Entries ... } #endregion #region EnterShorT else if( BarsInProgress == 0 ) { // Short-Entries ... } Nimm mal das "else" vor den Short-Entries weg, dann sollte es gehen. Beste GrüßeDT
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now