Quantidade de tendências seguindo estratégia

Autora:ChaoZhang, Data: 2024-01-04 15:25:42
Tags:

img

Resumo

A Estratégia Quant Trend Following é uma estratégia de rastreamento de tendências baseada em linhas EMA e ATR stop loss.

Princípios

A estratégia consiste nas seguintes partes principais:

  1. Linhas EMA para determinar a tendência primária

    Use linhas de 13 dias, 50 dias e 100 dias para formar uma tendência de alta/baixa e julgar a direção da tendência primária.

  2. Perda de parada dinâmica ATR

    Utilize o indicador ATR para calcular a gama de movimentos de preços do período em curso e definir o preço stop loss para bloquear os lucros.

  3. Suavização do sinal

    Preços de fechamento suaves durante um determinado período com SMA para evitar sinais falsos.

  4. Sinais de alta/baixa

    Vá longo quando o preço cruza as linhas EMA, vá curto quando cruza abaixo.

Análise das vantagens

A estratégia apresenta as seguintes vantagens:

  1. Excelente controlo de extracção, extracção máxima dentro de 160%.
  2. O stop loss dinâmico é mais inteligente do que o fixo, pode travar mais lucros de tendência.
  3. Usar a EMA para determinar a tendência primária evita operações de reversão.
  4. Barras suaves filtram sinais falsos e melhoram a taxa de vitórias.

Análise de riscos

Há também alguns riscos:

  1. Os parâmetros estáticos podem não se adequar a diferentes produtos, sendo necessária uma otimização.
  2. O stop loss pode existir em mercados variados.
  3. Requer estabilidade do servidor para evitar sinais perdidos.

Estes riscos podem ser reduzidos através da otimização de parâmetros, testes de adaptabilidade, etc.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Optimização automática de parâmetros com algoritmos de aprendizagem de máquina.
  2. O valor da posição em risco deve ser calculado em função das condições de mercado.
  3. Aumentar os filtros compostos para melhorar a estabilidade.
  4. Considere testes cruzados de produtos para melhorar a adaptabilidade.

Conclusões

Em resumo, esta é uma estratégia quântica projetada com base no conceito de tendência seguinte. Determina a direção da tendência com a EMA e usa o stop loss ATR dinâmico. Pode controlar efetivamente a queda enquanto captura lucros da tendência. A otimização contínua e a iteração podem gerar melhores 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")


Mais.