Tendencia cuantitativa siguiendo la estrategia

El autor:¿ Qué pasa?, Fecha: 2024-01-04 15:25:42
Las etiquetas:

img

Resumen general

La estrategia de seguimiento de tendencias es una estrategia de seguimiento de tendencias basada en líneas EMA y ATR stop loss.

Principios

La estrategia consta de las siguientes partes principales:

  1. Líneas EMA para determinar la tendencia primaria

    Utilice líneas de 13 días, 50 días y 100 días para formar un sesgo alcista / bajista y juzgar la dirección de la tendencia principal.

  2. Pérdida de parada dinámica ATR

    Utilice el indicador ATR para calcular el rango de movimiento de precios del período actual y establecer el precio de stop loss para obtener ganancias.

  3. Aplanamiento de la señal

    Precios de cierre suaves durante un cierto período con SMA para evitar señales falsas.

  4. Indicadores alcistas y bajistas

    Ir largo cuando el precio cruza las líneas EMA, ir corto cuando cruza por debajo.

Análisis de ventajas

La estrategia tiene las siguientes ventajas:

  1. Control de extracción excelente, extracción máxima dentro del 160%.
  2. El stop loss dinámico es más inteligente que el fijo, puede obtener más ganancias de tendencia.
  3. El uso de la EMA para determinar la tendencia primaria evita operaciones de reversión.
  4. Las barras suavizadas filtran las señales falsas y mejoran la tasa de ganancias.

Análisis de riesgos

También hay algunos riesgos:

  1. Los parámetros estáticos pueden no encajar en diferentes productos, se necesita una optimización.
  2. El stop loss puede tener una brecha en mercados variados.
  3. Requiere la estabilidad del servidor para evitar señales perdidas.

Estos riesgos pueden reducirse mediante la optimización de parámetros, pruebas de adaptabilidad, etc.

Direcciones de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Optimización automática de parámetros con algoritmos de aprendizaje automático.
  2. Se incluyen las pérdidas de detención adaptativas basadas en las condiciones del mercado.
  3. Aumentar los filtros compuestos para mejorar la estabilidad.
  4. Considere la prueba cruzada de productos para mejorar la adaptabilidad.

Conclusiones

En resumen, se trata de una estrategia cuantitativa diseñada basándose en el concepto de tendencia siguiente. Determina la dirección de la tendencia con EMA y utiliza el stop loss ATR dinámico. Puede controlar efectivamente la caída mientras captura las ganancias de la tendencia. La optimización continua y la iteración pueden generar mejores resultados.


/*backtest
start: 2023-12-27 00:00:00
end: 2024-01-03 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Combined Strategy", overlay=true)

// Input variables for EMA Crossover
ema13_length = input(13, title="EMA 13 Length")
ema50_length = input(50, title="EMA 50 Length")
ema100_length = input(100, title="EMA 100 Length")
ema200_length = input(200, title="EMA 200 Length")

// Calculate EMAs for EMA Crossover
ema13 = ema(close, ema13_length)
ema50 = ema(close, ema50_length)
ema100 = ema(close, ema100_length)
ema200 = ema(close, ema200_length)

// Plot EMAs for EMA Crossover
plot(ema13, color=color.blue, title="EMA 13")
plot(ema50, color=color.orange, title="EMA 50")
plot(ema100, color=color.green, title="EMA 100")
plot(ema200, color=color.red, title="EMA 200")

// Input variables for LinReg Candles
signal_length = input(title="Signal Smoothing", type=input.integer, minval=1, maxval=200, defval=11)
sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=true)

lin_reg = input(title="Lin Reg", type=input.bool, defval=true)
linreg_length = input(title="Linear Regression Length", type=input.integer, minval=1, maxval=200, defval=11)

// Calculate LinReg Candles
bopen = lin_reg ? linreg(open, linreg_length, 0) : open
bhigh = lin_reg ? linreg(high, linreg_length, 0) : high
blow = lin_reg ? linreg(low, linreg_length, 0) : low
bclose = lin_reg ? linreg(close, linreg_length, 0) : close

r = bopen < bclose

signal = sma_signal ? sma(bclose, signal_length) : ema(bclose, signal_length)

plotcandle(r ? bopen : na, r ? bhigh : na, r ? blow: na, r ? bclose : na, title="LinReg Candles", color=color.green, wickcolor=color.green, bordercolor=color.green, editable=true)
plotcandle(r ? na : bopen, r ? na : bhigh, r ? na : blow, r ? na : bclose, title="LinReg Candles", color=color.red, wickcolor=color.red, bordercolor=color.red, editable=true)

plot(signal, color=color.white)

// Input variables for UT Bot Alerts
a = input(1, title="Key Value. 'This changes the sensitivity'")
c = input(10, title="ATR Period")
h = input(false, title="Signals from Heikin Ashi Candles")

// Calculate UT Bot Alerts
xATR = atr(c)
nLoss = a * xATR

src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=false) : close

xATRTrailingStop = 0.0
xATRTrailingStop := iff(src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), src - nLoss),
   iff(src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), src + nLoss), 
   iff(src > nz(xATRTrailingStop[1], 0), src - nLoss, src + nLoss)))

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

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

ema = ema(src,1)
above = crossover(ema, xATRTrailingStop)
below = crossover(xATRTrailingStop, ema)

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

barbuy = src > xATRTrailingStop 
barsell = src < xATRTrailingStop 

strategy.entry("Buy", strategy.long, when=buy)
strategy.close("Buy", when=sell)
strategy.entry("Sell", strategy.short, when=sell)
strategy.close("Sell", when=buy)

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

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

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


Más.