Estratégia de negociação de reversão de média móvel dupla

Autora:ChaoZhang, Data: 2023-10-16 15:50:35
Tags:

img

Resumo

A estratégia de negociação de inversão de média móvel dupla gera sinais de negociação calculando médias móveis simples de dois períodos diferentes - curto prazo e longo prazo.

Estratégia lógica

Esta estratégia define duas médias móveis simples com diferentes comprimentos de período através dos parâmetros de entrada, com o MA de curto período referido como a linha rápida e o MA de longo período referido como a linha lenta. A linha rápida reage mais rapidamente às mudanças de preço e capta tendências de curto prazo, enquanto a linha lenta reage mais lentamente às mudanças de preço e filtra o ruído do mercado de curto prazo, capturando a tendência principal. Quando a linha rápida cruza acima da linha lenta, indica que a tendência de alta está se fortalecendo e uma posição longa é tomada. Quando a linha rápida cruza abaixo da linha lenta, indica que a tendência de queda está se fortalecendo e uma posição curta é tomada.

Especificamente, a estratégia calcula os dois MAs usando a função sma(), atribuindo o resultado para xSMA (linha lenta) e linha rápida. Os MAs são calculados com base no preço de fechamento. Quando o preço de fechamento cruza acima de xSMA, uma posição longa é tomada. Quando o preço de fechamento cruza abaixo de xSMA, uma posição curta é tomada. A estratégia também define um limite de intervalo de tempo de negociação, de modo que os sinais de negociação são gerados apenas dentro do intervalo de tempo especificado.

Os pontos de take profit e stop loss são definidos para cada negociação, e o lucro é tomado ou a stop loss é acionada imediatamente quando o preço atinge o nível de take profit ou stop loss.

Análise das vantagens

  • A utilização de um sistema de MA duplo permite acompanhar eficazmente as tendências e evitar ser enganado pelo ruído do mercado a curto prazo
  • A combinação de MAs rápidas e lentas pode melhorar a qualidade dos sinais de negociação
  • Controlo do risco dos pontos de tomada de lucro e de stop loss para cada operação
  • Limitar o intervalo de tempo de negociação evita grandes oscilações em torno de grandes eventos
  • O traçado de sinais de negociação em barras cria uma ajuda visual e melhora a intuitividade

Análise de riscos

  • Os sistemas de MA dupla tendem a gerar mais sinais falsos, aumentando a frequência e os custos das negociações
  • Os parâmetros da MA devem ser definidos de forma razoável, caso contrário, o efeito de suavização sofre ou muitas oportunidades perdidas
  • Os sistemas de MA têm atraso e podem perder pontos de virada da tendência
  • A taxa fixa de lucro/perda pode ser demasiado contundente e não pode ser ajustada dinamicamente.
  • A limitação do intervalo de tempo de negociação pode perder oportunidades em outros períodos

O risco pode ser reduzido ajustando os parâmetros MA, otimizando a estratégia take profit/stop loss, removendo limitações de tempo ou definindo períodos de tempo de negociação mais razoáveis.

Orientações de otimização

  • Teste diferentes combinações de períodos de MA para encontrar parâmetros ideais
  • Considerar a posição de stop loss/lucro dinâmico, por exemplo, baseado no ATR
  • Incorporar outros indicadores como MACD, KD etc. como sinais de filtro
  • Otimizar o intervalo de tempo de negociação para capturar mais oportunidades
  • Combinar com a estratégia de fuga, procurando sinais de fuga em torno de MAs
  • Construir mecanismos de saída dinâmicos, parando ativamente quando o preço entra no intervalo

Resumo

A estratégia de reversão de média móvel dupla é uma estratégia simples e prática de seguir tendências. Ela aproveita ao máximo o efeito suavizador dos MA para identificar a direção da tendência e usa MA rápidos / lentos para gerar sinais de negociação. A estratégia é fácil de implementar com lógica clara, adequada para os iniciantes entenderem. No entanto, pode gerar sinais falsos excessivos e problemas de atraso. Melhorias podem ser feitas por meio de otimização de parâmetros, adição de indicadores auxiliares, etc. para tornar a estratégia mais robusta. Se usada corretamente, esta estratégia pode gerar lucros constantes e vale a pena testes e otimização abrangentes.


/*backtest
start: 2023-09-15 00:00:00
end: 2023-10-15 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © HPotter
//  Simple SMA strategy
//
// WARNING:
//      - For purpose educate only
//      - This script to change bars colors
//@version=4
timeinrange(res, sess) => not na(time(res, sess)) ? 1 : 0

strategy(title="Simple SMA Strategy Backtest", shorttitle="SMA Backtest", precision=6, overlay=true)
Resolution = input(title="Resolution", type=input.resolution, defval="D")
Source = input(title="Source", type=input.source, defval=close)
xSeries = security(syminfo.tickerid, Resolution, Source)
Length = input(title="Length", type=input.integer, defval=14, minval=2)
TriggerPrice = input(title="Trigger Price", type=input.source, defval=close)
TakeProfit = input(50, title="Take Profit", step=0.01)
StopLoss = input(20, title="Stop Loss", step=0.01)
UseTPSL = input(title="Use Take\Stop", type=input.bool, defval=false)
BarColors = input(title="Painting bars", type=input.bool, defval=true)
ShowLine = input(title="Show Line", type=input.bool, defval=true)
UseAlerts = input(title="Use Alerts", type=input.bool, defval=false)
timeframe = input(title="Time Frame", defval="15")
timerange = input(title="Time Range", defval="2300-0800")
reverse = input(title="Trade Reverse", type=input.bool, defval=false)
pos = 0
xSMA = sma(xSeries, Length)
pos := iff(TriggerPrice > xSMA, 1,
         iff(TriggerPrice < xSMA, -1, nz(pos[1], 0)))
nRes = ShowLine ? xSMA : na
alertcondition(UseAlerts == true and pos != pos[1] and pos == 1, title='Signal Buy', message='Strategy to change to BUY')
alertcondition(UseAlerts == true and pos != pos[1] and pos == -1, title='Signal Sell', message='Strategy to change to SELL')
alertcondition(UseAlerts == true and pos != pos[1] and pos == 0, title='FLAT', message='Strategy get out from position')
possig =iff(pos[1] != pos,
         iff(reverse and pos == 1, -1,
           iff(reverse and pos == -1, 1, pos)), 0)
if (possig == 1 and timeinrange(timeframe, timerange))
    strategy.entry("Long", strategy.long)
if (possig == -1 and timeinrange(timeframe, timerange))
    strategy.entry("Short", strategy.short)
if (timeinrange(timeframe, timerange) == 0) 
    strategy.close_all()

if (UseTPSL)    
    strategy.close("Long", when = high > strategy.position_avg_price + TakeProfit, comment = "close buy take profit")
    strategy.close("Long", when = low < strategy.position_avg_price - StopLoss, comment = "close buy stop loss")
    strategy.close("Short", when = low < strategy.position_avg_price - TakeProfit, comment = "close buy take profit")
    strategy.close("Short", when = high > strategy.position_avg_price + StopLoss, comment = "close buy stop loss")
nColor = BarColors ? strategy.position_avg_price != 0  and pos == 1 ? color.green :strategy.position_avg_price != 0 and pos == -1 ? color.red : color.blue : na
barcolor(nColor)
plot(nRes, title='SMA', color=#00ffaa, linewidth=2, style=plot.style_line)

Mais.