Esta estratégia emprega médias móveis duplas, especificamente de 8 períodos e 21 períodos.
A estratégia também incorpora a inclinação da linha da média móvel para filtrar alguns períodos não-trend e produzir sinais apenas quando uma tendência é mais aparente.
O núcleo desta estratégia reside no cruzamento das médias móveis de curto e longo prazo. O MA mais curto pode capturar mudanças de tendência mais rapidamente, enquanto o MA mais longo tem melhores efeitos de filtragem de ruído. O estabelecimento de uma tendência de alta é sugerido quando o MA mais curto cruza o MA mais longo, levando a um sinal longo; o estabelecimento de uma tendência de queda é sugerido quando o MA mais curto cruza abaixo do MA mais longo, levando a um sinal curto.
A estratégia também define um limiar de inclinação. Somente quando a inclinação é maior que o valor do limiar positivo, um sinal longo será gerado. Somente quando a inclinação é menor que o valor do limiar negativo, um sinal curto será gerado. Isso ajuda a filtrar zonas onde não existe uma tendência pronunciada, resultando em sinais de negociação de maior qualidade.
Especificamente, a lógica para gerar sinais de negociação é:
As vantagens desta estratégia incluem:
Há também alguns riscos com esta estratégia:
Algumas formas de otimizar com base nestes riscos:
Algumas orientações para otimizar a estratégia:
Em resumo, essa estratégia de MA dupla é simples e prática. Ao capturar diferentes características de tendência através dos dois parâmetros de período e combiná-los para gerar sinais de negociação. Enquanto isso, incorporar o limiar de inclinação melhora a qualidade do sinal. Esta estratégia pode servir como uma base para extensões, com amplo espaço e potencial de otimização.
/*backtest start: 2024-01-09 00:00:00 end: 2024-01-16 00:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //written by sixpathssenin //@version=4 strategy(title="Dual Moving Average",initial_capital=10000,overlay=true) ma1= sma(close,8) ma2= sma(close,21) angleCriteria = input(title="Angle", type=input.integer, defval=7, minval=1, maxval=13) i_lookback = input(2, "Angle Period", input.integer, minval = 1) i_atrPeriod = input(10, "ATR Period", input.integer, minval = 1) i_angleLevel = input(6, "Angle Level", input.integer, minval = 1) i_maSource = input(close, "MA Source", input.source) f_angle(_src, _lookback, _atrPeriod) => rad2degree = 180 / 3.141592653589793238462643 //pi ang = rad2degree * atan((_src[0] - _src[_lookback]) / atr(_atrPeriod)/_lookback) ang _angle = f_angle(ma2, i_lookback, i_atrPeriod) plot(ma1,color=#FF0000) plot(ma2,color=#00FF00) crosso=crossover(ma1,ma2) crossu=crossunder(ma1,ma2) _lookback = 15 f_somethingHappened(_cond, _lookback) => bool _crossed = false for i = 1 to _lookback if _cond[i] _crossed := true _crossed longcrossed = f_somethingHappened(crosso,_lookback) shortcrossed = f_somethingHappened(crossu,_lookback) long = longcrossed and _angle > angleCriteria short= shortcrossed and _angle < -(angleCriteria) if(long) strategy.entry("Long",strategy.long) if(short) strategy.entry("short",strategy.short)