Estratégia de sinal cruzado de média móvel

Autora:ChaoZhang, Data: 2024-01-08 15:54:32
Tags:

img

Resumo

Esta estratégia calcula e traça diferentes tipos de médias móveis para implementar sinais cruzados de médias móveis para gerar sinais de compra e venda.

Princípio da estratégia

  1. A estratégia permite a selecção de diferentes tipos de médias móveis, incluindo SMA, EMA, WMA, etc.
  2. A estratégia calcula a média móvel principal e permite também a selecção de uma segunda média móvel.
  3. Julgar a tendência do mercado com base na situação cruzada entre a média móvel principal e a segunda.
  4. Quando a média móvel principal cruza acima da sua própria média móvel do ciclo especificado, é gerado um sinal de compra; quando a média móvel principal cai abaixo da sua própria média móvel do ciclo especificado, é gerado um sinal de venda.
  5. Assim, a partir da situação cruzada das médias móveis, a evolução do mercado pode ser julgada com mais clareza.

Vantagens da estratégia

  1. Tipos de médias móveis personalizáveis para satisfazer diferentes necessidades.
  2. Adicione uma segunda média móvel para sinais mais claros.
  3. Ciclos de médias móveis personalizáveis, adequados para diferentes ciclos de tempo.
  4. Representação de cores suaves para gráficos mais claros.
  5. Utiliza um mecanismo de sinal cruzado para o julgamento preciso das tendências.

Riscos e otimização da estratégia

  1. As médias móveis têm propriedades de atraso, podem ocorrer sinais falsos.
  2. A configuração inadequada dos ciclos da média móvel pode levar a oportunidades de negociação perdidas.
  3. Recomenda-se a utilização de outros indicadores, como o volume de negociação de energia, para a verificação, a fim de reduzir os riscos.
  4. Considere mudar a média móvel do sinal para média de curva para melhorar a precisão do sinal.
  5. Modelos como o LSTM podem ser usados para otimizar a estratégia.

Conclusão

A ideia geral da estratégia é clara, usando o princípio da média móvel cruzada para julgar a tendência do mercado, parâmetros personalizáveis para atender a diferentes necessidades.


/*backtest
start: 2023-01-01 00:00:00
end: 2024-01-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Moving averages-Strategy", overlay=true)
//Created by user ChrisMoody 4-24-2014
//Plots The Majority of Moving Averages
//Defaults to Current Chart Time Frame --- But Can Be Changed to Higher Or Lower Time Frames
//2nd MA Capability with Show Crosses Feature

//inputs
src = close
useCurrentRes = input(true, title="Use Current Chart Resolution?")
resCustom = input(title="Use Different Timeframe? Uncheck Box Above",defval="D")
len = input(20, title="Moving Average Length - LookBack Period")
atype = input(1,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA, 5=VWMA, 6=RMA, 7=TEMA")
cc = input(true,title="Change Color Based On Direction?")
smoothe = input(2, minval=1, maxval=10, title="Color Smoothing - 1 = No Smoothing")
doma2 = input(false, title="Optional 2nd Moving Average")
len2 = input(50, title="Moving Average Length - Optional 2nd MA")
atype2 = input(1,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA, 5=VWMA, 6=RMA, 7=TEMA")
cc2 = input(true,title="Change Color Based On Direction 2nd MA?")
warn = input(false, title="***You Can Turn On The Show Dots Parameter Below Without Plotting 2nd MA to See Crosses***")
warn2 = input(false, title="***If Using Cross Feature W/O Plotting 2ndMA - Make Sure 2ndMA Parameters are Set Correctly***")
sd = input(false, title="Show Dots on Cross of Both MA's")


res = useCurrentRes ? timeframe.period : resCustom
//hull ma definition
hullma = wma(2*wma(src, len/2)-wma(src, len), round(sqrt(len)))
//TEMA definition
ema1 = ema(src, len)
ema2 = ema(ema1, len)
ema3 = ema(ema2, len)
tema = 3 * (ema1 - ema2) + ema3

avg = atype == 1 ? sma(src,len) : atype == 2 ? ema(src,len) : atype == 3 ? wma(src,len) : atype == 4 ? hullma : atype == 5 ? vwma(src, len) : atype == 6 ? rma(src,len) : tema
//2nd Ma - hull ma definition
hullma2 = wma(2*wma(src, len2/2)-wma(src, len2), round(sqrt(len2)))
//2nd MA TEMA definition
sema1 = ema(src, len2)
sema2 = ema(sema1, len2)
sema3 = ema(sema2, len2)
stema = 3 * (sema1 - sema2) + sema3

avg2 = atype2 == 1 ? sma(src,len2) : atype2 == 2 ? ema(src,len2) : atype2 == 3 ? wma(src,len2) : atype2 == 4 ? hullma2 : atype2 == 5 ? vwma(src, len2) : atype2 == 6 ? rma(src,len2) : tema

out = avg 
out_two = avg2

out1 = request.security(syminfo.tickerid, res, out)
out2 = request.security(syminfo.tickerid, res, out_two)

ma_up = out1 >= out1[smoothe]
ma_down = out1 < out1[smoothe]

col = cc ? ma_up ? lime : ma_down ? red : aqua : aqua
col2 = cc2 ? ma_up ? lime : ma_down ? red : aqua : aqua

circleYPosition = out2

plot(out1, title="Multi-Timeframe Moving Avg", style=line, linewidth=4, color = col)
plot(doma2 and out2 ? out2 : na, title="2nd Multi-TimeFrame Moving Average", style=circles, linewidth=4, color=col2)
plot(sd and cross(out1, out2) ? circleYPosition : na,style=cross, linewidth=5, color=yellow)


longCondition = crossover(out1, out1[smoothe])
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = crossunder(out1, out1[smoothe])
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)

Mais.