Estratégia de inversão de tendência de rastreamento

Autora:ChaoZhang, Data: 2024-01-03 16:34:28
Tags:

img

Resumo

A estratégia de inversão de tendência é uma estratégia de negociação de tendência baseada em médias móveis e extremos de preço. A estratégia usa duas médias móveis para rastrear tendências de preços e abre posições reversas quando as tendências se invertem. Ao mesmo tempo, também calcula um canal de preços baseado nos preços mais altos e mais baixos das linhas K recentes para parar a perda quando os preços se aproximam dos limites do canal, controlando ainda mais os riscos.

Estratégia lógica

A estratégia utiliza médias móveis de pontos altos e baixos de 3 períodos hma e lma para rastrear as tendências dos preços.

A estratégia também calcula os trilhos superiores e inferiores (uplevel e dnlevel) do canal de preços com base nos preços mais altos e mais baixos dentro das linhas K das barras recentes. uplevel é o preço mais alto nas linhas K das barras recentes mais um coeficiente de retração corr para cima; dnlevel é o preço mais baixo nas linhas K das barras recentes menos um coeficiente de retração corr para baixo.

Quando se abrem posições longas, o preço de stop loss é fixado no trilho superior do canal; quando se abrem posições curtas, o preço de stop loss é fixado no trilho inferior do canal.

Quando um sinal de reversão aparece, a estratégia reverterá imediatamente as posições abertas para acompanhar a nova tendência de preços.

Vantagens

  • A estratégia aproveita ao máximo as médias móveis para acompanhar as tendências e capturar rapidamente os movimentos de preços.
  • Aplica canais de preços e posições de abertura inversa para controlar riscos e obter lucros de forma eficaz.
  • A lógica estratégica é simples e clara, fácil de compreender e implementar.
  • Os parâmetros personalizáveis, tais como a duração do julgamento da tendência, os coeficientes de retração, etc., adaptam-se a diferentes produtos.
  • Apoiar a pirâmide da mesma direção, capturar plenamente as oportunidades de tendência.

Riscos

  • São propensos a sinais falsos durante a consolidação de preços.
  • As reversões de tendência podem não desencadear sempre uma parada de perda, não sendo possível controlar a perda máxima.
  • A configuração inadequada dos parâmetros pode causar reacções demasiado sensíveis ou lentas.
  • Para obter os melhores resultados, é necessário selecionar os produtos e os prazos adequados.

Melhorias:

  1. Filtrar sinais inválidos com outros indicadores;
  2. Adicionar stop loss móvel para bloquear os lucros e limitar o drawdown máximo;
  3. Teste e otimize parâmetros para diferentes produtos e ciclos.

Orientações de otimização

Há espaço para uma maior otimização:

  1. Outros indicadores podem ser introduzidos para filtrar alguns sinais inválidos, tais como MACD, KD, etc.

  2. Pode ser adicionada uma lógica de stop loss adaptativa, como movimentação de stop loss, balance stop loss, etc., para controlar ainda mais os riscos.

  3. Testar o impacto de diferentes parâmetros no desempenho da estratégia e otimizar as combinações de parâmetros, tais como comprimentos de ciclos de MA, dimensões dos coeficientes de retracement, etc.

  4. A estratégia atualmente é negociada em sessões cronometradas. Ela também pode ser ajustada para negociação durante todo o dia. Isso pode exigir regras de filtragem adicionais.

Conclusão

Em resumo, esta é uma estratégia de negociação de reversão de tendência que combina canais de preços e médias móveis. Ao rastrear tendências e posições de abertura reversa oportunas, ele pode seguir efetivamente os movimentos de preços. Ao mesmo tempo, as medidas de controle de risco dos canais de preços e abertura reversa também permitem que ele controle efetivamente as perdas individuais. A ideia da estratégia é simples e clara, e vale a pena testar e otimizar ainda mais na negociação ao vivo.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=3
strategy(title = "Noro's 3Bars Strategy by Larry Williams", shorttitle = "3Bars", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
corr = input(0.0, title = "Correction, %")
bars = input(1, minval = 1)
revers = input(false, defval = false, title = "revers")
showll = input(true, defval = true, title = "Show Levels")
showos = input(true, defval = true, title = "Show Levels one side")
showcl = input(false, defval = false, title = "Show Levels continuous line")
showbg = input(false, defval = false, title = "Show Background")
showar = input(false, defval = false, title = "Show Arrows")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

len = input(3)

hma = sma(high, len)
lma = sma(low, len)
plot(hma)
plot(lma)

//Levels
hbar = 0
hbar := high > high[1] ? 1 : high < high[1] ? -1 : 0
lbar = 0
lbar := low > low[1] ? 1 : low < low[1] ? -1 : 0
uplevel = 0.0
dnlevel = 0.0
hh = highest(high, bars + 1)
ll = lowest(low, bars + 1)
uplevel := hbar == -1 and sma(hbar, bars)[1] == 1 ? hh + ((hh / 100) * corr) : uplevel[1]
dnlevel := lbar == 1 and sma(lbar, bars)[1] == -1 ? ll - ((ll / 100) * corr) : dnlevel[1]

//Background
size = strategy.position_size
trend = 0
trend := size > 0 ? 1 : size < 0 ? -1 : high >= uplevel ? 1 : low <= dnlevel ? -1 : trend[1]
col = showbg == false ? na : trend == 1 ? lime : trend == -1 ? red : na
bgcolor(col)

//Lines
upcol = na
upcol := showll == false ? na : uplevel != uplevel[1] and showcl == false ? na : showos and trend[1] == 1 ? na : lime
plot(uplevel, color = upcol, linewidth = 2)
dncol = na
dncol := showll == false ? na : dnlevel != dnlevel[1] and showcl == false ? na : showos and trend[1] == -1 ? na : red
plot(dnlevel, color = dncol, linewidth = 2)

//Arrows
longsignal = false
shortsignal = false
longsignal := size > size[1]
shortsignal := size < size[1]
plotarrow(longsignal and showar and needlong ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(shortsignal and showar and needshort ? -1 : na, colorup = blue, colordown = blue, transp = 0)

//Trading
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]
if uplevel > 0 and dnlevel > 0 and revers == false
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = uplevel)
    strategy.entry("Long stop", strategy.short, 0, stop = lma)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dnlevel)
    strategy.entry("Short stop", strategy.long, 0, stop = hma)
    
// if time > timestamp(toyear, tomonth, today, 23, 59)
//     strategy.close_all()

Mais.