Esta estratégia usa apenas duas linhas SMA, com a SMA lenta para a direção da tendência e a SMA rápida para os sinais de entrada.
Duas linhas SMA são calculadas, uma rápida e outra lenta, juntamente com a linha média do canal de preços. A linha rápida tem um período de 5, enquanto a linha lenta tem um período de 20. Acima da linha média do canal de preços é considerada uma tendência de alta, onde são procuradas oportunidades de longo na linha rápida cruzando acima da linha lenta. Abaixo da linha média é uma tendência de queda, onde são procuradas oportunidades de curto na linha rápida cruzando abaixo da linha lenta.
Além disso, a cor do corpo da vela é incorporada. Em uma tendência de alta, pelo menos 2 velas vermelhas consecutivas são necessárias depois de ver o fundo, antes de ir longo quando a linha rápida cruza acima da linha lenta. Em uma tendência de baixa, pelo menos 2 velas verdes consecutivas são necessárias depois de ver o topo, antes de ir curto quando a linha rápida cruza abaixo da linha lenta.
As linhas de SMA dupla e o canal de preço ajudam a determinar a direção da tendência, evitando falhas. Os filtros de cor do candelabro eliminam ainda mais sinais falsos.
Os parâmetros personalizáveis permitem a configuração de condições longas/cortas de forma flexível.
O excesso de dependência das linhas SMA pode gerar sinais falsos excessivos durante os intervalos.
O ajuste dos períodos de SMA ou a incorporação de outros indicadores técnicos podem filtrar os sinais. Os indicadores de volume também podem fornecer informações adicionais. O dimensionamento da posição também pode ser otimizado com base nas condições do mercado.
Teste diferentes combinações de SMAs rápidas e lentas para encontrar parâmetros ideais.
Adicionar volume e outros indicadores para validação do sinal.
Incorporar outros indicadores técnicos para formar uma estratégia de conjunto.
Configure o dimensionamento dinâmico das posições para otimizar a gestão de capital.
Aplicar aprendizado de máquina para prever tendências de preços e pontos de inflexão.
Otimizar estratégias de stop loss para limitar perdas.
O sistema de SMA dupla para determinação de tendência é logicamente claro e comumente usado. Mas a dependência excessiva apenas das médias móveis tende a gerar sinais falsos, exigindo outros indicadores para aprimoramento. Com uma validação mais qualitativa e quantitativa, a estratégia se tornaria mais robusta.
/*backtest start: 2023-08-20 00:00:00 end: 2023-09-19 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("Noro's Trend SMA Strategy v1.4", shorttitle = "Trend SMA str 1.4", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0) needlong = input(true, "long") needshort = input(true, "short") usefastsma = input(true, "Use fast SMA") fastlen = input(5, defval = 5, minval = 1, maxval = 50, title = "fast SMA Period") slowlen = input(20, defval = 20, minval = 2, maxval = 200, title = "slow SMA Period") bars = input(2, defval = 2, minval = 0, maxval = 3, title = "Bars Q") fastsma = ema(close, fastlen) slowsma = ema(close, slowlen) //PriceChannel src = ohlc4 lasthigh = highest(src, slowlen) lastlow = lowest(src, slowlen) center = (lasthigh + lastlow) / 2 trend = low > center ? 1 : high < center ? -1 : trend[1] bar = close > open ? 1 : close < open ? -1 : 0 redbars = bars == 0 ? 1 : bars == 1 and bar == -1 ? 1 : bars == 2 and bar == -1 and bar[1] == -1 ? 1 : bars == 3 and bar == -1 and bar[1] == -1 and bar[2] == -1 ? 1 : 0 greenbars = bars == 0 ? 1 : bars == 1 and bar == 1 ? 1 : bars == 2 and bar == 1 and bar[1] == 1 ? 1 : bars == 3 and bar == 1 and bar[1] == 1 and bar[2] == 1 ? 1 : 0 up = trend == 1 and (low < fastsma or usefastsma == false) and redbars == 1 ? 1 : 0 dn = trend == -1 and (high > fastsma or usefastsma == false) and greenbars == 1 ? 1 : 0 colorfastsma = usefastsma == true ? red : na plot(fastsma, color = colorfastsma, title = "Fast SMA") plot(center, color = blue, title = "Price Channel") longCondition = up == 1 if (longCondition) strategy.entry("Long", strategy.long, needlong == false ? 0 : na) shortCondition = dn == 1 if (shortCondition) strategy.entry("Short", strategy.short, needshort == false ? 0 : na)