Strategie für Rohstoff-Futures

Schriftsteller:Gutes, Erstellt: 2020-06-02 08:57:10, aktualisiert: 2023-11-02 19:52:44

img

Zusammenfassung

Die R-Breaker-Strategie wurde von Richard Saidenberg entwickelt und 1994 veröffentlicht. Sie wurde von der Zeitschrift Futures Truth in den Vereinigten Staaten 15 Jahre in Folge als eine der zehn profitabelsten Handelsstrategien ausgewählt. Im Vergleich zu anderen Strategien ist R-Breaker eine Handelsstrategie, die Trend und Trendumkehr kombiniert.

Widerstand und Unterstützung

Einfach ausgedrückt, ist die R-Breaker-Strategie eine Preisunterstützungs- und Widerstandsstrategie. Sie berechnet sieben Preise basierend auf den höchsten, niedrigsten und Schlusskurs von gestern: einen zentralen Preis (Pivot) und drei Unterstützungsniveaus (s1 s2, s3), drei Widerstandsniveaus (r1, r2, r3).

  • Durchbruch des Kaufpreises (Widerstandsniveau r3) = höchster Preis von gestern + 2 * (Mittepreis - niedrigster Preis von gestern) / 2

  • Beobachtungsverkaufspreis (Widerstandsniveau r2) = Mittelpreis + (Gesterns höchster Preis - Gesterns niedrigster Preis)

  • Umgekehrter Verkaufspreis (Widerstandsstufe r1) = 2 * Mittelpreis - gestern niedrigster Preis

  • Zentralpreis (Pivot) = (Höchster Preis von gestern + Schlusskurs von gestern + Tiefster Preis von gestern) / 3

  • Umgekehrter Kaufpreis (Unterstützungsniveau s1) = 2 * Zentralpreis - höchster Preis von gestern

  • Beobachtungskaufpreis (Unterstützungsstufe s2) = Zentralpreis - (Höchster Preis von gestern - Tiefster Preis von gestern)

  • Durchbruch des Verkaufspreises (Unterstützungsniveau s3) = Gesterns niedrigster Preis - 2 * (Gesterns höchster Preis - Mittelpreis)

Aus diesem können wir sehen, dass die R-Breaker-Strategie eine gitterartige Preislinie basierend auf dem Preis von gestern zeichnet und diese Preislinien einmal täglich aktualisiert. In der technischen Analyse können die Unterstützungs- und Widerstandsniveaus und die Rolle der beiden miteinander umgewandelt werden. Wenn der Preis erfolgreich das Widerstandsniveau durchbricht, wird das Widerstandsniveau zum Unterstützungsniveau; wenn der Preis erfolgreich das Unterstützungsniveau durchbricht, wird das Unterstützungsniveau zum Widerstandsniveau.

Im tatsächlichen Handel geben diese Unterstützungs- und Widerstandsniveaus dem Händler die Richtung der Eröffnungs- und Schließpositionen sowie die genauen Handelspunkte an. Händler mit spezifischen Eröffnungs- und Schließbedingungen können flexibel nach Intraday-Preisen, Zentralpreisen, Widerstandsniveaus und Unterstützungsniveaus anpassen und auch Positionen auf der Grundlage dieser Gitterpreislinien verwalten.

Strategie Logik

Als nächstes sehen wir, wie die R-Breaker-Strategie diese Unterstützungs- und Widerstandsniveaus nutzt. Ihre Logik ist überhaupt nicht kompliziert. Wenn es keine Holding-Position gibt, treten Sie in den Trendmodus ein. Wenn der Preis größer ist als der Durchbruchskurs, öffnen Sie eine Long-Position; wenn der Preis kleiner ist als der Durchbruchskurs, öffnen Sie eine Short-Position.

  • Trendmodus

offene Long-Position: wenn keine Holding-Position besteht und der Preis höher ist als der Durchbruchskurs

offene Leerposition: wenn keine Halteposition besteht und der Preis unter dem Durchbruchspreis liegt

Abschluss einer Long-Position: wenn Sie eine Long-Position halten und der höchste Preis des Tages größer ist als der beobachtete Verkaufspreis und der Preis geringer ist als der umgekehrte Verkaufspreis

close short position: wenn Sie eine Short-Position halten und der niedrigste Preis des Tages kleiner als der beobachtete Kaufpreis ist und der Preis größer als der umgekehrte Kaufpreis ist

  • Rückwärtsmodus

offene Long-Position: wenn Sie eine Short-Position halten und der niedrigste Preis des Tages kleiner als der beobachtete Kaufpreis ist und der Preis größer als der umgekehrte Kaufpreis ist

offene Shortposition: wenn Sie eine Longposition halten und der höchste Preis des Tages größer ist als der beobachtete Verkaufspreis und der Preis kleiner als der umgekehrte Verkaufspreis

Abschluss einer Long-Position: wenn Long-Positionen gehalten werden und der Preis unter dem Durchbruchspreis liegt

close short position: wenn eine Short-Position gehalten wird und der Preis höher ist als der Durchbruch-Kaufpreis

Wenn es Holding-Positionen gibt, tritt es in den Umkehrmodus ein. Wenn es Long-Positionen gibt und der höchste Preis am Tag größer ist als der beobachtete Verkaufspreis und der Preis unter den umgekehrten Verkaufspreis fällt, wird die Long-Position geschlossen und die Short-Position synchron geöffnet. Wenn Short-Positionen gehalten werden und der niedrigste Preis des Tages kleiner ist als der beobachtete Kaufpreis und der Preis den umgekehrten Kaufpreis durchbricht, wird die Short-Position geschlossen und die Long-Position geöffnet.

Strategie schreiben

'''backtest
start: 2019-01-01 00:00:00
end: 2020-01-01 00:00:00
period: 5m
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
'''

# Strategy main function
def onTick():
    # retrieve data
    exchange.SetContractType(contract_type)   # Subscribe to futures products
    bars_arr = exchange.GetRecords(PERIOD_D1)  # Get daily K line array
    if len(bars_arr) < 2:  # If the number of K lines is less than 2
        return
    yesterday_open = bars_arr[-2]['Open']     # Yesterday's opening price
    yesterday_high = bars_arr[-2]['High']     # Yesterday's highest price
    yesterday_low = bars_arr[-2]['Low']       # Yesterday's lowest price
    yesterday_close = bars_arr[-2]['Close']   # Yesterday's closing price

    # Calculation
    pivot = (yesterday_high + yesterday_close + yesterday_low) / 3 # Pivot point
    r1 = 2 * pivot - yesterday_low # Resistance level 1
    r2 = pivot + (yesterday_high - yesterday_low) # Resistance level 2
    r3 = yesterday_high + 2 * (pivot - yesterday_low) # Resistance level 3
    s1 = 2 * pivot - yesterday_high  # Support level 1
    s2 = pivot - (yesterday_high - yesterday_low)  # Support level 2
    s3 = yesterday_low - 2 * (yesterday_high - pivot)  # Support level 3

    today_high = bars_arr[-1]['High'] # Today's highest price
    today_low = bars_arr[-1]['Low'] # Today's lowest price
    current_price = _C(exchange.GetTicker).Last # Current price

    # Get positions
    position_arr = _C(exchange.GetPosition)  # Get array of positions
    if len(position_arr) > 0:  # If the position array length is greater than 0
        for i in position_arr:
            if i['ContractType'] == contract_type:  # If the position variety equals the subscription variety
                if i['Type'] % 2 == 0:  # If it is long position
                    position = i['Amount']  # The number of assigned positions is positive
                else:
                    position = -i['Amount']  # The number of assigned positions is negative
                profit = i['Profit']  # Get position profit and loss
    else:
        position = 0  # The number of assigned positions is 0
        profit = 0  # The value of the assigned position is 0
        
    if position == 0:  # If there is no position
        if current_price > r3:  # If the current price is greater than Resistance level 3
            exchange.SetDirection("buy")  # Set transaction direction and type
            exchange.Buy(current_price + 1, 1)  # open long position
        if current_price < s3:  # If the current price is less than Support level 3
            exchange.SetDirection("sell")  # Set transaction direction and type
            exchange.Sell(current_price - 1, 1)  # open short position
        
    if position > 0:  # if holding long position
        if today_high > r2 and current_price < r1 or current_price < s3:  # If today's highest price is greater than Resistance level 2, and the current price is less than Resistance level 1
            exchange.SetDirection("closebuy")  # Set transaction direction and type
            exchange.Sell(current_price - 1, 1)  # close long position
            exchange.SetDirection("sell")  # Set transaction direction and type
            exchange.Sell(current_price - 1, 1)  # open short position

    if position < 0:  # if holding short position
        if today_low < s2 and current_price > s1 or current_price > r3:  # If today's lowest price is less than Support level 2, and the current price is greater than Support level 1
            exchange.SetDirection("closesell")  # Set transaction direction and type
            exchange.Buy(current_price + 1, 1)  # close short position
            exchange.SetDirection("buy")  # Set transaction direction and type
            exchange.Buy(current_price + 1, 1)  # open long position

            
# Program main function
def main():
    while True:     # loop
        onTick()    # Execution strategy main function
        Sleep(1000) # Sleep for 1 second

Kopieren Sie die komplette Strategie

Die vollständige Strategie wurde auf der FMZ-Plattform veröffentlicht (FMZ.COM), klicken Sie auf den folgenden Link, um ihn direkt zu kopieren, und Sie können ohne Konfiguration backtest:https://www.fmz.com/strategy/187009

Zusammenfassung

Der Grund, warum die R-Breaker-Strategie beliebt ist, ist, dass es sich nicht nur um eine Trend-Tracking-Strategie handelt, sondern um eine zusammengesetzte Strategie, um sowohl Trend-Alpha- als auch umgekehrte Alpha-Einnahmen zu erzielen. Die Strategie in diesem Artikel ist nur zur Demonstration, ohne die entsprechenden Parameter und Sorten zu optimieren. Darüber hinaus muss die komplette Strategie auch die Stop-Loss-Funktion enthalten, und interessierte Freunde können sie verbessern.


Verwandt

Mehr