Metastock: Stoppkurse in den Experten einbauen
Hallo zusammen,
habe wiedermal eine Frage.
Wenn man den Systemtester benutzt um irgendwelche Strategien auszuprobieren, hat man die Möglichkeit, Stopps zu definieren, die beim Test berücksichtigt werden.
Wenn man nun aber die Funktion in den Experten einbaut um Realtime die Signale zu bekommen, hat man keine Möglichkeit, dem Experten zu sagen, daß er z.b. bei 20 Pkt. unter höchstkurs nach Einstieg (praktisch ein Trailingstop) ein Exit Signal generieren soll.
Ich habe die Version MS 7.2 Pro. Liegt es daran oder muß man es irgendwie in die Exitbedingung einprogrammieren ? Wenn man es einprogrammieren muß, wie würde es denn aussehen ?
Vielen Dank für die Hilfe, denn es ist mühselig, bei jeder neuen Kerze den Trailingstop auszurechnen und manuell zu beobachten, ob der Erreicht wurde.
Nochmals Danke.
Hat keiner einen Vorschlag ?
Hi,
Du musst nur den Stopp in die Exit Bedingung eintragen, mal auf die schnelle ein blödes Beispiel.
Irgendein Kaufsignal, exit entweder nach 6 Bars oder 3% Profit oder 1% Verlust.
(Anmerkung: Bitte nicht handeln, nur ein Demo-Beispiel)
Enter Long
buy:=(H< Ref(H,-1)) AND Ref(H,-1)< Ref(H,-2) AND (L > Ref(L,-1)) AND (Ref(L,-1)<Ref(L,-2)) AND ADX(2)>60;
entry:=If(BarsSince(buy)=0,HHV(H,2),ValueWhen(1,BarsSince(buy)=1,O));
exit1:=BarsSince(buy)=6;
exit2:=C>(entry+(entry*3)/100);
exit3:=C<(entry-entry/100);
stopp:=exit1 OR exit2 OR exit3;
I:=Cum(buy>-1 AND stopp>-1)=1;
Tr:=BarsSince(i OR buy)<BarsSince(I OR stopp);
Tr> Ref(tr,-1)
Exit Long
buy:=(H< Ref(H,-1)) AND Ref(H,-1)< Ref(H,-2) AND (L > Ref(L,-1)) AND (Ref(L,-1)<Ref(L,-2)) AND ADX(2)>60;
entry:=If(BarsSince(buy)=0,HHV(H,2),ValueWhen(1,BarsSince(buy)=1,O));
exit1:=BarsSince(buy)=6;
exit2:=C>(entry+(entry*3)/100);
exit3:=C<(entry-entry/100);
stopp:=exit1 OR exit2 OR exit3;
I:=Cum(buy>-1 AND stopp>-1)=1;
Tr:=BarsSince(i OR buy)<BarsSince(I OR stopp);
Tr< Ref(tr,-1)
Hallo Metatrader,
danke erst einmal für deine Auskunft.
Da ich leider noch nicht ganz fit in der Programmierung bin, konnte ich aus dem Code nicht erkennen, welcher Teil z.B. zu dem Signal als solches gehört und welcher Teil für den Stop. Wenn ich das etwas differenzieren könnte, würde ich dann den Teil, der das eigentliche Signal generiert, durch mein Signal ersetzen und den Rest so lassen.
Ich wäre dir dankbar, wenn ich den Code nochmal für das folgende Beispielsignal bekommen könnte:
Enter Long: Cross(Mov(C,10,S),Mov(C,30,S))
Exit Long: Cross(Mov(C,30,S),Mov(C,10,S))
Wenn du diese beiden Bedingungen mit der codierung für den Stop verknüfen könntest, würde ich besser sehen können, welcher Teil des Codes für den Stop ist und welcher Teil für die Bedingung (welches ich mit dem Gleitenden Durchschnitt gemacht habe) ist. Dann könnte ich es besser verstehen.
Ich hoffe ich habe es Verständlich dargestellt.
Vielen Dank für die Unterstützung.
MK
PS: Als Beispiel könnte man den Stopp 15 Pkt unter Einstieg ansetzten.
Kann denn niemand was dazu sagen ?
Hi,
nicht so ungeduldig. Ich habe Dir unten den Code für einen Indikator und den Expert geschrieben. Das System handelt Deine Signale mit einem Fixed Trailing Stopp. Du musst nur den Code kopieren und solltest lernen, Ihn zu verstehen.
Indikator anlegen:
Name:TradingSite
pds:=Input("% Stop",1,30,1);
StLong:=C-C*pds/100;
StShort:=C+C*pds/100;
stopLong:=If(C<PREV,StLong,Max(StLong,PREV));
stopShort:=If(C>PREV,StShort,Min(StShort,PREV));
EL:= Cross(Mov(C,10,S),Mov(C,30,S));
ES:= Cross(Mov(C,30,S),Mov(C,10,S));
CL:= C<Ref(StopLong,-1);
CS:= C>Ref(StopShort,-1);
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
Code für Expert:
Highlights grün
state:=Fml("TradingSite");
State=1
Highlights rot
state:=Fml("TradingSite");
State=1
Highlights blau
1
Symbol Enter Long:
state:=Fml("TradingSite");
State=1 AND Ref(State,-1)<1 {EL}
Symbol Enter Short
state:=Fml("TradingSite");
State=-1 AND Ref(State,-1)>-1 {ES}
Symbol CloseLong:
state:=Fml("TradingSite");
State=0 AND Ref(State,-1)=1 {CL}
Symbol Close Short:
state:=Fml("TradingSite");
State=0 AND Ref(State,-1)=-1 {CS}
@ tradingsite.de
Präzisiere doch bitte mal deine Wünsche. Ich denke dass du an Metatraders Ausführungen nicht viel deuteln kannst.
Das Buy-Signal wird in Metatraders Beispiel doch klar durch
buy:=(H< Ref(H,-1)) AND Ref(H,-1)< Ref(H,-2) AND (L > Ref(L,-1)) AND (Ref(L,-1)<Ref(L,-2)) AND ADX(2)>60; gegeben (Entry Long).
Für dein Beispiel wird daraus
buy:=Cross(Mov(C,10,S),Mov(C,30,S));
In Metatraders Beispiel definiert er dann 3 Stops:
exit1:=BarsSince(buy)=6;
exit2:=C>(entry+(entry*3)/100);
exit3:=C<(entry-entry/100);
Definition: siehe Metatraders Ausführung.
Für deine Bedingung Stop 15 Punkte unter Entry änderst du exit3 ab:
exit3:=C<(entry-15);
Alles zusammen ergibt dann:
Enter Long
buy:=Cross(Mov(C,10,S),Mov(C,30,S));
entry:=If(BarsSince(buy)=0,HHV(H,2),ValueWhen(1,BarsSince(buy)=1,O));
exit:=C<(entry-15);
I:=Cum(buy>-1 AND exit>-1)=1;
Tr:=BarsSince(i OR buy)<BarsSince(I OR exit);
Tr> Ref(tr,-1)
Exit Long
buy:=Cross(Mov(C,10,S),Mov(C,30,S));
entry:=If(BarsSince(buy)=0,HHV(H,2),ValueWhen(1,BarsSince(buy)=1,O));
exit:=C<(entry-15);
I:=Cum(buy>-1 AND exit>-1)=1;
Tr:=BarsSince(i OR buy)<BarsSince(I OR exit);
Tr< Ref(tr,-1)
Na, ist jetzt alles Müller oder was ? ;-)
Gruss,
Martin
@ Metatrader
Oha, das kommt also davon wenn man mal während der Antwort kurz unterbricht. ;-)
Perfektion 1A - as usual. :-)
Gruss,
Martin
Danke an Metatrader und auch an Praktikus.
Ich hatte die Zeile entry: nicht deuten können und auch die Sache mit dem TR.
Werde aber mit dem Formelbuch an die Sache dran gehen und es zerpflücken bis ich es verstanden habe.
Gruß
Ich hätte da eine bitte zu dem Beitrag von:
metatrader Am: 21.04.2004 23:04:36
In dem Code ist ein Trailingstop eingearbeitet.
Könnte mir den bitte jemand so umschreiben, daß auch noch zusätzlich ein Max Loss Stop von sagen wir einmal 20 Punkten eingebaut ist.
Wie man an der Uhrzeit meines jetzigen Beitrages sehen kann, ist es schon Sonntag morgen 6.00 Uhr durch und ich habe die ganze Nacht versucht, es selber hinzubekommen. Irgendwie habe ich es nicht geschaft. Immer wenn das System ausgestoppt wurde hat es wieder ein Signal generiert sobald es wieder über den Stop kam. Beispiel. Dax bei 3660. Stop bei 3640. Sobald er ausgestoppt wird und wieder von unterhalb der 3640 drüber kommt, generiert er ein Kaufsignal, obwohl die eigentliche Bedingung garnicht greift, also kein Schnittpunkt der beiden GDs gibt.
Ich hoffe, ich konnte das Problem schildern.
Mir wäre es ganz lieb, wenn jemand, wie gesagt, zu dem Code von Metatrader vom 21.4.04 um 23.04 Uhr einen Max Stop von 20 Punkten dazu programmieren könnte.
Wenn Möglich bitte als Experten (Symbole und Highlight).
Werde dann versuchen zu verstehen, was ich die ganze Zeit falsch gemacht habe.
Vielen Dank.
MK-Trading
Hallo,
ich habe den Indikator "TradingSite" um einen Punkt Stop erweitert:
pds:=Input("% Stop",1,30,3);
pnts:=Input("Punkte Stop",1,3000,20);
StLong:=C-C*pds/100;
StShort:=C+C*pds/100;
stopLong:=If(C<PREV,StLong,Max(StLong,PREV));
stopShort:=If(C>PREV,StShort,Min(StShort,PREV));
EL:= Cross(Mov(C,10,S),Mov(C,30,S));
ES:= Cross(Mov(C,30,S),Mov(C,10,S));
ELP:=ValueWhen(1,BarsSince(el)=1,O)-pnts;
ESP:=ValueWhen(1,BarsSince(es)=1,O)+pnts;
CL:= (C<Ref(StopLong,-1)) OR (BarsSince(EL)<(BarsSince(ES) AND C<ELP));
CS:= (C>Ref(StopShort,-1)) OR (BarsSince(ES)<(BarsSince(EL) AND C>ESP)); ;
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
Du mußt nun lediglich in dem Beitrag vom 21.4.04 um 23.04 den Indikator austauschen.
Anmerkung: Obwohl es jetzt knapp 01.00 Uhr ist, habe ich für die Modifikation keine 18 Stunden gebraucht. ;)
Hallo,
ich habe den Indikator der in den vorherigen Beiträgen beschrieben ist in Metastock übernommen. Da hab ich festgestellt, das ich wenn ich die Werte (% und Punkte)über das Eingabefeld ändere sich der Indikator zwar ändert aber die Signale im Expert nicht übernommen werden. Das geht nur wenn ich direkt in der Formel des Indikator ändere.
Habt ihr vielleicht eine Ahnung woran das liegen kann?
Ich würde auch gerne ein Signal bekommen wenn der MACD seinen Trigger schneidet und nicht wie im Beispiel beim schneiden der beiden GLDs, ich bekomme aber immer Fehlermeldungen wenn ich die Funktion für den MACD ändern will.Kann mir da vielleicht jemand helfen?
@ Reiser77 [#12]
Wenn man in einem Indikator die INPUT Funktion verwendet, nimmt MetaStock in den FML bzw FMLVAR immer den voreingestellten Standardwert. Eine Änderung im Experten findet daher nur statt, wenn der Standardwert geändert wird.
Man könnte daher z.B. die Input-Funktionen durch Variablen ersetzen, die durch externe DLL's gefüllt werden, ersetzen (z.B. Globale Variablen).
@ Reiser77 [#13]
Der in MetaStock implementierte MACD lässt sich nicht modifizieren, er lässt sich aber exakt nachbilden durch die folgende Formel:
a:=0.15;
b:=0.075;
MovAvg:=9;
ShortMA:= If(Cum(1)=1,C,PREV*(1-a)+C*a);
LongMA:= If(Cum(1)=1,C,PREV*(1-b)+C*b);
cMACD:=ShortMA-LongMA;
cTrigger:=Mov(ShortMA - LongMA,MovAvg,E);
cMACD;Mov(cMACD,MovAvg,E)
Mit dieser Formel sollte sich dein Problem dann recht einfach lösen lassen.