Estrategia R-Breaker de futuros de materias primas

El autor:La bondad, Creado: 2020-06-02 08:57:10, Actualizado: 2023-11-02 19:52:44

img

Resumen de las actividades

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 Futures Truth en los Estados Unidos durante 15 años consecutivos. En comparación con otras estrategias, R-Breaker es una estrategia comercial que combina tendencia e inversión de tendencia.

Resistencia y apoyo

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.

La lógica de la estrategia

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.

  • Modo de tendencia

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

  • Modo de marcha atrás

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.

Escribir estrategias

'''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

Copiar la estrategia completa

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

Resumen de las actividades

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.


Relacionados

Más.