Estratégia de paragem da média móvel

Autora:ChaoZhang, Data: 2023-09-19 21:33:48
Tags:

Resumo

Esta estratégia gera sinais de compra quando a linha de compra rápida da EMA cruza a linha de compra lenta da SMA e usa o ATR para controle de risco.

Estratégia lógica

  1. Calcule a EMA rápida e as linhas de compra SMA lentas, gerando sinal de compra quando a linha rápida cruza a linha lenta com certa força de compra.

  2. Calcule as linhas de venda rápida EMA e lenta SMA, gerar sinal de venda quando a linha rápida cruza abaixo da linha lenta.

  3. Utilize a média ATR de N dias multiplicada pelo coeficiente de parada de tração dinâmica para controlo do risco.

  4. Iniciar estratégia no período de backtest para execução de compra e venda.

  5. Otimizar parâmetros para cada estoque para encontrar os melhores valores.

A estratégia combina as vantagens do cruzamento MA para sinais e da parada ATR para controle de riscos.

Análise das vantagens

  1. A EMA rápida e a SMA lenta identificam tendências e geram sinais.

  2. O ATR é ajustado com base na volatilidade do mercado, controlando efetivamente os riscos.

  3. A otimização para cada ação melhora a rentabilidade.

  4. Lógica e regras simples, fáceis de implementar e verificar.

  5. Completar a funcionalidade de backtest para validar a estratégia.

  6. Procuram um desempenho superior ao de compra e retenção.

Análise de riscos

  1. Os parâmetros otimizados podem não funcionar no futuro, sendo necessária uma re-otimização periódica.

  2. Os cruzes entre a EMA e a SMA podem gerar sinais incorretos ou com atraso.

  3. A parada ATR pode ser muito agressiva, pode afrouxar o intervalo de perda de parada.

  4. A baixa frequência de comércio pode perder boas oportunidades.

  5. É necessário considerar o impacto dos custos comerciais.

Orientações de otimização

  1. Continuar a testar diferentes combinações de parâmetros para obter valores ótimos.

  2. Tente introduzir outros indicadores para filtragem de sinal.

  3. Otimizar o período ATR para equilibrar a sensibilidade de stop loss.

  4. Avaliação do efeito do relaxamento do intervalo de stop loss.

  5. Considere o aprendizado de máquina para otimização automatizada de parâmetros.

  6. Efeito do estudo do aumento da frequência do comércio.

Resumo

Esta estratégia de parada de média móvel combina os pontos fortes de cruzamento de MA para sinais e ATR para controle de risco. A otimização de parâmetros adapta-a às características de cada estoque. Embora os parâmetros otimizados não tenham garantia, a lógica geral é simples e prática para superar o buy and hold. Mais melhorias e verificação valem a pena, pois a estratégia tem bom valor inspirador.


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

//@version=2
//created by XPloRR 04-03-2018

strategy("XPloRR MA-Trailing-Stop Strategy",overlay=true, initial_capital=1000,default_qty_type=strategy.percent_of_equity,default_qty_value=100)

testStartYear = input(2005, "Start Year")
testStartMonth = input(1, "Start Month")
testStartDay = input(1, "Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2050, "Stop Year")
testStopMonth = input(12, "Stop Month")
testStopDay = input(31, "Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriodBackground = input(title="Background", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

ema1Period = input(12, "Fast EMA Buy")
sma1Period = input(54, "Slow SMA Buy")
strength1 = input(52, "Minimum Buy Strength")

ema2Period = input(18, "Fast EMA Sell")
sma2Period = input(55, "Slow SMA Sell")
strength2 = input(100, "Minimum Sell Strength")

delta = input(8, "Trailing Stop (#ATR)")

testPeriod() => true

ema1val=ema(close,ema1Period)
sma1val=sma(close,sma1Period)
ema1strength=10000*(ema1val-ema1val[1])/ema1val[1]

ema2val=ema(close,ema2Period)
sma2val=sma(close,sma2Period)
ema2strength=10000*(ema2val-ema2val[1])/ema2val[1]

plot(ema1val,color=blue,linewidth=1)
plot(sma1val,color=orange,linewidth=1)
plot(ema2val,color=navy,linewidth=1)
plot(sma2val,color=red,linewidth=1)

long=crossover(ema1val,sma1val) and (ema1strength > strength1) 
short=crossunder(ema2val,sma2val) and (ema2strength < -strength2)

stopval=ema(close,6)
atr=sma((high-low),15)

inlong=0
buy=0
stop=0
if testPeriod()
    if (inlong[1])
        inlong:=inlong[1]
        buy:=close
        stop:=iff((stopval>(stop[1]+delta*atr)),stopval-delta*atr,stop[1])
    if (long) and (not inlong[1])
        strategy.entry("buy",strategy.long)
        inlong:=close
        buy:=close
        stop:=stopval-delta*atr
plot(buy,color=iff(close<inlong,red,lime),style=columns,transp=90,linewidth=1)
plot(stop,color=iff((short or (stopval<stop)) and (close<inlong),red,lime),style=columns,transp=60,linewidth=1)
if testPeriod()
    if (short or (stopval<stop)) and (inlong[1])
        strategy.close("buy")
        inlong:=0
        stop:=0
        buy:=0



Mais.