La stratégie R-Breaker a été développée par Richard Saidenberg et publiée en 1994. Elle a été sélectionnée comme l'une des dix stratégies de trading les plus rentables par le magazine
En termes simples, la stratégie R-Breaker est une stratégie de support et de résistance des prix. Elle calcule sept prix en fonction des prix les plus élevés, les plus bas et les prix de clôture d'hier: un prix central (pivot) et trois niveaux de support (s1 s2, s3), trois niveaux de résistance (r1, r2, r3).
Prix d' achat de rupture (niveau de résistance r3) = prix le plus élevé d' hier + 2 * (prix central - prix le plus bas d' hier) / 2
Le prix de vente observé (niveau de résistance r2) = prix central + (prix le plus élevé d'hier - prix le plus bas d'hier)
Prix de vente inverse (niveau de résistance r1) = 2 * Prix central - prix le plus bas d'hier
Prix central (pivot) = (coût le plus élevé d'hier + prix de clôture d'hier + prix le plus bas d'hier) / 3
Prix d'achat inverse (niveau de soutien s1) = 2 * Prix central - prix le plus élevé d'hier
Prix d'achat observé (niveau de soutien s2) = prix central - (prix le plus élevé d'hier - prix le plus bas d'hier)
Prix de vente de rupture (niveau de support s3) = prix le plus bas d'hier - 2 * (prix le plus élevé d'hier - prix central)
Nous pouvons voir que la stratégie R-Breaker dessine une ligne de prix en forme de grille basée sur le prix d'hier, et met à jour ces lignes de prix une fois par jour. Dans l'analyse technique, les niveaux de support et de résistance, et le rôle des deux peuvent être convertis l'un dans l'autre. Lorsque le prix brise avec succès le niveau de résistance, le niveau de résistance devient le niveau de support; lorsque le prix brise avec succès le niveau de support, le niveau de support devient le niveau de résistance.
Dans le commerce réel, ces niveaux de support et de résistance indiquent au trader la direction des positions d'ouverture et de fermeture et les points de négociation précis. Les traders disposant de conditions d'ouverture et de fermeture spécifiques peuvent adapter de manière flexible en fonction des prix intraday, des prix centraux, des niveaux de résistance et des niveaux de support, et peuvent également gérer des positions basées sur ces lignes de prix de la grille.
Ensuite, voyons comment la stratégie R-Breaker utilise ces niveaux de support et de résistance. Sa logique n'est pas du tout compliquée. S'il n'y a pas de position de détention, entrez en mode tendance. Lorsque le prix est supérieur au prix d'achat de rupture, ouvrez une position longue; lorsque le prix est inférieur au prix de vente de rupture, ouvrez une position courte.
position longue ouverte: s'il n'y a pas de position de détention et que le prix est supérieur au prix d'achat de rupture
position courte ouverte: si aucune position de détention n'existe et que le prix est inférieur au prix de vente de rupture
position longue fermée: si vous détenez une position longue et que le prix le plus élevé de la journée est supérieur au prix de vente observé et que le prix est inférieur au prix de vente inverse
position courte fermée: si vous détenez une position courte et que le prix le plus bas de la journée est inférieur au prix d'achat observé et que le prix est supérieur au prix d'achat inverse
position longue ouverte: si vous détenez une position courte et que le prix le plus bas de la journée est inférieur au prix d'achat observé et que le prix est supérieur au prix d'achat inverse
position ouverte courte: si vous détenez une position longue et que le prix le plus élevé de la journée est supérieur au prix de vente observé et que le prix est inférieur au prix de vente inverse
position longue fermée: si des positions longues sont détenues et que le prix est inférieur au prix de vente de rupture
position courte fermée: si la position courte est détenue et que le prix est supérieur au prix d'achat de rupture
Lorsqu'il y a des positions de détention, il entre en mode inversion. Lorsqu'il y a des positions de détention longues, et que le prix le plus élevé de la journée est supérieur au prix de vente observé, et que le prix tombe en dessous du prix de vente inverse, la position longue sera fermée et la position courte sera ouverte de manière synchrone. Lorsqu'il y a des positions courtes, et que le prix le plus bas de la journée est inférieur au prix d'achat observé, et que le prix traverse le prix d'achat inverse, la position courte sera fermée et la position longue sera ouverte.
'''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
La stratégie complète a été publiée sur la plateforme FMZ (FMZ.COM), cliquez sur le lien ci-dessous pour le copier directement, et vous pouvez effectuer un backtest sans configuration:https://www.fmz.com/strategy/187009
La raison pour laquelle la stratégie R-Breaker est populaire est qu'il ne s'agit pas purement d'une stratégie de suivi de tendance, mais d'une stratégie composée pour gagner à la fois un revenu alpha de tendance et un revenu alpha inverse.