Trata-se de uma estratégia de negociação inversa baseada em dois indicadores de médias móveis. A estratégia determina a tendência de preços com base na mudança de direção de dois conjuntos de diferentes parâmetros de média móvel, e define parâmetros de sensibilidade à mudança de direção para gerar um sinal de negociação.
O indicador central da estratégia é a dupla média móvel. A estratégia permite escolher o tipo de média móvel (SMA, EMA, etc.), a duração e a origem do preço (preço de fechamento, preço típico, etc.). Depois de calcular os dois conjuntos de médias móveis, determine sua direção definindo o parâmetro de reação.
Além disso, a estratégia também define a direção da mudança e as condições para o aumento / queda contínua, para evitar a criação de sinais errados. E mostra o estado de queda do preço com visualizações de cores diferentes. Quando o preço continua a subir, a linha movavg é mostrada em verde e quando a queda é vermelha.
Esta dupla estratégia movvg combinada com linhas rápidas e lentas definidas por diferentes parâmetros, pode efetivamente filtrar o ruído do mercado de negociação de ondas e identificar tendências mais fortes. Em comparação com a estratégia de movvg única, ela reduz os sinais errôneos e pode entrar em jogo quando a tendência é mais clara, obtendo assim uma maior probabilidade de vitória.
O parâmetro de sensibilidade reaction permite a flexibilidade da estratégia para adaptar-se a diferentes ciclos e variedades. O processo da estratégia é intuitivo, simples de entender e de otimizar.
O maior risco da estratégia é perder ou inverter a posição ao perder o ponto de inflexão. Isso está relacionado ao ajuste do parâmetro de reação. Se a reação for muito pequena, é fácil gerar um sinal errado; Se a reação for muito grande, é possível perder um bom ponto de entrada.
Outro risco é a incapacidade de controlar efetivamente os prejuízos. Quando os preços são muito flutuantes, não é possível parar rapidamente, o que leva à expansão dos prejuízos. Isso requer uma estratégia de parada de prejuízos para controlar.
A direção de otimização desta estratégia concentra-se principalmente na escolha dos parâmetros reação, tipo e duração da média móvel. A reação pode ser aumentada de forma apropriada para reduzir o sinal de erro. Os parâmetros da média móvel podem ser testados de acordo com diferentes períodos e variedades, escolhendo a combinação que produz o melhor sinal.
Além disso, a combinação de outros indicadores auxiliares, como RSI, KD, etc. para confirmar o sinal de negociação também é uma idéia de otimização.
Esta estratégia é simples e prática em geral, e pode ser eficazmente identificada por meio de um duplo filtro de média móvel e gerar um sinal de negociação. A inversão de tendência é uma estratégia típica de acompanhamento de tendência.
/*backtest
start: 2023-11-03 00:00:00
end: 2023-12-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(shorttitle="MA_color strategy", title="Moving Average Color", overlay=true)
// === INPUTS
ma_type = input(defval="HullMA", title="MA Type: ", options=["SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "ZEMA", "TMA", "SSMA"])
ma_len = input(defval=32, title="MA Lenght", minval=1)
ma_src = input(close, title="MA Source")
reaction = input(defval=2, title="MA Reaction", minval=1)
// SuperSmoother filter
// © 2013 John F. Ehlers
variant_supersmoother(src,len) =>
a1 = exp(-1.414*3.14159 / len)
b1 = 2*a1*cos(1.414*3.14159 / len)
c2 = b1
c3 = (-a1)*a1
c1 = 1 - c2 - c3
v9 = 0.0
v9 := c1*(src + nz(src[1])) / 2 + c2*nz(v9[1]) + c3*nz(v9[2])
v9
variant_smoothed(src,len) =>
v5 = 0.0
v5 := na(v5[1]) ? sma(src, len) : (v5[1] * (len - 1) + src) / len
v5
variant_zerolagema(src,len) =>
ema1 = ema(src, len)
ema2 = ema(ema1, len)
v10 = ema1+(ema1-ema2)
v10
variant_doubleema(src,len) =>
v2 = ema(src, len)
v6 = 2 * v2 - ema(v2, len)
v6
variant_tripleema(src,len) =>
v2 = ema(src, len)
v7 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len)
v7
variant(type, src, len) =>
type=="EMA" ? ema(src,len) :
type=="WMA" ? wma(src,len):
type=="VWMA" ? vwma(src,len) :
type=="SMMA" ? variant_smoothed(src,len) :
type=="DEMA" ? variant_doubleema(src,len):
type=="TEMA" ? variant_tripleema(src,len):
type=="HullMA"? wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len))) :
type=="SSMA" ? variant_supersmoother(src,len) :
type=="ZEMA" ? variant_zerolagema(src,len) :
type=="TMA" ? sma(sma(src,len),len) : sma(src,len)
// === Moving Average
ma_series = variant(ma_type,ma_src,ma_len)
direction = 0
direction := rising(ma_series,reaction) ? 1 : falling(ma_series,reaction) ? -1 : nz(direction[1])
change_direction= change(direction,1)
change_direction1= change(direction,1)
pcol = direction>0 ? lime : direction<0 ? red : na
plot(ma_series, color=pcol,style=line,join=true,linewidth=3,transp=10,title="MA PLOT")
/////// Alerts ///////
alertcondition(change_direction,title="Change Direction MA",message="Change Direction MA")
longCondition = direction>0
shortCondition = direction<0
if (longCondition)
strategy.entry("BUY", strategy.long)
if (shortCondition)
strategy.entry("SELL", strategy.short)