Estratégia de Trailing Stop de Média Móvel


Data de criação: 2023-09-19 21:33:48 última modificação: 2023-09-19 21:33:48
cópia: 2 Cliques: 691
1
focar em
1617
Seguidores

Visão geral

A estratégia gera um sinal de compra através de um cruzamento de um EMA rápido para comprar a linha média e um SMA lento para vender a linha média, e usa o ATR para controlar o risco através do rastreamento de stop loss dinâmico, que visa superar a estratégia de compra e posse por meio de uma pequena quantidade de negociações.

Princípio da estratégia

  1. Calcule o EMA rápido para comprar a média e o SMA lento para comprar a média, gerando um sinal de compra quando a linha rápida atravessa a linha lenta e atinge uma certa intensidade de compra.

  2. Calcule o EMA rápido para vender a média e o SMA lento para vender a média, gerando um sinal de venda quando a linha rápida atravessa a linha lenta.

  3. O valor médio diário N multiplicado por um múltiplo do indicador ATR é usado como um ponto de parada de rastreamento dinâmico para controlar o risco.

  4. Iniciar a estratégia durante a retrospectiva, executar compras e vendas.

  5. Cada ação optimiza uma combinação diferente de parâmetros para encontrar o melhor parâmetro.

A estratégia combina os benefícios de um indicador de média móvel para determinar a tendência e os benefícios de um sinal de cruzamento e um stop loss de rastreamento dinâmico do ATR, adaptando-se às características de cada variedade por meio da otimização de parâmetros, com o objetivo de obter lucros excedentários sobre a compra e a posse de um pequeno número de negociações de precisão.

Análise de vantagens

  1. O cruzamento entre uma EMA rápida e uma SMA lenta gera um sinal de negociação que permite identificar uma tendência.

  2. ATR Stop Adjusta a posição de parada de acordo com as flutuações do mercado, para controlar eficazmente o risco.

  3. Otimizando os parâmetros de cada ação, pode-se aumentar a taxa de lucro.

  4. Lógica e regras de transação simples, fáceis de implementar e verificar.

  5. A função de detecção está completa para verificar a eficácia da estratégia.

  6. A busca pela estabilidade vai além da compra e do lucro excedente.

Análise de Riscos

  1. Os parâmetros de otimização não necessariamente se aplicam no futuro, podendo necessitar de re-otimização periódica.

  2. O cruzamento entre EMA e SMA pode gerar sinais errados ou sinais atrasados.

  3. A perda de ATR pode ser excessivamente radical e pode ser adequadamente ampliada.

  4. A frequência de transações é muito baixa, podendo perder melhores oportunidades de negociação.

  5. Os custos de transação devem ser considerados.

Direção de otimização

  1. Continuar a testar diferentes combinações de parâmetros para encontrar o melhor.

  2. Tente introduzir outros indicadores para filtrar o sinal.

  3. Optimizar os parâmetros de ciclo do ATR, equilibrando a sensibilidade do ponto de parada.

  4. Avaliação da eficácia de uma flexibilização adequada do limiar de prejuízos.

  5. Considere métodos de busca automática de parâmetros de otimização combinados com aprendizado de máquina.

  6. Estudo dos efeitos de aumentar a frequência de abertura de depósitos.

Resumir

A estratégia de stop loss de acompanhamento de média móvel, que combina os benefícios da geração de sinais de cruzamento linear e do risco de controle de stop loss do ATR, é uma estratégia de overbought simples e prática, adaptada às características de cada ação por meio da otimização de parâmetros. Embora os parâmetros otimizados não garantam o efeito futuro, a lógica de negociação geral da estratégia é clara e operacional, vale a pena melhorar e testar, e tem um bom sentido de inspiração.

Código-fonte da estratégia
/*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