Die R-Breaker-Strategie wurde von Richard Saidenberg entwickelt und 1994 veröffentlicht. Sie wurde von der Zeitschrift
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
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.
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.
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
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.
'''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
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
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.