Formel: Zu häufiges Handeln
Tag,
ich will, dass meine Strategie ein Signal nur einmal handelt und erst wieder handelt, wenn das Set-up von neuem eintritt. Leider führt dieser Code nach dem Eintritt des Set-ups und anschließendem Trade immer weitere Trades aus.
Wie kann ich dies verhindern?
Danke für die Hilfe
//////////////////////////////////////////
Inputs: FastLength(7),SlowLength(26),prozenttrail(0.5);
Vars:EntryLong(0),EntryShort(0),Fast(0),Slow(0);
Fast = Average(Close,FastLength);
Slow = Average(Close,SlowLength);
If Fast crosses above Slow then EntryLong = High +1 point;
If Fast > Slow then Buy("Long") next Bar at EntryLong Stop;
If Fast crosses below Slow then EntryShort = Low -1 point;
If Fast < Slow then Sell("Short") next Bar at EntryShort Stop;
ExitLong next Bar at Slow -1 point Stop;
ExitShort next Bar at Slow +1 point Stop;
SetDollarTrailing(close/100*prozenttrail*bigpointvalue);
Setexitonclose;
Hallo,
Du könntest z.B. eine zusätzliche Variable einfügen die Du erst dann zurücksetzt wenn Dein Setup neue Trade erlaubt...
Wie bekomme ich das programmiertechnisch hin?
Danke für eventuelle Anregungen.
Tu mich schwer mit dem Programmieren.
@ mathe [#1]
Was heißt denn genau: "Führt weitere Trades aus?" Entries oder Exits?
Ändere mal
If Fast crosses above Slow then EntryLong = High +1 point;
If Fast > Slow then Buy("Long") next Bar at EntryLong Stop;
If Fast crosses below Slow then EntryShort = Low -1 point;
If Fast < Slow then Sell("Short") next Bar at EntryShort Stop;
in
If MarketPosition = 0 then begin
If Fast crosses above Slow then EntryLong = High +1 point;
If Fast > Slow then Buy("Long") next Bar at EntryLong Stop;
end;
If MarketPosition = 0 then begin
If Fast crosses below Slow then EntryShort = Low -1 point;
If Fast < Slow then Sell("Short") next Bar at EntryShort Stop;
end;
Vielleicht hilft dir das schon weiter.
dansmo
Danke für die Hilfe, aber mein Problem ist dadurch noch nicht gelöst.
Erkläre das nun mal für einen Longtrade
Für einen Long-Entry muss der schnelle GD den langsamen GD von unten nach oben schneiden. Das Hoch +1 point, welches in der folgenden Bar entsteht soll als StopBuy-Limit für die folgenden Bars dienen, solange der schnelle GD sich über dem langsamen GD hält.
Mein Problem ist nun, dass wenn einmal eine Position eingegangen wurde und diese wieder geschlossen wurde(Stop oder Ausstiegssignal), dass das System wieder eine neue Position eingeht, wenn das StopBuy-Limit wieder überschritten wird. Das soll aber vermieden werden. Das System soll erst wieder handeln(Entry), wenn eine weitere Kreuzung der GDe erfolgt ist. Also pro Kreuzung GDe soll max. eine Position eingegangen werden.
Danke für die Hilfe.
@ mathe [#5]
If Fast > Slow then Buy("Long") next Bar at EntryLong Stop;
Mit dieser Bedingung wird ja einfach nur geprüft ob der kurze GD größer als der lange GD ist.
Warum schreibst du nicht gleich
If MarketPosition = 0 then begin
If Fast crosses above Slow then Buy nxet bar at High +1 point stop;
end;
Sorry, dass ich nochmals störe und danke für die Hilfe.
Mit dieser Bedingung kommen wir der Sache schon näher, nach dem Eintritt der Eintrittsbedingung handelt das System nur einmalig. Jedoch entsteht ein anderes Problem, das StopBuy-Limit (High +1 point) gilt nur für die nächste Bar(Buy next bar at High +1 point stop).
Das StopBuy-Limit(mit dem Hoch aus der unmittelbar folgenden Bar nach der Kreuzung der GD) sollte aber solange bestehen bleiben bis eine gegensätzliche Kreuzung (schneller GD schneidet langsamen GD von oben nach unten)stattfindet.
Eigentlich stimmt mein Ursprungsprogramm schon, aber es soll halt nur einmal nach dem Signaleintritt handeln.
@ mathe [#7]
Du hast zwar nich danach gefragt, aber trotzdem: das macht keinen Sinn.
Bei channel breakouts, range breaks etc. macht ein STEHENBLEIBENDES SIGNAL "kauf wenn x überschritten wird" wie du es haben willst Sinn. Mit Deinem crossover macht das keinen Sinn. (Natürlich kann das trotzdem manchmal funktionieren - und manchmal nicht <g>)
gruss hans
PS: du must eine neue variable definieren: z.b. entryhightrigger und durch diese das Kaufsignal auslösen.
Macht vielleicht schon Sinn, denn dieses Hoch nach dem Kreuzen der GD, wirkt als zusätzlicher Filter. Und dieses StopBuy-Limit soll solange bestehen bleiben, wie auch der schnelle GD über dem langsamen GD bleibt.
Dieser Ansatz ist auch in der August06 Ausgabe des Traders(Trendfolge in Bondmärkten-Teil1). Eigentlich sollte es nicht schwer sein, diesen Ansatz korrekt mit Easy-Language umzusetzen, jedoch habe ich damit einige Probleme und daher habe ich mich hierher gewandt.
Danke für die Hilfe
@ mathe [#9]
Ne Menge codebeispiele findest Du in der Tradestationliste, z.B. hier
http://www.purebytes.com/archives/omega/
Da es -wie selber bemerkt- ein recht simples Problem ist, musst du evtl. mal in die älteren Ausgaben gucken...
gruss hans
@ mathe [#9]
Dann ist das Kreuzen an sich doch egal.
Es gibt zwei Zustände...
fast > slow und slow > k.
Entscheidend ist das Hoch unmittelbar nach dem Kreuzen.
1. Dies ist das StopBuy-Limit solange fast>slow
2. Auf dieses Kreuzen (fast crosses above slow) soll max. einmal gehandelt werden, bis ein erneutes Kreuzen auftritt
@ mathe [#12]
So, ich glaube ich habe dich nun richtig verstanden.L etzter Versuch von meiner Seite.
Vars:Trigger(0);
If MarketPosition = 0 and Fast crosses above Slow then begin
Trigger = High;
If Fast) > Slow then buy next bar at Trigger stop;
end;
If MarketPosition = 1 then
ExitLOng next Bar at Slow stop;
Danke Euch, auch wenn es immer noch nicht ganz geklappt hat.
@mathe
Füge doch einen Chart ein und "stelle" das Problem dar.
@ mathe [#14]
was klappt nicht `?
Bildchen mit Pfeilchen !
gruss hans