En la carga de los recursos... Cargando...

Estrategia de negociación de ruptura contraria

El autor:¿ Qué pasa?, Fecha: 2023-10-25 12:09:40
Las etiquetas:

img

Resumen general

La estrategia de negociación de ruptura contraria es una estrategia que toma señales contrarias basadas en aumentos o caídas de precios consecutivos para ir largo cuando se cumple la condición corta o ir corto cuando se cumple la condición larga.

Estrategia lógica

La estrategia se ejecuta principalmente a través de las siguientes partes:

  1. Establecer los períodos consecutivos de subidas y bajadas de precios, es decir, consecutivos BarsUp y BarsDown.

  2. Calcular el aumento y la caída del precio actual en relación con el precio del período anterior. Calcular la duración de los períodos ascendentes y descendentes consecutivos actuales basados en el aumento y la caída.

  3. Establezca el intervalo de tiempo de backtesting para limitar la estrategia a operar solo dentro del tiempo de backtesting a través de time_cond.

  4. Configure el horario diario de negociación para limitar las señales de negociación a ser emitidas solo dentro del marco de tiempo establecido a través de timetobuy.

  5. Cuando el ciclo ascendente consecutivo alcance la longitud establecida, emita una señal larga a través de strategy.long. Cuando el ciclo descendente consecutivo alcance la longitud establecida, emite una señal corta a través de strategy.short.

  6. Los precios de stop loss y take profit se pueden establecer. Establecer paradas a corto plazo para posiciones largas y paradas a largo plazo para posiciones cortas. Establecer beneficios a largo plazo para posiciones largas y beneficios a corto plazo para posiciones cortas.

  7. Los mensajes de señal comercial se pueden configurar durante el envío.

  8. Emitir señales largas o cortas cuando se cumplan las condiciones basadas en los parámetros y niveles de precios anteriores.

Análisis de ventajas

Esta estrategia de ruptura contraria tiene las siguientes ventajas:

  1. Captura los puntos de inversión de precios. La operación contraria puede obtener buenas ganancias. Las operaciones en la dirección opuesta cuando el precio forma una tendencia pueden beneficiarse de las inversiones de precios.

  2. Los parámetros como los períodos consecutivos se pueden ajustar, los niveles de stop loss y take profit se pueden establecer, el marco de tiempo de negociación se puede limitar. Los parámetros se pueden optimizar según las condiciones del mercado.

  3. El establecimiento de stop loss y take profit con anticipación ayuda a controlar los riesgos comerciales después de ir largo o corto.

  4. Los mensajes comerciales facilitan el comercio automatizado.

  5. El intervalo de tiempo de backtesting facilita la prueba de estrategias. La adición de configuraciones de intervalo de tiempo de backtesting permite una fácil observación del rendimiento de la estrategia en diferentes condiciones de mercado.

Análisis de riesgos

La estrategia también tiene algunos riesgos:

  1. Evite eventos de noticias importantes. Las tendencias de los precios son impredecibles durante los anuncios importantes, causando simultáneamente señales y pérdidas largas y cortas.

  2. El comercio contrario debe utilizarse con precaución cuando las tendencias son ambiguas.

  3. El riesgo de sobreajuste de los datos de backtesting. La optimización debe evitar la dependencia excesiva de los datos de backtesting, que no representan tendencias futuras. Los parámetros deben ajustarse adecuadamente durante la negociación en vivo.

  4. La frecuencia de negociación alta puede suponer riesgos de sobrecomercialización.

  5. Las estrategias de stop loss y take profit se pueden optimizar para reducir los riesgos.

Direcciones de optimización

La estrategia se puede optimizar aún más en los siguientes aspectos:

  1. Añadir la detección de tendencias para evitar reversiones aleatorias en mercados que no tienen tendencias, utilizando la volatilidad, canales, etc. para medir tendencias y capturar reversiones.

  2. Optimizar las paradas y tomas para ajustarse en función de la volatilidad del mercado, utilizando métodos basados en porcentajes, ATR u otros métodos adaptativos.

  3. Añadir análisis de volumen para evitar señales falsas de los patrones de precios solamente.

  4. Diversificación de la cartera en varios productos para reducir el riesgo de un solo activo.

  5. Optimización de parámetros y aprendizaje automático: recopila más datos históricos y utiliza el aprendizaje automático para optimizar automáticamente los parámetros para estrategias más robustas.

Conclusión

La estrategia de ruptura contraria proporciona una buena señal de negociación al capturar las reversiones de precios a través de operaciones contrarias. Las ventajas incluyen configuración flexible, control de riesgos y idoneidad para el comercio automatizado.


/*backtest
start: 2023-10-17 00:00:00
end: 2023-10-24 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

// Strategy
strategy("Up/Down Strategy - Contrarian", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash)

consecutiveBarsUp = input(1, title='Consecutive Bars Up')
consecutiveBarsDown = input(1, title='Consecutive Bars Down')

price = close

ups = 0.0
ups := price > price[1] ? nz(ups[1]) + 1 : 0

dns = 0.0
dns := price < price[1] ? nz(dns[1]) + 1 : 0

// Strategy Backtesting
startDate  = input(timestamp("2021-01-01T00:00:00"), type = input.time, title='Backtesting Start Date')
finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time, title='Backtesting End Date')

time_cond  = true

//Time Restriction Settings
startendtime = input("", title='Time Frame To Enter Trades')
enableclose = input(false, title='Enable Close Trade At End Of Time Frame')
timetobuy = true
timetoclose = true

// Stop Loss & Take Profit Tick Based
enablesltp = input(false, title='Enable Take Profit & Stop Loss')
stopTick = input(5.0, title='Stop Loss Ticks', type=input.float) / 100
takeTick = input(10.0, title='Take Profit Ticks', type=input.float) / 100

longStop = strategy.position_avg_price - stopTick
shortStop = strategy.position_avg_price + stopTick
shortTake = strategy.position_avg_price - takeTick
longTake = strategy.position_avg_price + takeTick

plot(strategy.position_size > 0 and enablesltp ? longStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Fixed SL")
plot(strategy.position_size < 0 and enablesltp ? shortStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Short Fixed SL")
plot(strategy.position_size > 0 and enablesltp ? longTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Long Take Profit")
plot(strategy.position_size < 0 and enablesltp ? shortTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Short Take Profit")

// Alert messages
message_enterlong  = input("", title="Long Entry message")
message_entershort = input("", title="Short Entry message")
message_closelong = input("", title="Close Long message")
message_closeshort = input("", title="Close Short message")

// Strategy Execution
if (dns >= consecutiveBarsDown) and time_cond and timetobuy
    strategy.entry("Long", strategy.long, stop = high + syminfo.mintick, alert_message = message_enterlong)
    
if (ups >= consecutiveBarsUp) and time_cond and timetobuy
    strategy.entry("Short", strategy.short, stop = low + syminfo.mintick, alert_message = message_entershort)
    
if strategy.position_size < 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closelong)
if strategy.position_size > 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closeshort)
    
if strategy.position_size < 0 and enablesltp and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size > 0 and enablesltp and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)






Más.