Fehlermeldung beim Code für Oil Strategie

Viewing 5 posts - 1 through 5 (of 5 total)
  • Author
    Posts
  • #244911 quote
    denordstate
    Participant
    New

    Hallo zusammen.

    Könnt Ihr mir helfen? Ich möchte eine Strategie Backtesten und benötige den richtigen Code dafür. Mithilfe von Copilot habe ich die Strategie-Parameter in einen Code schreiben lassen. Jedoch funktioniert er nicht. Könnte jemand bitte mal rüber schauen?

    Strategie:

    Handelsstrategie für Brent Oil (5-Minuten-Chart) in ProRealTime

    1. Basiswerte & Indikatoren
    Instrument: Brent Oil
    Zeiteinheit: 5-Minuten-Chart
    Indikatoren:
    Bollinger Bänder (Standard-Einstellungen)
    SMA200 (Gleitender Durchschnitt mit Periode 200)
    2. Einstiegskriterien (Order-Platzierung um 9:55 Uhr)
    Long Order:

    Bedingung: Schlusskurs des 9:50-Uhr-Kerzenbalkens liegt über dem SMA200.
    Einstieg: Oberes Bollinger Band von 9:50 Uhr.
    Ordertyp:
    Limit Buy Order, falls der aktuelle Kurs um 9:55 Uhr unter dem oberen Bollinger Band liegt.
    Stop Buy Order, falls der aktuelle Kurs um 9:55 Uhr über dem oberen Bollinger Band liegt.
    Short Order:

    Bedingung: Schlusskurs des 9:50-Uhr-Kerzenbalkens liegt unter dem SMA200.
    Einstieg: Unteres Bollinger Band von 9:50 Uhr.
    Ordertyp:
    Limit Sell Order, falls der aktuelle Kurs um 9:55 Uhr über dem unteren Bollinger Band liegt.
    Stop Sell Order, falls der aktuelle Kurs um 9:55 Uhr unter dem unteren Bollinger Band liegt.
    3. Stop-Loss & Take-Profit (CRV 2:1)
    Stop-Loss:

    Long Order: Stop-Loss auf dem unteren Bollinger Band von 9:50 Uhr.
    Short Order: Stop-Loss auf dem oberen Bollinger Band von 9:50 Uhr.
    Take-Profit:

    Berechnung der Bandbreite:
    Bandbreite
    =
    Oberes Bollinger Band

    Unteres Bollinger Band
    Bandbreite=Oberes Bollinger Band−Unteres Bollinger Band
    Long Order: Take-Profit = Einstiegspreis + (2 × Bandbreite).
    Short Order: Take-Profit = Einstiegspreis – (2 × Bandbreite).
    4. Ausstiegsregeln (Falls Trade oder Order noch offen ist)
    Falls der Trade um 21:40 Uhr noch offen ist:
    Market-Exit (Trade wird unabhängig vom Gewinn/Verlust geschlossen).
    Falls die Order bis 18:00 Uhr nicht ausgeführt wurde:
    Order wird storniert, inklusive Stop-Loss und Take-Profit.
    Zusätzliche Punkte:
    ✔ Jeden Tag nur eine Order: Entweder Long oder Short, basierend auf der SMA200-Bedingung.
    ✔ Trading nach festen Uhrzeiten: Alle Berechnungen basieren auf den Daten von 9:50 Uhr, Orderplatzierung um 9:55 Uhr.
    ✔ Striktes Risikomanagement: Stop-Loss immer festgelegt, Take-Profit mit festem CRV von 2:1.

    Der Code wurde erstellt aber leider mit Fehlermeldung:

    // Indikatoren

    indicator(“Handelsstrategie für Brent Oil”, shorttitle=”Brent Strategy”, overlay=true)

    SMA200 = sma[close](200)

    BollingerUp = bbands[close](20, 2)[1]

    BollingerLow = bbands[close](20, 2)[2]

     

    // Variablen für Zeit und Preis

    var float entryPrice = na

    var float stopLoss = na

    var float takeProfit = na

    var float bandWidth = na

     

    // Bedingung für Long Order

    if (hour(timenow) == 9 and minute(timenow) == 50)

    if (close > SMA200)

    entryPrice = BollingerUp

    stopLoss = BollingerLow

    bandWidth = BollingerUp – BollingerLow

    takeProfit = entryPrice + 2 * bandWidth

    if (close < BollingerUp)

    buy 1 contract at limit entryPrice

    else

    buy 1 contract at stop entryPrice

     

    // Bedingung für Short Order

    if (hour(timenow) == 9 and minute(timenow) == 50)

    if (close < SMA200)

    entryPrice = BollingerLow

    stopLoss = BollingerUp

    bandWidth = BollingerUp – BollingerLow

    takeProfit = entryPrice – 2 * bandWidth

    if (close > BollingerLow)

    sell 1 contract at limit entryPrice

    else

    sell 1 contract at stop entryPrice

     

    // Exit Regeln

    if (marketposition != 0)

    if (time > timenow(21, 40, 0))

    exitshort “Market Exit” from entry(“”), close

    if (time > timenow(18, 0, 0))

    exitshort “Cancel Order” from entry(“”), close

    if (marketposition == 1)

    exitlong from entry(“”), stoploss(“Stop Loss”, stopLoss)

    exitlong from entry(“”), takeprofit(“Take Profit”, takeProfit)

    else if (marketposition == -1)

    exitshort from entry(“”), stoploss(“Stop Loss”, stopLoss)

    exitshort from entry(“”), takeprofit(“Take Profit”, takeProfit)

    #244924 quote
    Iván González
    Moderator
    Master

    Hola. Hier ist ein Code:

    defparam FLATAFTER=214000
    
    SMA200 = average[200](close)
    BBup = BollingerUp[20](close)
    BBdn = BollingerDown[20](close)
    bandWidth = BBup - BBdn
    
    startTime=095000
    endTime=180000
    
    if opentime>=startTime and opentime[1]<startTime and close>sma200 and close<BBUp then
    tradeLong=1
    tradeShort=0
    entryPrice = BBup
    stopLoss = BBdn
    takeProfit = entryPrice + 2 * bandWidth
    elsif opentime>=startTime and opentime[1]<startTime and close<sma200 and close>BBdn then
    tradeLong=0
    tradeShort=1
    entryPrice = BBdn
    stopLoss = BBup
    takeProfit = entryPrice - 2 * bandWidth
    endif
    
    count=(longtriggered or shorttriggered)+count
    
    if not onmarket and opentime>=startTime and opentime<endTime and tradeLong and count=0 then
    buy 1 contract at entryPrice stop //limit
    elsif not onmarket and opentime>=startTime and opentime<endTime and tradeShort and count=0 then
    sellshort 1 contract at entryPrice stop //limit
    elsif opentime>=endTime  then
    count=0
    tradeLong=0
    tradeShort=0
    endif
    
    set stop price stopLoss
    set target price takeProfit
    
    graphonprice sma200 as "SMA" coloured("blue")
    graphonprice BBup as "Bollinger Up" coloured("fuchsia")
    graphonprice BBDn as "Bollinger Dn" coloured("fuchsia")
    
    graphonprice takeProfit as "TP" coloured("green")
    graphonprice stopLoss as "SL" coloured("red")
    graphonprice entryPrice as "buyP" coloured("darkblue")
    denordstate thanked this post
    #245208 quote
    denordstate
    Participant
    New

    Hola Iván,

    quiero agradecerte de todo corazón por tu rápida y valiosa ayuda. Lamentablemente estuve fuera de combate los últimos días debido a un fuerte virus estomacal, así que todavía no había tenido la oportunidad de revisar tu respuesta con calma.

    Hoy es mi primer día de regreso en la oficina, y durante el transcurso del día o, a más tardar, mañana, me pondré a probar el código que me enviaste.

    Desde ya, ¡muchísimas gracias por tu esfuerzo y tu rápida respuesta! Es realmente admirable ver lo servicial y comprometida que es la ayuda aquí en el foro. Lo valoro muchísimo y me parece genial no estar solo con este tipo de dudas.

    Sin falta, te escribiré nuevamente en cuanto haya probado el código.
    ¡Mil gracias de nuevo!

    Un saludo muy cordial,

    Mario

    Iván González thanked this post
    #248255 quote
    denordstate
    Participant
    New

    Hallo Iván,

    ich hoffe, es geht dir gut!

    Ich hatte noch einmal Kontakt mit Frau Sommer und möchte mich erneut mit einer Bitte an dich wenden. Ich arbeite weiterhin intensiv an meiner Öl-Strategie, doch leider funktioniert die Umsetzung im ProRealTime-System noch nicht so, wie ich es mir wünsche.

    Es werden nicht alle Trades so ausgeführt, wie ich sie im MetaTrader manuell – basierend auf ganz klaren Regeln – erfolgreich handele. Ich habe die Strategie nun noch einmal überarbeitet und alle Bedingungen präzise formuliert.

    Da ich bislang mit deiner Hilfe sehr gute Erfahrungen gemacht habe, wollte ich dich fragen, ob du mich erneut unterstützen könntest, einen funktionierenden ProRealTime-Code zu erstellen. Leider komme ich mit ChatGPT bei der Programmierung nicht weiter – es schleichen sich immer wieder Fehler ein, sodass das Ergebnis nicht meiner tatsächlichen Handelsweise entspricht.

    Im Anhang bzw. unten findest du die vollständige Beschreibung meiner Strategie – übersichtlich, regelbasiert und gut strukturiert.

    Ich würde mich wirklich sehr freuen, wenn du noch einmal ein wenig Zeit findest, um mir zu helfen. Ganz herzlichen Dank schon im Voraus für deine Mühe und deine großartige Unterstützung!

    Viele Grüße

    Hier die Strategieanpassung:

    Trading-Strategie: Brent Oil (UK Oil) im M5-Chart – ProRealTime Code-Basis
    1. Indikatoren
    • SMA 20 (Simple Moving Average 20)
    • SMA 50 (Simple Moving Average 50)
    • Bollinger Bänder
      • Periode: 12
      • Standardabweichung: 2
    1. Setup-Kriterien (Trendfilter)
    Täglich wird um 8:50 Uhr der Marktstatus überprüft, nach Abschluss der 8:50-Bar. Um 8:55:00 Uhr wird auf Basis dieser Bar eine Einstiegsorder gesetzt: Long-Setup:
    • Bedingung: SMA 20 > SMA 50 (Werte aus 8:50-Bar)
    • Einstiegsorder: wenn Long Bedingung erfüllt dann auf den Wert des oberen Bollinger Bands (Wert aus 8:50-Bar)
    Short-Setup:
    • Bedingung: SMA 20 < SMA 50 (Werte aus 8:50-Bar)
    • Einstiegsorder: wenn Short Bedingung auf den Wert des unteren Bollinger Bands (Wert aus 8:50-Bar)
    1. Entry, Stop-Loss und Take-Profit
    Orderzeitpunkt: Einstiegsorder wird um 8:55 Uhr automatisch gesetzt, basierend auf den Werten der abgeschlossenen 8:50-Bar. (Die Einstiegs-Order wird immer um 8:55 Uhr gesetzt, nachdem die Daten des 8:50-Bars vorliegen. Die Einstiegs-Order erfolgt über eine Market Order, wobei das System automatisch erkennen muss, ob eine Stop- oder Limit-Order erforderlich ist – je nachdem, ob der aktuelle Kurs bereits über oder unter dem Einstiegspunkt liegt.) Orderart:
    • Die Order erfolgt als Market Order mit automatischer Entscheidung, ob eine Stop- oder Limit-Order erforderlich ist:
      • Liegt der aktuelle Marktpreis unterhalb des Entry-Levels → Stop-Order
      • Liegt der aktuelle Marktpreis oberhalb des Entry-Levels → Limit-Order
    Gültigkeit:
    • Ordergültigkeit: bis 20:00 Uhr
    • Falls bis dahin nicht ausgelöst, wird die Order automatisch gelöscht
    Stop-Loss-Regel:
    • Long-Setup: SL = Werte des unteren Bollinger Band (aus 8:50-Bar)
    • Short-Setup: SL = Werte des oberen Bollinger Band (aus 8:50-Bar) + Spread
    • SL-Order wird zeitgleich mit Entry-Order um 8:55:00 Uhr gesetzt und gelöscht, wenn Entry nicht erfolgt (20:00 Uhr) oder TP erreicht wird
    Take-Profit-Regel (CRV 2:1):
    • TP = Entry ± 2 × Abstand Entry zu SL
    • Spread wird bei der Berechnung berücksichtigt
    • TP-Order wird ebenfalls zeitgleich mit Entry-Order gesetzt
    • Gültig bis:
      • 20:00 Uhr bei nicht ausgelöster Entry-Order (dann wird sie gelöscht)
      • oder bei Auslösung der SL-Order
    Take Profit Order wird zeitgleich mit der Einstiegsorder gesetzt und bei nicht Ausführung der Einstiegsorder auch um 20:00 Uhr oder bei Ausführung der Stop Loss Order gelöscht.   Der Spread wird bei den Kaufordern immer mitberücksichtigt bzw. hinzugerechnet.  
    1. Beispiel vom 04.04. – Short-Setup
    • SMA 20: 69,159
    • SMA 50: 69,216 → Short-Signal
    • Oberes BB: 69,430
    • Unteres BB: 68,852
    • Close der 8:50-Bar: 68,933
    • Spread: 0,034
    Berechnung:
    • Entry: 68,852
    • SL: 69,430 + 0,034 = 69,464
    • TP: 68,852 – (2 × 0,612) = 67,628 → Order wurde gesetzt und blieb aktiv bis zur Ausführung durch TP, SL oder Zeitgrenze (20:00 Uhr bzw. Exit um 21:40 Uhr)
    1. Zeitmanagement & Exit
    • Einstiegsorder: bleibt bis 20:00 Uhr aktiv
    Wird die Einstiegs Order ausgelöst, aber bis dahin nicht geschlossen durch SL oder TP, erfolgt ein automatischer Exit per Market Order um 21:40 Uhr
    1. Risikomanagement
    • Max. 1 Einstiegs-Order pro Tag also max ein Trade am Tag
    • Risikofixierung: exakt 100 € Risiko pro Trade
    • Lotgröße wird automatisch berechnet anhand der Entry–SL-Distanz
    • CRV: fix bei 2:1, d. h. 200 € Zielgewinn
    Hinweis für Programmierer: Alle Werte (SMA, Bollinger, Spread, Entry, SL, TP) basieren ausschließlich auf den Werten der 8:50-Bar. Es wird keine Anpassung durch spätere Kerzen vorgenommen. Spread ist dynamisch und muss bei Kauf-/Verkaufskursen berücksichtigt werden.
    #248410 quote
    robertogozzi
    Moderator
    Master
    Da ist er:
    ONCE EntryL = 0
    ONCE EntryS = 0
    ONCE Spread = 2
    Sma20   = average[20,0](close)
    Sma50   = average[50,0](close)
    UpperBB = BollingerUP[12](close)
    LowerBB = BollingerDOWN[12](close)
    IF OpenTime = 085000 THEN
       L1     = Sma20 > Sma50
       EntryL = UpperBB
       S1     = Sma20 < SmA50
       EntryS = LowerBB
    ENDIF
    IF Not OnMarket THEN
       SL = abs(UpperBB - LowerBB)
       TP = Spread + (SL * 2)
       // Long
       IF L1 AND EntryL THEN
          IF close > EntryL THEN
             BUY 1 Contract at EntryL LIMIT
          ELSIF close < EntryL THEN
             BUY 1 Contract at EntryL STOP
          ELSE
             BUY 1 Contract at Market
          ENDIF
       ENDIF
       // Short
       IF S1 AND EntryS THEN
          IF close < EntryS THEN
             SELLSHORT 1 Contract at EntryS LIMIT
          ELSIF close > EntryS THEN
             SELLSHORT 1 Contract at EntryS STOP
          ELSE
             SELLSHORT 1 Contract at Market
          ENDIF
       ENDIF
       SET STOP   pLOSS   SL
       SET TARGET pPROFIT TP
    ELSE
       IF LongOnMarket THEN
          EntryL = 0
       ENDIF
       IF LongOnMarket THEN
          EntryS = 0
       ENDIF
    ENDIF
    IF OpenTime >= 200000 THEN
       EntryL = 0
       EntryS = 0
    ENDIF
    Der Spread kann nicht bekannt sein, daher müssen Sie ihn zu Beginn selbst in der Variable SPREAD angeben.
    Iván González thanked this post
Viewing 5 posts - 1 through 5 (of 5 total)
  • You must be logged in to reply to this topic.

Fehlermeldung beim Code für Oil Strategie


ProOrder: Automatischer Handel & Backtesting

New Reply
Author
Summary

This topic contains 4 replies,
has 3 voices, and was last updated by robertogozzi
7 months, 3 weeks ago.

Topic Details
Forum: ProOrder: Automatischer Handel & Backtesting
Language: German
Started: 03/13/2025
Status: Active
Attachments: No files
Logo Logo
Loading...