Estrategia de seguimiento de tendencias basada en un modelo multifactorial con pérdida de seguimiento adaptativa

El autor:¿ Qué pasa?, Fecha: 2023-12-19 11:04:27
Las etiquetas:

img

Resumen general

Esta estrategia es una estrategia de seguimiento de tendencias impulsada por un modelo multifactorial con un stop loss trasero adaptativo. Incorpora múltiples indicadores como RSI, MACD, Estocásticos para construir un modelo multifactorial para determinar la dirección de la tendencia. Mientras tanto, cuenta con un mecanismo de stop loss trasero adaptativo que ajusta dinámicamente el precio del stop loss basado en ATR para realizar el control de riesgos.

Principios

Esta estrategia aprovecha múltiples indicadores para construir un modelo para juzgar la tendencia. En primer lugar, combina el RSI y el MACD para determinar la dirección de la tendencia; luego utiliza el Estocástico para filtrar señales excesivamente sobrecompradas o sobrevendidas. Después de ingresar órdenes, utiliza ATR para calcular el parámetro de riesgo e implementar el stoploss adaptativo.

Específicamente, genera una señal de compra cuando el RSI está por encima de 52 y ocurre una cruz de oro del MACD; genera una señal de venta cuando el RSI está por debajo de 48 y ocurre una cruz muerta del MACD. Para filtrar señales falsas, también detecta si el Estocástico está sobrecomprado o sobrevendido.

Ventajas

La mayor ventaja de esta estrategia radica en su fuerte capacidad de control de riesgos. Al juzgar la dirección de la tendencia con un modelo multifactorial, puede filtrar algo de ruido y mejorar la calidad de la señal. Mientras tanto, el mecanismo de stop loss adaptativo puede ajustar el rango de stop loss basado en la volatilidad del mercado para controlar eficazmente la pérdida única.

Además, los parámetros de esta estrategia se establecen razonablemente con buenos resultados de backtesting.

Los riesgos

El principal riesgo de esta estrategia es la calidad de la construcción del modelo multifactor. Si el modelo no logra determinar efectivamente la tendencia, generaría señales falsas masivas. Además, las estrategias de stop loss tienen inherentemente el riesgo de ser cazadas.

Para mitigar estos riesgos, se pueden hacer mejoras desde aspectos como ajustar el peso del modelo, optimizar la configuración de parámetros, combinar con otras estrategias de stop loss.

Direcciones de optimización

Esta estrategia se puede optimizar a partir de los siguientes aspectos:

  1. Ajustar los pesos de los indicadores en el modelo multifactorial para encontrar la combinación óptima

  2. Prueba más indicadores como el CCI, la volatilidad, etc. para enriquecer el modelo multifactorial

  3. Optimizar la configuración de parámetros para adaptarse a más productos y ciclos

  4. Pruebe diferentes estrategias de stoploss para encontrar la combinación óptima

  5. Añadir módulos de capacitación de modelos y evaluación de estrategias para permitir el aprendizaje automático

Resumen de las actividades

Esta estrategia integra un modelo multifactorial y un mecanismo de stop loss adaptativo para lograr una combinación orgánica de juicio de tendencia y control de riesgos. Tiene buenos resultados de backtesting y escalabilidad. Con optimización continua, puede convertirse en una estrategia cuantitativa que vale la pena para la tenencia a largo plazo.


/*backtest
start: 2022-12-12 00:00:00
end: 2023-12-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title="TradersAI_UTBot", overlay = true)
// CREDITS to @HPotter for the orginal code. 
// CREDITS to @Yo_adriiiiaan for recently publishing the UT Bot study based on the original code - 
// I just added some simple code to turn it into a strategy so that you all can backtest it to see the results for yourself! 
// Use this strategy on your favorite instrumnet and timeframe, with your favorite settings
// While @Yo_adriiiiaan mentions it works best on a 4-hour timeframe or above, 
// I am  happy to share here this working on a 15-minute chart on e-mini S&P 500 Index (using the KeyValue setting at 10)
// I am sure different people would discover different settings that work best for their preferred instrumnet/timeframe etc. 
// Play with it and enjoy! And, don't forget to share any positive results you might get! Good luck with your trading!

SOURCE = input(hlc3)
RSILENGTH = input(14, title = "RSI LENGTH")
RSICENTERLINE = input(52, title = "RSI CENTER LINE")
MACDFASTLENGTH = input(7, title = "MACD FAST LENGTH")
MACDSLOWLENGTH = input(12, title = "MACD SLOW LENGTH")
MACDSIGNALSMOOTHING = input(12, title = "MACD SIGNAL SMOOTHING")
a = input(10, title = "Key Vaule. 'This changes the sensitivity'") 
SmoothK = input(3)
SmoothD = input(3)
LengthRSI = input(14)
LengthStoch = input(14)
RSISource = input(close) 
c = input(10, title="ATR Period")
xATR = atr(c)
nLoss = a * xATR
xATRTrailingStop = iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss),
     iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss), 
     iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))
pos =	iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1,
     iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
color = pos == -1 ? red: pos == 1 ? green : blue 
ema= ema(close,1)
above = crossover(ema,xATRTrailingStop )
below = crossover(xATRTrailingStop,ema)
buy = close > xATRTrailingStop and above 
sell = close < xATRTrailingStop and below
barbuy = close > xATRTrailingStop 
barsell = close < xATRTrailingStop 
plotshape(buy, title = "Buy", text = 'Buy', style = shape.labelup, location = location.belowbar, color= green,textcolor = white, transp = 0, size = size.tiny)
plotshape(sell, title = "Sell", text = 'Sell', style = shape.labeldown, location = location.abovebar, color= red,textcolor = white, transp = 0, size = size.tiny)
barcolor(barbuy? green:na)
barcolor(barsell? red:na)
alertcondition(buy, title='Buy', message='Buy')
alertcondition(sell, title='Sell', message='Sell')

if(buy)
    strategy.entry("UTBotBuy",strategy.long)
if(sell)
    strategy.entry("UTBotSell",strategy.short)

Más.