Erster Versuch

Last updated 1 week, 3 days ago by avatar Despair.

10 post(s)
  • #42507

    Hallo zusammen, bin ganz ganz neu hier und mache gerade die ersten Gehversuche mit einem ganz einfachen System. Aber es will einfach kein Backtest funktionieren, woran kann es liegen?

    Das System: DAX, monthly. Wenn open um 250-500 Pkt kleiner als open des Vormonats, dann Long-Positioneröffnen. TP 250, SL 300, max. 30 Tage stehenlassen.

    // DAX – IG Market
    // Time Frame = 1 Month

    // general parameters
    defparam cumulateorders = false
    once positionSize = 1

    // conditions to enter long
    if open < (open[-1] – 250) and open > (open[-1] – 500) then
    buy positionSize contract at market
    endif

    if longonmarket then
    set stop ploss 300
    set target pprofit 250
    endif

    #42546

    Hallo Teddy,

    Wenn du das Open des vorherigen Monats haben willst ist es open[1] (keine -1). Open ohne Klammern gibt dir das Open des Monats der gerade um ist, da PRT deinen Code immer nur am Ende jeder Kerze durchgeht. Ich weiss nicht, ob du das berücksichtigt hast.

    Hier dein berichtigter Code.

    Da der Code wie gesagt immer am Ende jeder Kerze ausgewertet wird, hast du natürlich eine saftige Verzögerung in deinem Programm.

    Bsp.: Ende diesen Monats (August) guckt das Program, ob der Dax am 1.8. 250-500 Pkte. niedriger war als am 1.7.. Wenn das der Fall war, dann gehst du long. Ich glaube, das hattest du dir anders vorgestellt.

    #42622

    Oh das war mir nicht bekannt, dass der Code nur an Ende einer Kerze ausgeführt wird. Ich hatte auch schon nach Fachliteratur Ausschau gehalten, wo so etwas drin steht, hab aber leider nix gefunden. Danke erstmal.

    #42628

    So, nun habe ich auf Stundenbasis umgestellt, um 1 h nach Eröffnung des 1.Tages eines Monats einen Trade starten zu können. Im Backtest rührt sich dennoch nichts. Irgendwas scheint noch nicht zu stimmen?

    // DAX – IG Market
    // Time Frame = 1 h

    // general parameters
    defparam cumulateorders = false
    once positionSize = 1

    // conditions to enter long
    if day = 1 and Hour = 1 and open <= (DOpen(30) – 250) and open >= (DOpen(30) – 500) then
    buy positionSize contract at market
    endif

    if longonmarket then
    set stop ploss 300
    set target pprofit 250
    endif

    if day = 28 or 29 or 30 and longonmarket then
    sell positionSize contract at market
    endif

     

    #42637

    Wann genau willst du das dein Program eine Position eröffnet. Du vergleichst jetzt den Kurz vom Abend (21:00) des letzten des Monats mit dem Kurs um 1:00 (nachts) am 1. des Monats. Fällt der 1. auf ein Wochenende geht’s in die Hose. Mit solchen Zeitangaben muss du immer ganz genau gucken, dass die auch dann ausgeführt werden, wenn du das willst.

    Oft hilft es den Inhalt der Variablen mit “graph” ausgeben zu lassen, damit man sehen kann, was genau passiert.

    #42638

    Außerdem benutze bitte <> um Code einzufügen, sonst bekommst du’s bald mit Nicolas zu tun. 😉

    #42639

    Am Wochenende soll natürlich nicht versucht werden, einen Trade einzugehen 🙂

    Eine Position long soll morgens (am besten gegen 09:00 h) am 1.Handelstag eines Monats eröffnet werden, wenn der Kurs am 1.Handelstag des Vormonats zur gleichen Zeit 250-500 Pkt höher war. Man muß sich ganz genau bzw. interpretationsfrei ausdrücken, dass habe ich jetzt auch schon bemerkt. Der Code ist nicht wohlwollend bzw. kann den Willen des Autors nicht umsetzen wenn es nicht zu 100 % stimmt …

     

    #42660

    Das ist richtig, du musst immer alle Eventualitäten berücksichtigen. Was ist, wenn der 1. ein Son- oder Feiertag ist? Hat die Umstellung von Sommer- zu Winterzeit hier Einfluß? Beim Programmieren ist es eher so, das was schiefgehen kann, tut es auch früher oder später. 🙂

    #42665

    Im Programmierhandbuch von ProOrder ist “Day” definiert mit: Gibt den Tag des aktuellen Balkens an.” Es wird leider nicht unterschieden zwischen Handelstag und Kalendertag, beides muss ja nicht identisch sein. Es stellt sich mir also die Frage, wie man den 1.Handelstag exakt anspricht, ohne Handelstag und Kalendertag zu verwechseln, sodaß eine fehlerfreie Ausführung sichergestellt ist. Despair weiß wie?

    #42667

    Es gibt leider keine PRT Variable die angibt, ob der heutige Tag ein Handelstag ist, oder nicht. Du musst das selber programmieren. currentdayoftheweek gibt dir den aktuellen Wochentag. Also muß dein Program gucken, ob der 1. ein Sontag oder Samstag ist.Wenn ja dann warte bis Montag. Dann musst du gucken, wie die Situation vor einem Monat war. So etwas fehlerfrei zu programmieren ist etwas lästig, mit 7  Tagen in einer Woche und Monaten die mal 30 und mal 31 Tage lang sind…

    Aber nicht verzweifeln, es ist machbar. 🙂

10 post(s)

Create your free account now and post your request to benefit from the help of the community
Register or