
A estratégia usa o cruzamento de duas médias móveis como sinal de negociação, em combinação com o ATR stop loss para realizar negociações de acompanhamento de tendência. A idéia central é fazer o over quando atravessa a média móvel de curto prazo e o espaço quando atravessa a média móvel de longo prazo, ao mesmo tempo em que usa o ATR para configurar o stop loss, dynamically trailing stops.
A estratégia julga a direção da tendência através de dois conjuntos de médias móveis. A média móvel rápida tem 25 dias de duração e a média móvel lenta tem 100 dias. Um sinal de compra é gerado quando a média móvel rápida é atravessada pela média móvel lenta; Um sinal de venda é gerado quando a média móvel rápida é atravessada pela média móvel lenta.
Para filtrar alguns falsos sinais, a estratégia adicionou um contador de cruzamento crossCount. O crossCount será acionado somente se a média móvel rápida tiver menos de maxNoCross durante o período de lookback (default 25 dias) (default 10 vezes).
Além disso, a estratégia também adiciona um mecanismo de confirmação, ou seja, após o sinal inicial, se o preço voltar a entrar entre as duas médias móveis, o sinal também será confirmado.
Após a entrada, a estratégia usa o indicador ATR para definir a distância de parada. O ATR mede a amplitude de flutuação dos preços em um determinado período anterior, onde a distância de parada é definida em 14 vezes a ATR. A linha de parada é acompanhada pela movimentação dos preços.
A estratégia tem as seguintes vantagens:
O uso de médias móveis duplas em combinação com o mecanismo de filtragem de cruzamento pode filtrar efetivamente os sinais falsos e capturar tendências mais fortes.
Aumentar os mecanismos de confirmação para evitar falsas brechas.
O ATR é um sistema de stop loss de rastreamento flutuante que permite o bloqueio máximo dos lucros e evita a realização de grandes retrações.
Otimizar com menos parâmetros é mais fácil de implementar.
Pode ser aplicado em vários mercados, incluindo moedas digitais e mercados tradicionais.
A construção da estratégia é feita com base em vários indicadores, o que torna a estratégia mais robusta.
A estratégia tem os seguintes riscos:
Durante a fase de correção de choques, as médias móveis cruzam-se com frequência, o que pode levar a perdas repetidas.
A configuração inadequada dos parâmetros ATR pode causar perda excessiva de flexibilidade ou de rigidez.
Um grande salto ou Gap pode desencadear um stop loss.
Os preços podem fluctuar muito devido a eventos de grande importância.
Parâmetros de média móvel irracionais podem causar tendências perdidas ou produzir muitos falsos sinais.
A variação da escala de flutuação de preços recente pode ter levado a uma desajuste da distância de stop loss do ATR.
A estratégia pode ser melhorada em alguns aspectos:
Os parâmetros de média móvel são otimizados para encontrar a combinação mais adequada. Diferentes parâmetros de período e médias móveis ponderadas podem ser testados.
Testar diferentes parâmetros de ciclo ATR para encontrar uma melhor distância de parada.
Adição de condições de filtragem adicionais, como amplificação de volume de transação, indicadores de oscilação, etc., para melhorar a qualidade do sinal.
A análise de tendências, combinada com indicadores de avaliação de tendências, pode ajudar a evitar situações de turbulência.
Adicionar algoritmos de aprendizagem de máquina para otimizar automaticamente o conjunto de parâmetros através do treinamento de dados históricos.
Procure por mais confirmações nos gráficos de grande escala e evite ser enganado pelo ruído das linhas curtas.
Estabelecer regras de redução de posições de lucro e bloquear os lucros.
Esta estratégia integra o uso de múltiplos indicadores técnicos, tais como o cruzamento de médias móveis duplas, filtragem de tendências, mecanismo de confirmação e paragem dinâmica do ATR. Ainda há espaço para melhorias em termos de otimização de parâmetros e controle de risco, mas a sua estratégia de negociação é simples e clara, fácil de implementar e é uma estratégia de acompanhamento de tendências mais robusta.
/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("QuantCat Intraday Strategy (15M)", overlay=true)
//MA's for basic signals, can experiment with these values
fastEMA = sma(close, 25)
slowEMA = sma(close, 100)
//Parameters for validation of position
lookback_value = 25
maxNoCross=10 //value used for maximum number of crosses on a certain MA to mitigate noise and maximise value from trending markets
//Amount of crosses on MA to filter out noise
ema25_crossover = (cross(close, fastEMA)) == true ? 1 : 0
ema25_crossover_sum = sum(ema25_crossover, lookback_value) ///potentially change lookback value to alter results
crossCount = (ema25_crossover_sum <= maxNoCross)
//Entries long
agrLong = ((crossover(fastEMA, slowEMA)) and (crossCount == true)) ? true : false
consLong = ((close < fastEMA) and (close > slowEMA) and (fastEMA > slowEMA) and (crossCount == true)) ? true : false
//Entries short
agrShort = ((crossunder(fastEMA, slowEMA)) and (crossCount == true)) ? true : false
consShort = ((close > fastEMA) and (close < slowEMA) and (fastEMA < slowEMA) and (crossCount == true)) ? true : false
//ATR
atrLkb = input(14, minval=1, title='ATR Stop Period')
atrRes = input("15", title='ATR Resolution')
atr = request.security(syminfo.tickerid, atrRes, atr(atrLkb))
//Strategy
longCondition = ((agrLong or consLong) == true)
if (longCondition)
strategy.entry("Long", strategy.long)
shortCondition = ((agrShort or consShort) == true)
if (shortCondition)
strategy.entry("Short", strategy.short)
//Stop multiplier
stopMult = 4
//horizontal stoplosses
longStop = na
longStop := shortCondition ? na : longCondition and strategy.position_size <=0 ? close - (atr * stopMult) : longStop[1]
shortStop = na
shortStop := longCondition ? na : shortCondition and strategy.position_size >=0 ? close + (atr * stopMult) : shortStop[1]
//Strategy exit functions
strategy.exit("Long ATR Stop", "Long", stop=longStop)
strategy.exit("Short ATR Stop", "Short", stop=shortStop)
//Plots
redgreen = (fastEMA > slowEMA) ? green : red
p1 = plot(fastEMA, title="Fast EMA", color=redgreen, linewidth=2)
p2 = plot(slowEMA, title="Slow EMA", color=redgreen, linewidth=2)
fill(p1, p2, color=redgreen)
s1 = plot(longStop, style=linebr, color=red, linewidth=2, title='Long ATR Stop')
s2 = plot(shortStop, style=linebr, color=red, linewidth=2, title='Short ATR Stop')
fill(p2, s1, color=red, transp=95)
fill(p2, s2, color=red, transp=95)