A estratégia de seguimento de tendência usa uma combinação de média móvel simples (SMA) e SMA rápida para determinar a direção da tendência do mercado e gerar sinais de negociação. Ele vai longo quando o preço cruza acima da SMA e FSMA e sai longo quando o preço cruza abaixo. Ele vai curto quando o preço cruza abaixo da SMA e FSMA e sai curto quando o preço cruza acima. A estratégia fornece sinais de negociação dinâmicos sem curva para capturar mudanças na tendência.
A estratégia usa a função sma para calcular a SMA de 50 períodos e a fsma de SMA rápida. fsma é calculada com base na SMA mais 6 vezes o desvio padrão do preço em n períodos.
Duas variáveis booleanas longas e curtas são usadas para registrar posições longas e curtas. long é definido como 1 quando o preço cruza acima de sma e fsma para entrada longa, e -1 quando o preço cruza abaixo para saída. short segue a lógica semelhante para posição curta.
A variável de tendência é utilizada para a determinação da tendência. É definida em 1 quando o preço está acima fsma e sma para tendência de alta, e -1 quando o preço está abaixo fsma e sma para tendência de queda.
Os sinais de negociação de longo e curto são gerados com base na direção da tendência em tempo real. Quando a tendência muda de baixo para cima, se o preço estiver acima do fsma, vá longo. Quando a tendência muda de cima para baixo, se o preço estiver abaixo do sma, vá curto.
A estratégia combina métodos de seguimento de tendências e de ruptura para capturar oportunidades quando a tendência muda.
Usando a confirmação dupla de dois MAs filtra fuga falsa.
A combinação de seguir a tendência e de sair da tendência é um ponto de virada.
Não há ajuste de curva ou otimização para sinais de negociação dinâmicos.
Lógica simples e clara, fácil de entender e modificar.
Parâmetros personalizáveis para comprimento, multiplicador para diferentes mercados.
Os cruzes de MA duplas podem causar trocas e reversões excessivas.
O atraso MA pode perder a inversão inicial da tendência.
Não existe um mecanismo de stop loss para controlar a perda de uma única transação.
O ajuste inadequado dos parâmetros leva ao excesso de troca ou ao atraso.
Para os riscos 1 e 2, prorrogar os períodos de MA, adicionar stop loss de retirada.
Para o risco 3, adicionar percentagem ou ordem de stop loss.
Para o risco 4, ajustar os parâmetros de forma dinâmica para diferentes mercados.
Adicionar filtro de tendência usando MACD, DMI para confirmar a tendência.
O valor da posição em risco deve ser calculado em função do valor da posição em risco.
Adicionar a perda de parada global, como parada de atraso, parada percentual.
Adicionar módulo de dimensionamento de posição para ajuste dinâmico.
Otimizar os parâmetros para se adaptarem a diferentes prazos.
Introduzir aprendizado de máquina para ajuste automático de parâmetros.
Construir estratégia composta com filtros adicionais.
Utilize aprendizagem profunda para detectar padrões de tendência complexos.
A estratégia de seguimento de tendência do SMA é um sistema de negociação de tendência simples. Ele usa MAs rápidos e lentos para ajudar a direção da tendência e capturar a reversão da tendência. No entanto, existem riscos como Whipsaw e lag. Melhorias futuras incluem a adição de filtros, paradas, parâmetros dinâmicos, etc. No geral, ele serve como um bom começo de tendência após a estratégia, mas são necessárias otimizações para aplicações do mundo real para maximizar seu desempenho.
/*backtest start: 2022-10-26 00:00:00 end: 2023-11-01 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("SMA STRATEGY", shorttitle="SMA TREND", overlay=true, calc_on_order_fills=true) length = input(title="Length", type=input.integer, defval=50) src_=input(close, title="Source", type=input.source) mult=input(6.0, title="Mult") barc=input(true, title="Use barcolor?") plots=input(false, title="Show plots?") tri=input(false, title="Use triangles?") r(src, n)=> s = 0.0 for i = 0 to n-1 s := s + ((n-(i*2+1))/2)*src[i] x=s/(n*(n+1)) x l=sma(low, length) h=sma(high, length) lr= l+mult*r(low, length) hr= h+mult*r(high, length) trend=0 trend:=src_ > lr and src_ > hr ? 1 : src_ < lr and src_ < hr ? -1 : trend[1] strategy.close("Long", when=trend==-1) strategy.close("Short", when=trend==1) strategy.entry("Long", strategy.long, when=trend==1 and src_>h) strategy.entry("Short", strategy.short, when=trend==-1 and src_<l) long=0 short=0 long:= trend==1 and src_>h ? 1 : trend==-1 ? -1 : long[1] short:= trend==-1 and src_<l ? 1 : trend==1 ? -1 : short[1] barcolor(barc? (long>0? color.green : short>0? color.red : trend>0? color.orange: trend<0 ? color.white : color.blue) : na) plotshape(tri? close : na, style= shape.diamond, color= long>0? color.green : short>0? color.red : trend>0? color.orange: trend<0 ? color.white : color.blue, location=location.top) //shortenter= a1=plot(plots? l : na, color=color.blue, linewidth=1) //longenter= a2=plot(plots? h : na, color=color.blue, linewidth=1) fill(a1, a2, color=color.blue) //stopshort= b1=plot(plots? hr : na, color=color.navy, linewidth=1) //stoplong= b2=plot(plots? lr : na, color=color.navy, linewidth=1) fill(b1, b2, color=color.navy)