Metastock 7.03 EOD: Trailingstop einzeichnen ?
Hallo,
ich habe einen Trailing stop für Shortterm-Systeme entwickelt mit folgender Logik (Beispiel Long):
Anfangswert ist Low des Einstiegstages minus ein ATR-Multiple. An jedem folgenden Tag wird der Stop um den Betrag erhöht um den das Low größer dem Low das Vortages ist. Ist das Low kleiner als das des Vortages bleibt der Stop gleich.
Umgesetzt habe ich das so als Custom Indicator: (Long only System Beispiel)
atrs := 4;
atrmult:= 0.25;
longentry := Cross(RSI(5),20);
stop:=If(BarsSince(longentry)=0,L-ATR(atrs)*atrmult,If(L>Ref(L,-1),PREV+L-Ref(L,-1),PREV));
stop
Problem:
Wenn ich die Stopkurve in den Chart einzeichnen lasse und der Stop ausgelöst wurde, wird die Stoplinie weiter in die Höhe gezeichnet und wenn längere Zeit kein trade stattfand verzerrt sie das ganze Chartbild. Stoplinie liegt dann z.B. bei 10.000, Dax bei 3.000.
Lässt sich das irgendwie vermeiden? Am besten wäre es natürlich, wenn der Indikator gar nicht gezeichnet würde wenn keine Position besteht, aber ich fürchte das ist nicht möglich.
Bei einem stop and reverse System kann ich mir eine Lösung vorstellen, aber wenn das System auch flat sein kann, was dann?
Ich arbeite mit Metastock EOD V 7.03.
Vorab vielen Dank für eine Antwort.
Gruß Rock
Hallo Rock,
ich will Dir mal meine Lösung vorstellen. Vielleicht hilft sie Dir ja.
Gebe im IndicatorBuilder nachfolgende Formel ein:
{TrailingStop}
{Trade entered today?}
LE1:=Ref(Fml("Chr-SwingSystemLong"),-1)=0 AND Fml("Chr-SwingSystemLong")>0;
{Trade older than today?}
LE2:=Ref(Fml("Chr-SwingSystemLong"),-1)>1;
{Stop Price}
StopPrice:= Ref(LLV(L,2),-1) - 0.25*Ref(Mov(ATR(1),25,S),-1);
Stop:=
{Stop Price on starting day}
If(LE1=1 , StopPrice,
{Stop Price on following days}
If(LE2=1 ,
If(StopPrice PREV , PREV , StopPrice),
{Stop Price on days out of market}
StopPrice));
Stop
Die Fml("Chr-SwingSystemLong") kann irgend ein Longsignal sein, dass Dir im IndicatorBuilder eine BinaryWave gibt (Long 1 oder größer, OutofMarket=0). Ich habe bei mir beim Longsignal gleich den Entrypreis in der Kurve stehen.
Das Problem einer Stop-Anzeige wenn man gar nicht im Markt ist, habe ich bislang noch nicht lösen können. Wäre etwas für Metatrader ;-) Aber wenn mir ein Stop anzeigt wir obwohl ich flat bin, ist ja auch nicht so schlimm. Die Stopps lasse ich mir als in Color/Style bei Style die letzte Option mit den Punkten und bei Weight die Dritte von oben anzeigen. So kann man sie gut sehen und hat nicht noch eine Linie im Chart. Auch ist es deutlich als ausgelöster Stop zu erkennen, wenn der Punkt im Preisbalken zu liegen kommt.
Gruss kuhaku
Hallo,
ich habe Deine Idee (RSI + ATR Stop) einmal als Handelssystem formuliert.
RSIPer := Input("RSI Perioden: ",3,30,5);
RSISell := Input("RSI Sell Linie: ",60,90,70);
RSIBuy := Input("RSI Buy Linie: ",10,40,30);
HLPer := Input("Perioden für Hoch und Tief:", 1,20,1);
atrs := Input("ATR Perioden: ",1,20,4);
atrmult:= Input("ATR Muliplyer: ",0.1,5,0.25);
{Deine Handels Signale}
EL:=Cross(RSI(RSIPer),RSIBuy);
ES:=Cross(RSISell,RSI(RSIPer));
{ATR Stops}
ATRLong:= LLV(L,HLPer)-ATR(atrs)*atrmult;
ATRShort:=HHV(H,HLPer)+ATR(atrs)*atrmult;
{Exit über Stopp}
CS:=If((BarsSince(EL)>BarsSince(ES)),C>Ref(ATRShort,-1),0);
CL:=If((BarsSince(EL)<BarsSince(ES)),C<Ref(ATRLong,-1),0);
State:=If(Cum(1)=1,0,If(EL,1,If(ES,-1,If((CL AND PREV=1) OR (CS AND PREV=-1),0,PREV))));
State
Durch ändern von State in ATRLong;ATRShort bzw ref(ATRLong,-1);ref(ATRShort,-1) kannst du den ATR einzeichnen.
Mit Deinen Paramtern taugt das System nichts (freundliche Formulierung), daher habe ich das System durch Input Parameter etwas flexibilisert.
Viel Spaß beim Spielen
@ kuhaku
Vielen Dank, ich sehe mir das mal näher an!
Gruß Rock
Hallo, Kuhaku!
Ich habe deine Formel mal ausprobiert.
Du sagtest ja: Ich habe bei mir beim Longsignal gleich den Entrypreis in der Kurve stehen. Wenn ich es richtig verstehe, sollte in dem Indikator der das Signal liefert, z.B. sowas stehen:
(Bsp. GD30 Signal bei close crossing oder GD30 höher als vor 2 Tagen)
{"Chr-SwingSystemLong"}
pds:=30;
sig:=Cross(C,Mov(C,pds,S))
OR
Cross(Mov(C,pds,S),Ref(Mov(C,pds,S),-2));
If(sig,ValueWhen(1,sig,C),0)
Was mich jetzt wundert: Wenn ich deinen Stop zeichnen lasse, ist, daß der Stopkurs gelegentlich auch niedriger wird während eine Position besteht, eine Sache die ich mit meiner Konstruktion vermeiden wollte.
Ist das Absicht?
Gruß Rock
@ Rock,
Du hast recht, da fehlt etwas.
Schaue Dir mal dies an, das ich nur zur Darstellung mal mit einem einfachen Cross-System versehen habe. Hier geht der Stop nach dem Long-Entry mit.
Es ist mir jedoch im Zusammenhang mit dieser Formel noch nicht gelungen, den Stop automatisch als Punkte unter den Chart zu legen. Es ist nicht sonderlich glücklich den Stopkurs obenliegend zu haben. Eine Trennung aus dem eigentlichen System bei Abfrage der EntryPriceCond aus dem LongSystem habe ich auch noch nicht geschafft. Vielleicht hast Du ja einen Ansatz?
Gruss kuhaku