La estrategia R-Breaker fue desarrollada por Richard Saidenberg y publicada en 1994. Fue seleccionada como una de las diez estrategias comerciales más rentables por la revista
En pocas palabras, la estrategia R-Breaker es una estrategia de soporte y resistencia de precios. Cálcula siete precios basados en los precios más altos, más bajos y de cierre de ayer: un precio central (pivot) y tres niveles de soporte (s1 s2, s3), tres niveles de resistencia (r1, r2, r3). Luego, de acuerdo con la relación posicional entre el precio actual y estos niveles de soporte y resistencia, para formar las condiciones desencadenantes para comprar y vender, y a través de un cierto ajuste de algoritmo, ajusta la distancia entre estos siete precios, cambia aún más el valor desencadenante de la transacción.
Precio de ruptura de compra (nivel de resistencia r3) = precio más alto de ayer + 2 * (precio central - precio más bajo de ayer) / 2
Precio de venta de observación (nivel de resistencia r2) = precio central + (precio más alto de ayer - precio más bajo de ayer)
Precio de venta inverso (nivel de resistencia r1) = 2 * Precio central - precio más bajo de ayer
Precio central (pivote) = (precio más alto de ayer + precio de cierre de ayer + precio más bajo de ayer) / 3
Precio de compra inverso (nivel de soporte s1) = 2 * Precio central - precio más alto de ayer
Precio de compra observado (nivel de soporte s2) = precio central - (precio más alto de ayer - precio más bajo de ayer)
Precio de venta de ruptura (nivel de soporte s3) = precio más bajo de ayer - 2 * (precio más alto de ayer - precio central)
De esto podemos ver que la estrategia R-Breaker dibuja una línea de precios similar a una cuadrícula basada en el precio de ayer, y actualiza estas líneas de precios una vez al día. En el análisis técnico, los niveles de soporte y resistencia, y el papel de los dos pueden convertirse entre sí. Cuando el precio rompe con éxito el nivel de resistencia, el nivel de resistencia se convierte en el nivel de soporte; cuando el precio rompe con éxito el nivel de soporte, el nivel de soporte se convierte en el nivel de resistencia.
En el comercio real, estos niveles de soporte y resistencia indican al operador la dirección de las posiciones de apertura y cierre y los puntos de negociación precisos. Los operadores con condiciones específicas de apertura y cierre pueden personalizarse de forma flexible de acuerdo con los precios intradiarios, los precios centrales, los niveles de resistencia y los niveles de soporte, y también pueden gestionar posiciones basadas en estas líneas de precios de la red.
A continuación, veamos cómo la estrategia R-Breaker utiliza estos niveles de soporte y resistencia. Su lógica no es complicada en absoluto. Si no hay posición de retención, ingrese al modo de tendencia. Cuando el precio sea mayor que el precio de compra de ruptura, abra una posición larga; cuando el precio sea menor que el precio de venta de ruptura, abra una posición corta.
Posición larga abierta: si no existe posición de tenencia y el precio es mayor que el precio de compra de ruptura
Posición corta abierta: si no hay posición de tenencia y el precio es inferior al precio de venta de ruptura
cierre de posición larga: si mantiene una posición larga y el precio más alto del día es mayor que el precio de venta observado y el precio es menor que el precio de venta inverso
posición corta cerrada: si mantiene una posición corta, y el precio más bajo del día es menor que el precio de compra observado y el precio es mayor que el precio de compra inverso
posición larga abierta: si mantiene una posición corta, y el precio más bajo del día es menor que el precio de compra observado y el precio es mayor que el precio de compra inverso
Posición corta abierta: si mantiene una posición larga, y el precio más alto del día es mayor que el precio de venta observado y el precio es menor que el precio de venta inverso
cierre de posición larga: si se mantienen posiciones largas y el precio es inferior al precio de venta de ruptura
cierre de posición corta: si se mantiene una posición corta y el precio es mayor que el precio de compra de ruptura
Si hay posiciones de mantenimiento, entra en el modo de reversión. Cuando hay posiciones largas y el precio más alto del día es mayor que el precio de venta de observación, y el precio cae por debajo del precio de venta inverso, la posición larga se cerrará y la posición corta se abrirá sincrónicamente. Cuando se mantienen posiciones cortas y el precio más bajo del día es menor que el precio de compra de observación, y el precio rompe el precio de compra inverso, la posición corta se cerrará y la posición larga estará abierta.
'''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 estrategia completa se ha publicado en la plataforma FMZ (FMZ.COM), haga clic en el siguiente enlace para copiarlo directamente, y puede hacer pruebas de retroceso sin configuración:https://www.fmz.com/strategy/187009
La razón por la cual la estrategia R-Breaker es popular es que no es puramente una estrategia de seguimiento de tendencias, sino una estrategia compuesta para ganar tanto el rendimiento alfa de tendencia como el alfa inverso. La estrategia en este artículo es solo para demostración, sin optimizar los parámetros y variedades apropiados. Además, la estrategia completa también debe incluir la función de stop loss, y los amigos interesados pueden mejorarla.