|
Gruppen: Kunde
Beiträge: 11
|
Guten Tag,
ich versuche mich zur Zeit sehr laienhaft und autodidaktisch an der Programmierung von Handelssystemen in Market Maker. Das Eine oder Andere einfache System habe ich mir auch hingebastelt. Jetzt scheitere ich gerade an der Losslimit-Funktion. Ich würde gerne einen klassischen, initialen Stop Loss in Höhe des x-fachen ATR einbauen. Da man als Losslimit scheinbar nur einen 5-Wert eingeben kann, habe ich folgende Formel unter $Closeshort probiert:
$Closeshort:=$Low<(($EinstandsKurs-$FaktorStopLong.Default[2])*Close[$Währung].WVola[$Zeitraum])
Dies scheitert allerdings an einem angezeigten Typisierungsfehler, der angezeigt wird, wenn ich wie folgt typisiere
$EinstandsKurs:= Einstandskurs (aus Funktionsassistent eingefügt). Der Bezug auf den Einstandskurs scheint so wohl nicht zu funktionieren.
Da ich keine wirklichen Programmierkenntnisse habe, bin ich sicher, dass der Fehler bei mir liegt. Kann mir jemand helfen ?
Besten Gruß Jens
|
|
Gruppen: Kunde
Beiträge: 167
|
An das L+P team, wieder das Gleiche Verhalten wie in dem Beitrag "Supertrend-Indikator in Market Maker". Ein User sucht Hilfe. Die übrigen User können scheinbar keine Hilfestellung geben. Kann passieren. Aber dass die Moderation des Forums nach über einer Woche nicht reagiert, ist schon frustrierend, wenn man die Aktivität der Moderation im Pai-Pan Forum sieht. L+P hatte in dem Thread „Supertrend-Indikator“ Besserung versprochen. Marcus Lieck schrieb:Hallo Chuck,
ich gebe Ihnen vollkommen recht. Wir werden uns bemühen in solchen Fällen zukünftig besser zu reagieren.
Grüsse aus Dortmund Marcus Lieck L+P, bitte dies auch einhalten!!! Beim Lesen des Beitrags von Jens fallen mir Ungereimtheiten auf. Jens nennt den Tread „ATR-Stop“. In seinen Formeln, die er im Beitrag aufführt sehe ich keinen ATR, sondern nur, dass er mit der Volatilität (WVola) arbeitet. Weiter schreibt er : Jens schrieb: ..... Da man als Losslimit scheinbar nur einen 5-Wert eingeben kann, .... Jens
Was meint er mit 5-Wert? Dies wären für die Moderation schon erste Ansatzpunkte, sich nach einigen Tagen mit einer Antwort einzuschalten, um mehr Klarheit über das eigentliche Ansinnen des Kunden zu erlangen. Die Äußerung in dem Thread „Supertrend-Indikator“ Marcus Lieck schrieb:Hallo Norbert, Hallo Chuck,
.... Es werden alle Kunden, unabhängig vom Produkt, in der Betreuung gleich behandelt und erfahren die selbe Aufmerksamkeit.
Mit freundlichen Grüßen Marcus Lieck
erachte ich durch diesen erneuten Fall leider für sehr fraglich. Mit freundlichen Grüßen Chuck
|
|
Gruppen: Mitarbeiter
Beiträge: 470
|
Hallo Chuck, hallo Jens, da in der MMTalk Programmierung auf unserer Seite auch nur Basiswissen vorhanden ist, ist eine Hilfestellung bei Programmierungen von unserer Seite teilweise sehr schwierig. Dieses hat jedoch nichts damit zu tun das wir nicht helfen wollen oder Market Maker Kunden anders behandelt werden. Die Formel für einen 5-fachen ATR sieht wie folgt aus: 5*ATR($Zeitraum) Leider ist uns jedoch nicht bekannt, wie man den Einstandskurs in einem Handelssystem abfragt, um Ihn in den Zusammenhang mit dem ATR zu bringen. Grüsse aus Dortmund Marcus Lieck
Leiter Produktsupport | Lenz+Partner GmbH | vwd group Phone: +49 231 9153-500 | Fax: +49 231 9153-599 hotline@lp-software.de | www.LP-software.de | www.vwd.com
|
|
Gruppen: Kunde
Beiträge: 11
|
Hallo Zusammen,
vielen Dank für die Unterstützung. In der Tat hatte ich bereits mit Markus Lieck Kontakt, bevor ich das Thema ins Forum gestellt habe. Er hat mir sogar den Tip gegeben, es mal im Forum zu versuchen, weil er auch nicht weiß, wie man sich in MM Talk auf den Einstandskurs beziehen kann. Genau das scheint ja das Problem zu sein.
Eine Verwirrung habe ich selbst geschaffen. Der "5-Wert" war schlicht ein Tippfehler, es sollte %-Wert heißen. Ich bitte um Entschuldigung.
Also, wenn jemand weiß, wie man einen Stop Loss in einem Handelssystem eben nicht als %-Wert sondern als "Einstandskurs abzgl. dem x-fachen ATR" ausdrücken kann, würde mir das sehr helfen. Kann man das ggfs. sonst bei MM direkt anfragen ?
Nochmals Dank an alle, die reagiert haben.
Besten Gruß Jens
|
|
Gruppen: Mitarbeiter
Beiträge: 470
|
Hallo Jens, es wäre sehr schön wenn jemand aus dem Forum Hilfestellung leisten kann. Eine Anfrage an die Entwicklung von Market Maker seitens unseres Supports ist möglich. Die Entwickler benötigen dazu aber in der Regel den Quellcode Ihres Handelssystem, um den genauen Hintergrund der Anwendung zu verstehen. Zudem sind in der Regel Programmierungen durch die Entwicklung von Market Maker kostenpflichtig. Gruss Marcus Lieck
Leiter Produktsupport | Lenz+Partner GmbH | vwd group Phone: +49 231 9153-500 | Fax: +49 231 9153-599 hotline@lp-software.de | www.LP-software.de | www.vwd.com
|
|
Gruppen: Kunde
Beiträge: 144
|
Hallo Jens, eine ATR wird ja immer auf die letzten Kurse des jeweiligen Wertes berechnet (Also nicht direkt auf den Einstandskurs). Ein Einstandskurs kann leicht in die Formel integriert werden, wenn man einfach z.B. $E (oder eben anders) in die Formel eingibt. Dann erscheint unter Parameter E und ich kann dann den jeweiligen Einstandskurs per Hand eingeben. Da der Einstandskurs bei jedem Wertpapier anders ist, ist das eine akzeptable Verfahrensweise.
|
|
Gruppen: Kunde
Beiträge: 167
|
Hallo Jens, rufe einmal die Online Hilfe auf und gib unter dem Reiter "Suchen" den Begriff Handelssystem ein und Klicke dann auf "Themen Auflisten". In der Ergebnisliste siehts Du als 2. Eintrag "Konstruktoren", Doppelklick darauf. Dort findest Du Deine Lösung. Hier siehst Du als erstes, wie der Operator / die Funktion "Handelssystem" definiert ist. Ich denke Du meinst mit Losslimit-Funktion in dieser Definition den Parameter Limit (rote Schrift). Zitat:Wertpapier.HandelsSystem[Linien;Long;Short;CloseLong;CloseShort;SignalModus;Leerverkäufe_einbeziehen;Spesen;Limit;Zins;Kurse;Delay;Slippage]→Handelssystem In der Erklärung heißt es dann zu Limit: Zitat:Limit(Zahl | Funktion): Angabe für die Performanceauswertung. Limit ist nur ein optionaler Parameter, der nicht verwendet werden muss. Will man ihn verwenden, dann kann er entweder eine Zahl sein, oder wie es in der Erklärung heißt, eine Funktion ein anonymes Makro. Und direkt darunter ist Beispiel 1 das Prinzip was Du beschreibt. Zitat:zu Limits: Für die Definition eines Limitschemas wird mit dem Parameter <Limit> eine Funktion (ein anonymes Makro) übergeben, die die Entscheidung über einen Limitausstieg für eine Handelsposition treffen soll. Diese Funktion hat die Parameter:Wertpapier: das ausgewertete Wertpapier. Long(Boolean): Anzeige, ob es sich um eine Long- (true) oder Short-Position (false) handelt. EntryPrice(ZahlMitZeit): Einstiegspreis und Datum (also der Wertpapier-Kurs des auf das Signal folgenden Tages). CurrentPrice(ZahlMitZeit): momentaner Ausstiegspreis mit Datum. Als Ergebnis sollte die Funktion ein Boolean liefern, true (ja) bedeutet "Limitausstieg". Die Limit-Funktion wird ab dem Einstiegszeitpunkt einer Handelsphase für jeden weiteren Kurs (auf täglicher Basis) ausgewertet, solange bis sie true liefert (oder andere Signale die Handelsphase beenden). Beispiel 1: Code:#[$Long;$EntryPrice;$CurrentPrice]( if($Long; $CurrentPrice<$EntryPrice*(1-$Losslimit); $CurrentPrice>$EntryPrice*(1+$Losslimit)) ) Diese Funktion testet, ob der Kurs unter den Einstiegskurs abzüglich eines konfigurierbaren Prozentsatzes ($LossLimit) gesunken ist (Nontrailing Loss). Für Short-Positionen muss die Auswertung gespiegelt werden. Der Wert zu einem bestimmten Datum wird immer mit der Funktion AT[Datum;Zeitraum] ermittelt. Das Datum zu dem Du den Wert des ATR wissen willst, ist zu dem Datum des Einstieges, also das Datum des EntryPrices. Du musst für Deine Lösung den Ausdruck "$EntryPrice*(1-$Losslimit)" entsprechend anpassen. Code:#[$Long;$EntryPrice;$CurrentPrice]( if($Long; $CurrentPrice<($EntryPrice-$Faktor*$ATR.at[$EntryPrice.datum]); $CurrentPrice>($EntryPrice+$Faktor*$ATR.at[$EntryPrice.datum])) ) Manchmal muss man einfach nur in der Dokumentation (Benutzerhandbuch oder MM-Talk Referenz) suchen, um entsprechende Hinweise und Beispiele für einen möglichen Lösungsansatz zu finden. Schau Dir dann noch das Beispiel 2 in diesem Teil der Dokumentation an. Es zeigt Dir wie Du einen Trailing Stop realisieren kannst, was Du ja wahrscheinlich im Endeffekt verwenden willst. Ich hoffe ich konnte Dir damit weiterhelfen. Chuck
|
|
Gruppen: Kunde
Beiträge: 11
|
Hallo Chuck, hallo Roland,
herzlichen Dank für Eure Hinweise - ich werde in den nächsten Tagen versuchen, Eure Tips mal umzusetzen.
Beste Grüße Jens
|
|
Gruppen: Kunde
Beiträge: 167
|
Hallo Jens, oder sollte man Dich nicht besser „Early Bird“ nennen . Morgens 5:30 Uhr schon aktiv am PC , das ist mir echt zu früh. Noch ein paar Worte zum Thema Handelssystem. Market maker bietet in dieser Richtung einiges an Leistungen und Möglichkeiten an. Aber es fehlt jedoch das Entscheidende, um dieses Feature auch effizient einsetzen zu können. Die Orderschnittstelle zum Broker. Und bis diese vielleicht einmal angeboten wird, ist das Ganze nur teilweise brauchbar. Vielleicht kennst Du den „großen Bruder“ der market maker ppx Software. Es ist der vwd portfolio manager. Er wird von Vermögensverwaltern und Banken eingesetzt. Market maker ist um Funktionen im Bereich der Depotverwaltung (Anzahl der möglichen Depots) und im Bereich der Reports gegenüber dem vwd portfolio manager nicht so mächtig. Mir liegt die Dokumentation der vwd portfolio manager Version 4 vor. Dort gibt es in den beiden genannten Bereichen zusätzliche MM-Talk Befehle und es gibt viele vordefinierte Reports, die die tägliche Arbeit eines Vermögensverwalters abdecken. Im vwd portfolio manager gibt es in der Version 5 eine sehr mächtige Orderschnittstelle (siehe Beschreibung im Anhang). Bisher wurden Funktionen, die auch für den Privatanwender von Nutzen sind in späteren Updates von market maker kostenpflichtig angeboten. Vielleicht gibt es ja bald market maker auch in der Version 5 mit der Orderschnittstelle. Chuck Dateianhänge: PortfolioManager_Portfolio_Sync_Interface.pdf (285kb) downloaded 75 time(s).
|
|
Gruppen: Kunde
Beiträge: 11
|
Hallo Chuck,
keine Sorge, ich habe nicht jeden Morgen Bettflucht und bin so früh auf den Beinen....
Deine Hinweise zum VWD Portfolio Manager sind interessant, mal sehen ob das irgendwann für MM auch kommt. Allerdings habe ich da meine Zweifel, ist doch die Veränderungsgeschwindigkeit bei MM nicht gerade beeindruckend. Mal sehen...
Nochmals danke für Deine Hinweise. Sobald ich Zeit habe, mache ich mich da mal dran. Was mir noch nicht ganz klar ist: An welche Stelle in einem typischen Handelssystem muß ich den von Dir angepassten Code denn schreiben ? Sorry, aber meine Programmierkenntnisse gehen wirklich gegen null.
Besten Gruß
Jens
|
|
Gruppen: Kunde
Beiträge: 167
|
Hallo Jens, ich stelle hier einfach mal eine Reihenfolge ein. Dies ist kein vollständiges oder "sinnvolles" Handelssystem! Code:$C:=close;
{ ------------------------------------- Berechnung des ATR -------------------------------------} $ATR:=$C.TrueRange.MA[$ATR_Zeit];
{ -------------------------------------------------------------------- Formel für Limitfunktion, hier wie in Deinem Beitrag beschrieben: "Ich würde gerne einen klassischen, initialen Stop Loss in Höhe des x-fachen ATR einbauen." Dies ist kein Trailing Stop! ------------------------------------------------------------------} $Limit:=#[$Long;$EntryPrice;$CurrentPrice]( if($Long; $CurrentPrice<($EntryPrice-$Faktor*$ATR.at[$EntryPrice.datum]); $CurrentPrice>($EntryPrice+$Faktor*$ATR.at[$EntryPrice.datum])) ); { ----------------------------------------------------------------------- Weitere Formeln für die Variablen im Handelssystem, soweit diese automatisch berechnet werden sollen. $Linien $Long $Short .... ----------------------------------------------------------------------}
HandelsSystem[ $Linien; {Anzeigelinien, ggf. mit Hilfslinien} $Long; {Signalzeitreihe logisch (0/1) für Long} $Short; {Signalzeitreihe logisch (0/1) für Short} $CloseLong; {Signalzeitreihe logisch (0/1) für CloseLong} $CloseShort; {Signalzeitreihe logisch (0/1) für CloseShort} $SignalModus; {Modus der Signalgenerierung: 0,1,2 oder 4} $Leerverkäufe_einbeziehen; {Shortphasen ignorieren: ja/nein} $Spesen; {Handelsspesensatz} $Limit; {zusätzliche Limitstrategie} $Zins; {Outzinsen} $Kurse; {Zeitreihe der Handelskurse falls nicht Close} $Delay; {Signalverzögerung} $Slippage {Handelskurs-Minderung} ] So dies ist die Reihenfolge wie ich vorgehe. Du kannst natürlich statt der Variablen im Handelssystem an deren Stelle direkt die Formel setzen, dann brauchst Du sie weiter oben nicht anzugeben. Aber das wirkt bei kompexeren Berechnungen dann sehr schnell unübersichtlich. Ich hoffe ich konnte Deine Frage damit beantworten. Chuck
|
|
Gruppen: Kunde
Beiträge: 11
|
Hallo Chuck,
super - damit kann ich etwas anfangen. Herzlichen Dank und beste Grüße
Jens
|
|
Gruppen: Kunde
Beiträge: 11
|
Hallo Chuck,
trotz deiner Hilfe komme ich einfach mit meinem ATR-Stop nicht weiter. Ich habe mal versucht, ein bekanntes Trendfolgesystem (Turtle Trader System 1) in Market Maker zu programmieren. Das System ist relativ einfach: Einstieg Long beim 20- Tage Hoch, Ausstieg beim 10-Tage Tief, Short Trades einfach umgekehrt. Zur Absicherung haben die "Turtles" eben einen initialen Stop in Höhe der 2-fachen ATR gesetzt (Non-Trailing), so dass der Ausstieg erfolgte, sobald entweder dieser initiale Stop gerissen oder im positiven Fall das 10-Tage Tief als Trailing Stop unterschritten wurde.
Die Programmierung ist einfach und auch mir gelungen, lediglich den ATR-Stop bekomme ich nicht funktionsfähig hin. Hast Du eine Idee was ich falsch mache (siehe unten) ?
Besten Gruß Jens
{ ------------------------------------- Berechnung des ATR -------------------------------------} $ATR:=TrueRange.MA[$ATR_Zeit];
{ -------------------------------------------------------------------- Formel für Limitfunktion, hier wie in Deinem Beitrag beschrieben: "Ich würde gerne einen klassischen, initialen Stop Loss in Höhe des x-fachen ATR einbauen." Dies ist kein Trailing Stop! ------------------------------------------------------------------}
$High20:=high.PeriodenMaximum[$Zeitraum_Long]; $High10:=high.PeriodenMaximum[$Zeitraum_CloseShort]; $Low20:=low.PeriodenMinimum[$Zeitraum_Short]; $Low10:=low.PeriodenMinimum[$Zeitraum_Closelong];
$Close:=close; $Low:=low; $High:=high; $Open:=open;
$Linien:=LinesMulti($High20;$High10;$Low20;$Low10) ;
$Long:=$High> $High20.before[1];
$Closelong:=$low<$Low10.before[1];
$Short:= $low<$Low20.before[1];
$Closeshort:=$High> $High10.before[1];
$Losslimit:=#[$Long;$EntryPrice;$CurrentPrice]( if($Long; $CurrentPrice<($EntryPrice-$Faktor*$ATR.at[$EntryPrice.datum]); $CurrentPrice>($EntryPrice+$Faktor*$ATR.at[$EntryPrice.datum])) );
HandelsSystem[ $Linien; $Long; $Short; $CloseLong; $CloseShort; $SignalModus; $Leerverkäufe_einbeziehen; $Spesen; $Losslimit]
|
|
Gruppen: Kunde
Beiträge: 144
|
Hallo Jens,
lohnt sich denn das System? Ich habe vorlanger Zeit mit jeweils 20 Tagen ein Turtle-System erstellt, was aber relativ schlechte Ergebnisse lieferte.
Vermute sowieso, dass die Turtle-Trader den Einstandskurs nicht in ein Handelssystem integriert haben, sonder nur nebenbei berechnet.
Roland
|
|
Gruppen: Kunde
Beiträge: 11
|
Hallo Roland,
ehrlich gesagt wollte ich gerade mit der Programmierung testen, welche Ergebnisse es liefert. Ich glaube, dass die grundsätzliche Idee noch immer funktionieren kann, wenn man die richtigen Märkte handelt. Ich würde wahrscheinlich aber verschiedene Parameter testen wollen, die 20- und 55- Tage Ausbrüche sind nach meinem Gefühl zu häufig Fehlausbrüche. Allerdings ist der initiale Stop in Höhe der 2fachen ATR aus meiner Sicht wichtiger Bestandteil der Strategie, da ansonsten das 10- bzw. 20 Tage Tief als Stop zu Beginn doch zu weit vom Einstand entfernt ist.
Viele Grüße Jens
|
|
Gruppen: Kunde
Beiträge: 167
|
Hallo Jens, Ich hatte meinen Vorschlag Zitat:$Limit:=#[$Long;$EntryPrice;$CurrentPrice]( if($Long; $CurrentPrice<($EntryPrice-$Faktor*$ATR.at[$EntryPrice.datum]); $CurrentPrice>($EntryPrice+$Faktor*$ATR.at[$EntryPrice.datum])) ); nicht direkt in einem Handelssystem ausprobiert und war jetzt verwundert, dass es nicht gehen soll. Ich habe es jetzt selbst ausprobiert. Was ich herausgefunden habe ist, dass der Ausdruck Code:$ATR.at[$EntryPrice.datum] in dem anonymen Makro Limit im Zusammenhang mit der Funktion „Handelssystem“ nicht berechnet wird. Ich werde versuchen in Erfahrung zu bringen warum nicht. Kann aber dauern. Ich melde mich, wenn ich etwas neues zu dem Thema habe. Gruß Chuck
|
|
Gruppen: Kunde
Beiträge: 11
|
Hallo Chuck,
ganz herzlichen Dank für Deine Antwort. Ich bin gespannt, ob Du etwas herausfinden kannst.
Viele Grüße Jens
|
|
Gruppen: Kunde
Beiträge: 167
|
Hallo Jens, Der Fehler liegt in Deiner Berechnung des ATR. Code:{ ------------------------------------- Berechnung des ATR -------------------------------------} $ATR:=TrueRange.MA[$ATR_Zeit];
Du hast kein Eingangsobjekt für die Funktion TrueRange angegebenen. Schau dir einmal das Makro TrueRange an, es erwartet eine Zeitreihe als Eingangsobjekt. Die Zeile muss richtigerweise heißen: Zitat:$ATR:=Close.TrueRange.MA[$ATR_Zeit];
Viel Erfolg. Vielleicht kannst Du ja einmal über Deine Erkenntnis bezüglich der Tutle Strategie berichten. Gruß Chuck
|
|
Gruppen: Kunde
Beiträge: 11
|
Hallo Chuck,
ok - das macht Sinn. Nochmals Danke für's "Kümmern" - Du kennst Dich ja echt gut aus. Da ich zur Zeit unterwegs bin, kann ich es erst morgen ausprobieren. Ist denn aus Deiner Sicht das Handelssystem so richtig programmiert ?
Wenn es funktioniert, berichte ich gerne mal über meine Erkenntnisse zur Turtle-Strategie.
Besten Gruß Jens
|
|
Gruppen: Kunde
Beiträge: 167
|
Hallo Jens, soweit ich sehen kann, Ja. Ich habe die Formel eingesetzt, Signalmodus auf 4 und sehe alle Signale (5 verschiedene Typen) so wie sie im Handbuch beschrieben sind. Gruß Chuck Dateianhänge: Signale.pdf (49kb) downloaded 64 time(s).
|
|
Guest |