La estrategia de seguimiento de tendencias es una estrategia de seguimiento de tendencias basada en líneas EMA y ATR stop loss.
La estrategia consta de las siguientes partes principales:
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.
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.
Aplanamiento de la señal
Precios de cierre suaves durante un cierto período con SMA para evitar señales falsas.
Indicadores alcistas y bajistas
Ir largo cuando el precio cruza las líneas EMA, ir corto cuando cruza por debajo.
La estrategia tiene las siguientes ventajas:
También hay algunos riesgos:
Estos riesgos pueden reducirse mediante la optimización de parámetros, pruebas de adaptabilidad, etc.
La estrategia se puede optimizar en los siguientes aspectos:
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")