* Metastock: Trailing Stop mit Stop Loss (Chandelier + ATR)
Diesen wunderschönen Stop möchte ich niemandem vorenthalten. Lesern der Yahoo-Groups wird er bekannt vorkommen und falls er schon gepostet wurde bitte ich vielmals um Verzeihung. Aber dieser Stop ist eine tolle Kombination aus dem Chandelier-Exit von Chuck LeBeau und einer Volatilitäts-Komponente, dem ATR. Leider nicht aus meiner Feder, sondern von Richard Dale.
Erklärung, Screenshots und Downloads gibt es auf
http://www.tradernexus.com/advancedstop/advancedstop.html .
Das Beste zum Schluss: Richards DLL ist gratis.
Gruss, Martin
Hallo,
wirklich eine tolle Sache!
Ich verstehe nur nicht, wie ich die stops mit anderen entry conditions (z.B. MA Crossover) automatischen verbinden kann. Muss ich für jeden entry manuell das Datum eingeben? Wie könnte man Systeme mit diesem stop backtesten? Ideen?
Beste Grüße,
redsnapper
Hi,
hier auf die Schnelle ein einfaches Beispiel:
Advanced Stop long
entry:=Cross(C,Mov(C,30,E));
initatr:=2;
trailatr:=2.5;
entryprice:=ValueWhen(1,entry,C);
ExtFml( "AdvancedStop.StopLong", entry,entryprice-initatr*ATR(10),0,H-trailatr*ATR(10),0,0,0,0)
Advanced Stop Short
entry:=Cross(Mov(C,30,E),C);
initatr:=2;
trailatr:=2.5;
entryprice:=ValueWhen(1,entry,C);
ExtFml( "AdvancedStop.StopShort", entry,entryprice+initatr*ATR(10),0,L+trailatr*ATR(10),0,0,0,0)
Advanced Stop
If(C>Mov(C,30,E),Fml("Advanced Stop Long"),Fml("Advanced Stop Short"))
Metatrader,
vielen Dank, Du hast mir sehr geholfen!
Gruß,
redsnapper
Thema: Programmierte Stops, Stop Loss, Trailing Stops"
Von: Hannes Am: 12.02.2004 16:41:13 Gelesen: 30
@ Metatrader und alle Anderen die's können
Ich schaffe es nicht einen Chandelier Stop so umzuprogrammieren, dass ein simpler Trailing Stop ohne ATR-Bezug entsteht.
Ich möchte die Eingabefläche (Tag-Monat-Jahr, Einstiegskurs) beibehalten, dann jedoch statt dem initatr den simplen Prozentsatz des Stop-Loss-Levels zum Einstiegszeitpunkt und statt dem trailatr die Differenz zum jeweiligen High/Low definieren.
Kann das funktionieren? Was mache ich falsch? Muss solch ein SL ganz anders programmiert werden?
lg Hannes
Hallo Hannes,
da du dich offensichtlich auf Richard Dales Stop beziehst habe ich deine Frage hierhingestellt damit alle den Zusammenhang haben.
Ohne die Formel getestet zu haben würde ich folgende Änderungen vornehmen:
entryday:=Input("Day of month",1,31,1);
entrymonth:=Input("Month",1,12,1);
entryyear:=Input("Year",1800,2020,2003);
entryprice:=Input("Entry Price (leave as zero for close of the day)",0,5000,0);
entryprice2 := If(entryprice>0,entryprice,C);
initprcnt:=Input("Initial stop Percent multiplier",0.1,6,2);
trailprcnt:=Input("Trailing stop Percent multiplier from High",0.1,6,2.5);
entryfulldate := (entryyear)+(entrymonth/12)+(entryday/365);
fulldate := Year()+Month()/12+DayOfMonth()/365;
entry:= entryfulldate > Ref(fulldate,-1) AND entryfulldate <= fulldate;
ExtFml( "AdvancedStop.StopLong", entry,entryprice2-(initprcnt*entryprice2/100),0,H-(trailprcnt*H/100),0,0,0,0);
Gruss,
Martin
Vielen herzlichen Dank praktikus ! Ich wundere mich, dass meine Suche unter den Begriffen Trailing Stop und Stop Loss nicht auf diesen Thread verwiesen hat.
Ich werde in der nächsten Zeit deinen Vorschlag testen und falls ich auch noch etwas Neues beitragen kann, komme ich in diesem Thread darauf zurück.
Beste Grüße
Hannes
@ praktikus
Der Stop Long hat geklappt, ich habe kleine Veränderungen vorgenommen; mögliche %-Range erweitert, statt 2003 das heurige Jahr als fixe Vorgabe und das Opening statt des Closing-Preises als default value eingestellt.
Für eine Änderung bin ich jedoch nicht 'talentiert' genug: Ich würde gerne einen Stop Short nach dem selben Muster schreiben, doch es klappt nie. Nach meinem Erachten müssen die Zeilen 5,7,10 und 11 verändert werden, da sich ein Anstieg des Kurses negativ auswirken würde und der Trailing Short Stop sich am Low orientieren muss.
Irgendwo habe ich jedoch einen Fehler, den ich nicht lösen kann. Kannst du mir nochmal einen Tipp geben ?
Vielen Dank
Hannes
@ Hannes
entryday:=Input("Day of month",1,31,1);
entrymonth:=Input("Month",1,12,1);
entryyear:=Input("Year",1800,2020,2004);
entryprice:=Input("Entry Price (leave as zero for close of the day)",0,5000,0);
entryprice2 := If(entryprice>0,entryprice,C);
initprcnt:=Input("Initial stop Percent multiplier",0.1,6,2);
trailprcnt:=Input("Trailing stop Percent multiplier from High",0.1,6,2.5);
entryfulldate := (entryyear)+(entrymonth/12)+(entryday/365);
fulldate := Year()+Month()/12+DayOfMonth()/365;
entry:= entryfulldate > Ref(fulldate,-1) AND entryfulldate <= fulldate;
ExtFml( "AdvancedStop.StopShort", entry,entryprice2+(initprcnt*entryprice2/100),0,L+(trailprcnt*L/100),0,0,0,0);
Das dürfte dein Problem lösen, deine Änderungen und Modifikationen (Open statt Close, % etc.) kannst du nun selbst wieder anpassen. :-)
Gruss,
Martin
Ein kleiner Schönheitsfehler ist in der Formel für den Stop Short. Ohne Einfluss auf die Funktion aber das Auge isst ja bekanntlich mit. ;-)
entryday:=Input("Day of month",1,31,1);
entrymonth:=Input("Month",1,12,1);
entryyear:=Input("Year",1800,2020,2004);
entryprice:=Input("Entry Price (leave as zero for close of the day)",0,5000,0);
entryprice2 := If(entryprice>0,entryprice,C);
initprcnt:=Input("Initial stop Percent multiplier",0.1,6,2);
trailprcnt:=Input("Trailing stop Percent multiplier from Low",0.1,6,2.5);
entryfulldate := (entryyear)+(entrymonth/12)+(entryday/365);
fulldate := Year()+Month()/12+DayOfMonth()/365;
entry:= entryfulldate > Ref(fulldate,-1) AND entryfulldate <= fulldate;
ExtFml( "AdvancedStop.StopShort", entry,entryprice2+(initprcnt*entryprice2/100),0,L+(trailprcnt*L/100),0,0,0,0);
So macht das ganze sprachlich und fürs Verständnis mehr Sinn.
Gruss,
Martin
Hallo Hannes,
um dir ein Beispiel zu geben wie man die Geschichte in einem Indikator für Long und Short unterbringt:
tradedirection:=Input("Long = 1, Short = 0",0,1,1);
entryday:=Input("Day of month",1,31,1);
entrymonth:=Input("Month (year=2004)",1,12,1);
entryyear:=2004;
entryprice:=Input("Entry Price (leave as zero for close of the day)",0,5000,0);
entryprice2 := If(entryprice>0,entryprice,C);
initprcnt:=Input("Initial stop Percent multiplier",0.1,6,2);
trailprcnt:=Input("Trailing stop Percent multiplier",0.1,6,2.5);
{From High for long trades, from Low for short trades}
entryfulldate := (entryyear)+(entrymonth/12)+(entryday/365);
fulldate := Year()+Month()/12+DayOfMonth()/365;
entry:= entryfulldate > Ref(fulldate,-1) AND entryfulldate <= fulldate;
If(tradedirection = 1,
ExtFml( "AdvancedStop.StopLong", entry,entryprice2-(initprcnt*entryprice2/100),0,H-(trailprcnt*H/100),0,0,0,0),
ExtFml( "AdvancedStop.StopShort", entry,entryprice2+(initprcnt*entryprice2/100),0,L+(trailprcnt*L/100),0,0,0,0));
Die Input-Abfrage nach dem Jahr entfällt da MS nur maximal 6 Inputs zulässt. Deshalb ist das Jahr mit entryyear:=2004; fix definiert, kann aber in der Formel geändert werden.
Ganz am Schluss folgt nach If(tradedirection = 1, zuerst die Formel für den Stop Long, danach diejenige für den Stop Short. So sollte es dir vermutlich leichter fallen, die Unterschiede zu sehen.
Gruss,
Martin
@ praktikus
Vielen Dank Martin,
jetzt bin ich einen großen Schritt weiter.
Liebe Grüße
Hannes
Hallo,
habe es auch runtergeladen und installiert.
Aber kann mir jemand verraten was ATR bedeutet. Ich komme einfach nicht darauf.
Danke.
Dann habe ich noch eine Frage: Besteht die Möglichkeit, es auch Intraday zu nutzen?
Wenn man z.B. diese Formel im 60 Min Dax Chart anwenden möchte und am Tag X um 10.30 Uhr ein Trade eingeht, daß er dann ab dem Datum zählt.
Oder noch besser wäre, wenn das Automatisch passieren würde. Das heißt, wenn ich im PS 2 Day Range System ein Kaufsignal bekomme, daß es dann automatisch diese Formel mit in den Chart einzeichnet.
Eigentlich müsste man doch zu dieser Bedingung (Kaufsignal) einfach die Formel dazutun, oder irre ich mich ?
Ich habe immer Schwierigkeiten mit dem Aussteigen, daher interessiert es mich sehr, denn so könnte man diese "schwere" Entscheidung der Formel überlassen.
Bemerkung: PS2Day Range ist ein Add On von Equis. Mit in dem Paket Performance Systems enthalten.
Danke für die Hilfe.
@ daytradingkoeln.de
auf die Idee in deinem Metastock-Handbuch oder im Helpfile dies zu suchen bist du wohl noch nicht gekommen. ;-)
Gruss,
Martin
"ATR "average true range""
gruss hans
@ daytradingkoeln
Deine Frage vom 13.03.04 14:25 wurde in diesem Thread von Metatrader bereits am 13.11.03 00:56 beantwortet. Offenbar steht Metatrader mit übernatürlichen Kräften im Bunde. ;-)
Metatraders Formel ersetzt den Teil zur Datumsangabe durch Mein Entrysignal Long,Mein Entrysignal Short usw. und ist somit in jedem Chart unabhängig vom Timeframe gültig.
Gruss,
Martin
Hi,
ich habe mir das angesehen, was metatrader geschrieben hat. Dies trifft jedoch für den Fall zu, welches als Variable Entry definiert ist.
Ich bekomme ein Kaufsignal wenn folgendes eintrifft:
d:=If(C>Ref(Max(H,Ref(H,-1)),-1),Min(L,Ref(L,-1)),If(CRef(state,-1)
Wie kann ich das ganze jetzt in die Variable "Entry" reinpacken ?
Könnte ich z.B. den ganzen Befehl für einen Kaufsignal in eine Funktion reinpacken, z.b. "Kaufsignal" und dann später an der Stelle die Variable entry: Fml("Kaufsignal") dann so definieren ?
Ich habe es mal ausprobiert. Ich glaube es hat funktioniert.
Wie kann ich nun das so machen, daß die Linie nicht mehr weiter gezeichnet wird, wenn der Stop ausgelöst worden ist und dann erst wieder anfängt, wenn ein neues Kaufsignal generiert wird.
Ich möchte dann nämlich beide Funktionen in dem Chart laufen lassen, ohne das es irgendwie chaotisch aussieht.
Danke.
Ich habe mal beide Stops in dem ein und selben Chart angewandt. Eine Abbildung füge ich bei.
Die Roten Kerzen sind ShortPhasen und die Grünen Kerzen Longphasen. Einstieg ist jeweils an den Pfeilen und ab da beginnt auch die Linie für den Stop. Die Grüne Linie ist für Advanced Stop Long und die dunkel Rote für Advanced Stop Short.
Wenn aber die Aktie von der Long in die Short Phase wechselt, dann schreibt die Linie für Advanced Stop Long weiter.
Was ich wissen wollte ist, wie ich dann in dieser Phase die Linie unterbrechen kann. Also praktisch wenn Funktion "Kaufsignal" war, dann Advanced Stop Long, ansonsten Advanced Stop Short.
Nur weiß ich nicht wie ich das jetzt einfügen kann. Wenn dann müsste ich es in die Funktion der Stoplinie einbauen.
Danke für die Unterstützung.
Hier das Bild:
Hallo,
ich denke, Du hast das System incl. Stopp verkehrt programmiert, in MS sollte es wie folgt aussehen (den Expert müsstet Du mit diesen Formeln dann auch hinbekommen):
SysStat 3 Bars
initatr:=2;
trailatr:=2.5;
d:=If(C>Ref(Max(H,Ref(H,-1)),-1),Min(L,Ref(L,-1)),If(C<Ref(Min(L,Ref(L,-1)),-1),Max(H,Ref(H,-1)),PREV));
a:=Cross(C,d);
b:=Cross(d,C);
state:=If(BarsSince(a)<BarsSince(b),1,0);
EL:= state>Ref(state,-1);
ES:=state<Ref(state,-1);
ELP:=ValueWhen(1,EL,C);
ESP:=ValueWhen(1,ES,C);
STPL:=ExtFml( "AdvancedStop.StopLong", EL,ELP-initatr*ATR(10),0,H-trailatr*ATR(10),0,0,0,0);
CL:= (C<STPL) OR ES;
STPS:=ExtFml( "AdvancedStop.StopShort", ES,ESP +initatr*ATR(10),0,L+trailatr*ATR(10),0,0,0,0);
CS:=(C>STPS) OR EL;
SysStat:=If(Cum(1)=1,0,If(EL,1,If(ES,-1,If((CL AND PREV=1) OR (CS AND PREV=-1),0,PREV))));
SysStat
SysStat 3 Bars Advanced Stop
If(Fml("SysStat 3 Bars")=1,FmlVar("SysStat 3 Bars","STPL"),If(Fml("SysStat 3 Bars")=-1,FmlVar("SysStat 3 Bars","STPS"),PREV))
Hallo,
scheinbar ist die tradernexus Seite zur Zeit nicht richtig zu erreichen. Falls jemand noch den Installer für das Stop-Plugin für MetaStock 8 hat, wäre ich sehr dankbar wenn er es mir zusenden könnte...
Gruss,
~Lars
Hallo,
ich habe die Datei gerade spaßeshalber noch einmal heruntergeladen, klappt ohne Probleme, hier der direkte Link
MS Vers. 8/9: http://www.tradernexus.com/advancedstop/advancedstop.v1.1.ms8.exe
MS Vers. 7: http://www.tradernexus.com/advancedstop/advancedstop.v1.1.ms7.exe
Hallo,
nun geht die Seite bei mir auch wieder, war scheinbar nur ein temporäres Problem. Schönen Dank auf jeden Fall.