Jump to content
Tom Next - Daytrading Community

Backtest vs. Realtrading Problem


cago

Recommended Posts

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üsse

cago

 

post-2229-0-61363300-1321722124_thumb.jpg

post-2229-0-03901300-1321722141_thumb.jpg

post-2229-0-27408100-1321722152_thumb.jpg

Link to comment
Share on other sites

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üße

DT

 

P.S.: Generell würde ich mich eher auf den Replay-Modus verlassen.

  • Upvote 1
Link to comment
Share on other sites

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 + Trade

Realtrade : 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össe

Beim RT wird die Kontogrösse vom Brocker (oder hier vom Sim Account genommen)

 

Die Parameter, welche ich verwendet habe sind bereits im Code.

Timeframe 5min

Aktie Apple

 

 

Danke und Grüsse

cago

post-2229-0-62326300-1321891876_thumb.jpg

post-2229-0-93559900-1321891884_thumb.jpg

MM-RM-PS_(test_und_live).txt

Link to comment
Share on other sites

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üsse

cago

Link to comment
Share on other sites

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 :-)

Link to comment
Share on other sites

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üsse

cago

 

MM-RM-PS_(test_und_live)_AOH_8.txt

Link to comment
Share on other sites

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üße

DarthTrader

  • Upvote 3
Link to comment
Share on other sites

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üsse

cago

 

 

MM-RM-PS_(test_und_live)_AOH_10 - Kopie.txt

Link to comment
Share on other sites

  • 2 weeks later...

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üße

DT

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...