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.

Geschrieben von MK-Trading am
MK-Trading
Mitglied seit 11 Jahre 11 Monate

Hat keiner einen Vorschlag ?

metatrader
Mitglied seit 11 Jahre 11 Monate

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)

MK-Trading
Mitglied seit 11 Jahre 11 Monate

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.

MK-Trading
Mitglied seit 11 Jahre 11 Monate

Kann denn niemand was dazu sagen ?

metatrader
Mitglied seit 11 Jahre 11 Monate

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}

praktikus
Mitglied seit 11 Jahre 11 Monate

@ 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

praktikus
Mitglied seit 11 Jahre 11 Monate

@ Metatrader

Oha, das kommt also davon wenn man mal während der Antwort kurz unterbricht. ;-)

Perfektion 1A - as usual. :-)

Gruss,
Martin

MK-Trading
Mitglied seit 11 Jahre 11 Monate

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ß

MK-Trading
Mitglied seit 11 Jahre 11 Monate

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

metatrader
Mitglied seit 11 Jahre 11 Monate

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. ;)

Reiser77
Mitglied seit 11 Jahre 11 Monate

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?

Reiser77
Mitglied seit 11 Jahre 11 Monate

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?

metatrader
Mitglied seit 11 Jahre 11 Monate

@ 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.

Rückrufservice
Beschreiben Sie bitte Ihr Anliegen, damit wir uns auf den Rückruf vorbereiten können.
Ja, ich habe die Datenschutzerklärung zur Kenntnis genommen und willige ein, dass die von mir angegebenen Daten inklusive der Kontaktdaten zwecks Bearbeitung der Anfrage und für den Fall von Anschlussfragen elektronisch erhoben und gespeichert werden. Meine Daten werden dabei nur streng zweckgebunden zur Bearbeitung meiner Anfrage genutzt und nicht ohne Einwilligung weitergegeben. Diese Einwilligung kann jederzeit mit Wirkung für die Zukunft widerrufen werden.
Fragen?

Sie haben Fragen zu ZMP Live? Unser Team steht gerne hilfsbereit zu Ihrer Verfügung. Senden Sie uns gerne eine Nachricht:

Es gilt unsere Datenschutzerklärung

Jetzt registrieren

Jetzt registrieren und ZMP Live+ 14 Tage kostenlos testen!
  • Dauerhaft kostenfrei
  • Keine Zahlungsinformationen erforderlich