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

Estrategia de negociación de línea de parada móvil adaptativa

El autor:¿ Qué pasa?, Fecha: 2024-02-21 16:07:20
Las etiquetas:

img

Resumen general

La idea central de esta estrategia es utilizar el promedio móvil T3 y el ATR para capturar los puntos de entrada y salida a lo largo de la tendencia. Pertenece a las estrategias de seguimiento de tendencia. Las señales de negociación se generan cuando el precio rompe la línea T3, y los niveles de stop loss y take profit se establecen utilizando el valor ATR en el punto de ruptura para lograr un stop loss automático y obtener ganancias.

Principio de la estrategia

La estrategia consiste en el indicador T3, el indicador ATR y el mecanismo de detención posterior del ATR.

El promedio móvil T3 es un promedio móvil suavizado que puede reducir el retraso de la curva y hacer que responda más rápido a los cambios de precios.

El indicador ATR se utiliza para calcular el grado de volatilidad del mercado y establecer los niveles de stop loss. Cuanto mayor sea el valor ATR, mayor será la volatilidad del mercado y se debe establecer una stop loss más amplia.

El mecanismo de stop trailing de ATR ajusta la posición de la línea de stop loss en función de los valores de ATR en tiempo real, de modo que la línea de stop loss pueda seguir el movimiento del precio y permanecer dentro de un rango razonable.

Utilizando el T3 para determinar la dirección, el ATR para calcular la volatilidad y el mecanismo de detención posterior del ATR, esta estrategia logra una captura de tendencias y un control de riesgos relativamente eficientes.

Ventajas

Las ventajas de esta estrategia incluyen:

  1. La aplicación de la línea T3 mejora la precisión de las tendencias de captura.

  2. El indicador ATR calcula dinámicamente la volatilidad del mercado, lo que hace que los niveles de stop loss y take profit sean más razonables.

  3. El mecanismo ATR trailing stop permite que la línea de stop loss siga el movimiento del precio en tiempo real para un control eficaz del riesgo.

  4. Integra indicadores y mecanismos de stop loss para lograr el seguimiento automatizado de tendencias.

  5. Puede conectarse a plataformas de negociación externas a través de webhook para la ejecución automática de órdenes.

Riesgos y soluciones

También hay algunos riesgos con esta estrategia:

  1. Los parámetros de ciclo diferentes pueden ser probados para encontrar los valores óptimos.

  2. El cálculo inexacto del valor ATR puede dar lugar a que la distancia de parada de pérdida sea demasiado grande o demasiado pequeña para controlar eficazmente el riesgo. El parámetro del ciclo ATR puede ajustarse combinado con las características de volatilidad del mercado.

  3. En fluctuaciones violentas, la línea de stop loss puede romperse, lo que resulta en pérdidas excesivas.

  4. El aumento de la distancia de detención del ATR puede ayudar.

Direcciones de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Optimizar el parámetro T3 para encontrar el ciclo de suavizado más adecuado.

  2. Probar diferentes parámetros del ciclo ATR para calcular el valor ATR que refleje mejor la volatilidad del mercado.

  3. Optimizar el rango flexible de la distancia de parada trasera del ATR para evitar paradas demasiado sensibles.

  4. Añadir filtros apropiados para evitar el comercio frecuente en los mercados de la sierra.

  5. Incorporar indicadores de tendencia para mejorar la precisión de la rentabilidad direccional.

  6. Utilice métodos de aprendizaje automático para optimizar automáticamente los parámetros.

Conclusión

Esta estrategia integra el uso de la línea T3 para determinar la dirección de la tendencia, el indicador ATR para calcular paradas / objetivos y el mecanismo ATR para ajustar la distancia de parada. Logra un seguimiento automatizado de la tendencia y un control eficiente del riesgo. Es una estrategia de seguimiento de tendencias confiable. En aplicaciones prácticas, aún se necesita prueba y optimización continua para encontrar las combinaciones de parámetros más adecuadas para las condiciones actuales del mercado, obteniendo así mejores resultados de estrategia.


/*backtest
start: 2024-01-21 00:00:00
end: 2024-02-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='UT Bot Alerts (QuantNomad) Strategy', overlay=true)
T3 = input(100)//600
// Input for Long Settings
// Input for Long Settings


xPrice3 = close
xe1 = ta.ema(xPrice3, T3)
xe2 = ta.ema(xe1, T3)
xe3 = ta.ema(xe2, T3)
xe4 = ta.ema(xe3, T3)
xe5 = ta.ema(xe4, T3)
xe6 = ta.ema(xe5, T3)

b3 = 0.7
c1 = -b3*b3*b3
c2 = 3*b3*b3+3*b3*b3*b3
c3 = -6*b3*b3-3*b3-3*b3*b3*b3
c4 = 1+3*b3+b3*b3*b3+3*b3*b3
nT3Average = c1 * xe6 + c2 * xe5 + c3 * xe4 + c4 * xe3

//plot(nT3Average, color=color.white, title="T3")

// Buy Signal - Price is below T3 Average
buySignal3 = xPrice3 < nT3Average
sellSignal3 = xPrice3 > nT3Average
// Inputs
a = input(1, title='Key Value. "This changes the sensitivity"')
c = input(50, title='ATR Period')
h = input(true, title='Signals from Heikin Ashi Candles')
riskRewardRatio = input(1, title='Risk Reward Ratio')

xATR = ta.atr(c)
nLoss = a * xATR

src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=barmerge.lookahead_off) : close

xATRTrailingStop = 0.0
iff_1 = src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss
iff_2 = src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), src + nLoss) : iff_1
xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), src - nLoss) : iff_2

pos = 0
iff_3 = src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0)
pos := src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0) ? 1 : iff_3

xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue

ema = ta.ema(src, 1)
above = ta.crossover(ema, xATRTrailingStop)
below = ta.crossunder(ema, xATRTrailingStop)

buy = src > xATRTrailingStop and above
sell = src < xATRTrailingStop and below

barbuy = src > xATRTrailingStop
barsell = src < xATRTrailingStop

plotshape(buy, title='Buy', text='Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny)
plotshape(sell, title='Sell', text='Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)

barcolor(barbuy ? color.new(color.green, 90) : na)
barcolor(barsell ? color.new(color.red, 90) : na)

var float entryPrice = na
var float takeProfitLong = na
var float stopLossLong = na
var float takeProfitShort = na
var float stopLossShort = na

if buy and buySignal3
    entryPrice := src
    takeProfitLong := entryPrice + nLoss * riskRewardRatio
    stopLossLong := entryPrice - nLoss
    takeProfitShort := na
    stopLossShort := na

if sell and sellSignal3
    entryPrice := src
    takeProfitShort := entryPrice - nLoss * riskRewardRatio
    stopLossShort := entryPrice + nLoss
    takeProfitLong := na
    stopLossLong := na

// Strategy order conditions
acct = "Sim101"
ticker = "ES 12-23"
qty = 1

OCOMarketLong = '{ "alert": "OCO Market Long", "account": "' + str.tostring(acct) + '", "ticker": "' + str.tostring(ticker) + '", "qty": "' + str.tostring(qty) + '", "take_profit_price": "' + str.tostring(takeProfitLong) + '", "stop_price": "' + str.tostring(stopLossLong) + '", "tif": "DAY" }'
OCOMarketShort = '{ "alert": "OCO Market Short", "account": "' + str.tostring(acct) + '", "ticker": "' + str.tostring(ticker) + '", "qty": "' + str.tostring(qty) + '", "take_profit_price": "' + str.tostring(takeProfitShort) + '", "stop_price": "' + str.tostring(stopLossShort) + '", "tif": "DAY" }'
CloseAll = '{ "alert": "Close All", "account": "' + str.tostring(acct) + '", "ticker": "' + str.tostring(ticker) + '" }'

strategy.entry("Long", strategy.long, when=buy and buySignal3, alert_message=OCOMarketLong)
strategy.entry("Short", strategy.short, when=sell and sellSignal3, alert_message=OCOMarketShort)

// Setting the take profit and stop loss for long trades
strategy.exit("Take Profit/Stop Loss", "Long", stop=stopLossLong, limit=takeProfitLong,alert_message=CloseAll)

// Setting the take profit and stop loss for short trades
strategy.exit("Take Profit/Stop Loss", "Short", stop=stopLossShort, limit=takeProfitShort,alert_message=CloseAll)

// Plot trade setup boxes
bgcolor(buy ? color.new(color.green, 90) : na, transp=0, offset=-1)
bgcolor(sell ? color.new(color.red, 90) : na, transp=0, offset=-1)

longCondition = buy and not na(entryPrice)
shortCondition = sell and not na(entryPrice)

// var line longTakeProfitLine = na
// var line longStopLossLine = na
// var line shortTakeProfitLine = na
// var line shortStopLossLine = na

// if longCondition
//     longTakeProfitLine := line.new(bar_index, takeProfitLong, bar_index + 1, takeProfitLong, color=color.green, width=2)
//     longStopLossLine := line.new(bar_index, stopLossLong, bar_index + 1, stopLossLong, color=color.red, width=2)
//     // label.new(bar_index + 1, takeProfitLong, str.tostring(takeProfitLong, "#.#####"), color=color.green, style=label.style_none, textcolor=color.green, size=size.tiny)
//     // label.new(bar_index + 1, stopLossLong, str.tostring(stopLossLong, "#.#####"), color=color.red, style=label.style_none, textcolor=color.red, size=size.tiny)

// if shortCondition
//     shortTakeProfitLine := line.new(bar_index, takeProfitShort, bar_index + 1, takeProfitShort, color=color.green, width=2)
//     shortStopLossLine := line.new(bar_index, stopLossShort, bar_index + 1, stopLossShort, color=color.red, width=2)
//     // label.new(bar_index + 1, takeProfitShort, str.tostring(takeProfitShort, "#.#####"), color=color.green, style=label.style_none, textcolor=color.green, size=size.tiny)
//     // label.new(bar_index + 1, stopLossShort, str.tostring(stopLossShort, "#.#####"), color=color.red, style=label.style_none, textcolor=color.red, size=size.tiny)

alertcondition(buy, 'UT Long', 'UT Long')
alertcondition(sell, 'UT Short', 'UT Short')


Más.