ATR Trendfolge-System
Forums › ProRealTime Deutsch forum › ProOrder Support › ATR Trendfolge-System
- This topic has 10 replies, 2 voices, and was last updated 4 years ago by Tilmann.
-
-
06/23/2020 at 11:48 AM #136919
Hallo,
ich habe ein Handelssystem, welches ich versuche in ProBuilder zu programmieren.
Es scheint jedoch ein Fehler im Programmcode zu existieren, weil im Backtest die Orders falsch gesetzt werden.Nun weiß ich nicht mehr weiter.
Evtl. kann mir jemand helfen:123456789101112131415161718defparam cumulateorders=falseif not onmarket thenatr=AverageTrueRange[5](close)buy 1 contract at close[1]+atr*0.88 STOPsellshort 1 contract at close[1]-atr*0.88 STOPbuysl = close[1]-atr*0.88sellsl = close[1]+atr*0.88endifif longonmarket thenset stop loss buyslendifif shortonmarket thenset stop loss sellslendifDas System ist simpel:
Long: Wenn Schlusskurs letzte Kerze + (ATR[5]*0,88)
Short: Wenn Schlusskurs letzte Kerze – (ATR[5]*0,88)
Stop Long: Schlusskurs letzte Kerze – (ATR[5]*0,88)
Stop Short: Schlusskurs letzte Kerze + (ATR[5]*0,88)
Die Werte beziehen sich auf 5-Minuten-Perioden.
Vielen Dank bereits vorab!
06/25/2020 at 7:59 AM #137090Warum sind die Bestellungen Ihrer Meinung nach nicht richtig eingestellt? Haben Sie versucht, die Preisniveaus grafisch darzustellen, mit denen Sie Ihre ausstehenden Bestellungen festlegen? So was:
12graphonprice close[1]+atr*0.88graphonprice close[1]-atr*0.88Die Anweisung Schließen [1] bezieht sich auf den Kerzenhalter vor 1 Balken und nicht auf das Lesen des Codes. Das Problem könnte sein, dass Sie versuchen, STOP-Aufträge auf ein Niveau zu bringen, das bereits durch den Preis gebrochen ist. Daher könnten Sie dort denken, dass es ein Problem gibt.
1 user thanked author for this post.
06/25/2020 at 8:25 AM #137093Hallo Nicolas, vielen Dank! Die Nachverfolgung der Orders habe ich über die Orderliste aus dem Backtest nachvollzogen. Die Orderliste zeigt, dass schon die erste Order falsch gesetzt wird.
Vorher habe ich mir noch folgenden Indikator erstellt, um die Preise vergleichen zu können:
123456atrs = AverageTrueRange[5] * 88LongBuy = Close[1] + atrsShortsell = Close[1] - atrsreturn LongBuy coloured(0, 178, 66) as "Long Buy", Shortsell coloured(255, 0, 0,)as "Short Sell"Hiernach wird der erste Preis der neuen Kerze nach dem letzten Schlusskurs (CLOSE[1]) genommen und die ATR überhaupt nicht berücksichtigt.
Bei den STOP-Aufträgen macht die ATR den Unterschied. Im Fall einer LONG-Position wird bei CLOSE[1]+ATR *0.88 gekauft und der STOP liegt bei CLOSE[1] – ATR*0.88. Dadurch müsste der Preis zwischen Kauf und Stop eigentlich unterschiedlich sein, wenn die ATR berücksichtigt wird. Danke!
06/25/2020 at 9:29 AM #13709706/25/2020 at 9:36 AM #13710206/25/2020 at 2:25 PM #137132Mit diesem Code sollte alles gut funktionieren:
1234567891011121314151617181920212223defparam cumulateorders=falseif not onmarket thenatr=AverageTrueRange[5](close)buy 1 contract at close[1]+atr*0.88 STOPsellshort 1 contract at close[1]-atr*0.88 STOPbuysl = atr*0.88sellsl = atr*0.88endifif longonmarket thenset stop loss buyslendifif shortonmarket thenset stop loss sellslendifgraphonprice close[1]+atr*0.88graphonprice close[1]-atr*0.88SET STOP LOSS ist eine Entfernung, kein Preisniveau!
06/25/2020 at 3:36 PM #137142Ich habe den Code so angewendet aber leider funktioniert bereits die BUY- und SELL Order nicht so wie gedacht. Es scheint, dass die ATR einfach nicht berücksichtigt wird.
Gekauft/Verkauft wird zum Eröffnungskurs der Folgekerze ohne die ATR*0,88 auf den Schlusskurs der Vorkerze zu addieren/hinzuzurechnen.
Trotzdem großen Dank für die Hilfestellung Nicolas!
06/25/2020 at 4:31 PM #137153Ich glaube nicht, wenn Sie sich das Diagramm ansehen, in dem der korrekt berechnete Wert korrekt angegeben ist, der vorherige Abschluss +/- 88% der ATR 5-Perioden. Ich verstehe nicht, warum Sie ihn nicht sehen. Wenn Sie einen BUYSTOP auf ein Preisniveau setzen, über dem Sie liegen, wird die Bestellung direkt auf den Markt gebracht.
06/26/2020 at 8:41 AM #137216Okay, verstanden. Ich habe das mit dem BUYSTOP falsch verstanden. So funktioniert das in der Tat richtig.
In der Strategie hatte ich das jedoch so gedacht, dass CLOSE[1] +/- ATR*0,88 wie zwei Bänder (oberes und unteres Band) mitlaufen und die Orders dann jeweils zu den Kursen (limitierte Order) ausgeführt werden, sobald die Bänder durchbrochen werden (BUY LIMIT ?)
Wenn der Kurs das obere Band durchbricht wird gekauft (BUY) und wenn der Kurs das untere Band durchbricht wird verkauft (SHORTSELL). Die Stoploss werden jeweils an das obere und untere Band gesetzt. Sorry für meine schlechte Programmierkenntnisse…
06/26/2020 at 11:57 AM #137242Das macht der Code schon! Schauen Sie sich die Bänder an, wenn Sie einen Backtest durchführen. Dies sind die Ebenen der Kauf- / Verkaufsaufträge. Möglicherweise haben Sie auch nicht verstanden, dass der Code beim Schließen der Leiste nur einmal ausgeführt wird. Daher bezieht sich die Anweisung Schließen [1] auf den Balken vor dem aktuellen. Sie sollten es mit Close [0] versuchen. Dies ist die Leiste, wenn der Code gelesen wird.
1 user thanked author for this post.
06/26/2020 at 1:06 PM #137249Mit Close[0] hat es geklappt – VIELEN DANK NICOLAS!
12345678910111213141516171819defparam cumulateorders=falseatr=AverageTrueRange[11](close)buy 1 contract at close+atr*0.55 STOPsellshort 1 contract at close-atr*0.55 STOPbuysl = atr*0.55sellsl = atr*0.55if longonmarket thenset stop loss buyslif shortonmarket thenset stop loss sellslendifgraphonprice close[1]+atr*0.55graphonprice close[1]-atr*0.55endifDie ATR habe ich zwischenzeitlich auf 11 und den Multiplikator auf 0,55 gesetzt.
Um die Sache abzuschließen habe ich noch das Gewinn-/Verlustprofil im Backtest angehängt. Ein schönes Wochenende….
-
AuthorPosts