Estrategia de trading con promedio móvil de stop móvil adaptable


Fecha de creación: 2024-02-21 16:07:20 Última modificación: 2024-02-21 16:07:20
Copiar: 1 Número de Visitas: 687
1
Seguir
1617
Seguidores

Estrategia de trading con promedio móvil de stop móvil adaptable

Descripción general

La idea central de esta estrategia es utilizar la línea media T3 y el ATR para adaptarse a los paros móviles para capturar los puntos de entrada y salida de la tendencia, que pertenece a la estrategia de seguimiento de tendencias. Cuando el precio rompe la línea media T3, genera una señal de negociación y utiliza el valor de ATR para configurar el punto de parada y el punto de parada en el punto de ruptura, para lograr el parón automático de la pérdida.

Principio de estrategia

La estrategia consiste principalmente en el indicador de línea media T3, el indicador ATR y el mecanismo de stop loss móvil ATR.

La línea media T3 es un promedio móvil de suavidad que reduce el atraso de la curva y la hace reaccionar más rápidamente a los cambios de precio. Cuando el precio se rompe por debajo de la línea media, produce una señal de compra; cuando el precio se rompe por encima de la línea media, produce una señal de venta.

El indicador ATR se utiliza para calcular el grado de volatilidad del mercado y establecer el punto de parada. El valor más alto de ATR indica que la volatilidad del mercado es mayor, por lo que es necesario establecer un alto más amplio. El valor más bajo de ATR indica que la volatilidad del mercado es menor y se puede establecer un alto más estrecho.

El mecanismo de parada móvil de ATR es la posición de la línea de parada en tiempo real según el valor de ATR, para que la línea de parada pueda seguir el precio y mantenerse dentro de un rango razonable. De esta manera, se evita que la distancia de parada demasiado cercana sea sacudida y se evita que la distancia de parada demasiado amplia no pueda controlar el riesgo de manera efectiva.

Utilizando la combinación de T3 para determinar la dirección, ATR para calcular la volatilidad y ATR para detener el movimiento, la estrategia permite una captura de tendencias y un control de riesgo más eficientes.

Las ventajas

La estrategia tiene las siguientes ventajas:

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

  2. El indicador ATR calcula dinámicamente la volatilidad del mercado, los puntos de pérdida y los puntos de parada más razonables.

  3. ATR es un mecanismo móvil de suspensión de pérdidas que permite que la línea de suspensión siga el precio en tiempo real y controle el riesgo de manera efectiva.

  4. Integración de los indicadores de juicio y los mecanismos de detención de pérdidas para automatizar el seguimiento de tendencias de las operaciones.

  5. Se puede conectar a una plataforma de comercio externa a través de un webhook para automatizar los pedidos.

Riesgos y soluciones

La estrategia también tiene sus riesgos:

  1. Los parámetros de la línea media T3 están mal configurados y pueden perder oportunidades de tendencia más favorables. Se pueden probar los parámetros de diferentes períodos para encontrar el parámetro óptimo.

  2. El cálculo del ATR es inexacto, la distancia de parada es demasiado grande o demasiado pequeña para controlar el riesgo de manera efectiva. Se puede ajustar el parámetro del ciclo ATR en combinación con las características de la volatilidad del mercado.

  3. En el caso de una fuerte volatilidad, la línea de pérdidas puede romperse y causar pérdidas excesivas. Se puede establecer una línea de pérdidas total razonable para evitar pérdidas individuales excesivas.

  4. En el caso de una operación bidireccional repetida, es posible que el stop se active con frecuencia. La distancia de parada móvil de ATR puede ser liberada adecuadamente.

Dirección de optimización

La estrategia puede ser optimizada en los siguientes aspectos:

  1. Optimización de los parámetros de la línea media de T3 para encontrar el ciclo de suavizado más adecuado.

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

  3. Optimización del rango de elasticidad de la distancia de frenado móvil ATR para evitar que el frenado sea demasiado sensible.

  4. Añadir las condiciones de filtración adecuadas para evitar el comercio frecuente de mercados de oscilación bidireccional.

  5. La combinación de indicadores de tendencia para juzgar mejorará la precisión de la dirección de ganancias.

  6. Optimización automática de los parámetros mediante métodos de aprendizaje automático.

Resumir

Esta estrategia integra el uso de la línea media T3 para determinar la dirección de la tendencia, el indicador ATR para calcular el stop loss y el mecanismo de stop loss móvil ATR para ajustar el stop loss, para lograr el seguimiento automático de la tendencia y el control de riesgo eficiente, es una estrategia de seguimiento de tendencia confiable. En la aplicación práctica, aún se necesita prueba y optimización continua para encontrar la combinación de parámetros más adecuada para el entorno del mercado actual, para obtener un mejor efecto de la estrategia.

Código Fuente de la 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')