O recurso está a ser carregado... Carregamento...

Estratégia de cruzamento de média móvel dupla

Autora:ChaoZhang, Data: 2024-05-17 15:48:04
Tags:EMASMA

img

Resumo

Princípio da estratégia

O núcleo desta estratégia é usar as características de tendência das médias móveis e dos sinais de cruzamento para determinar a direção da tendência e o tempo de entrada. Primeiro, defina os períodos da média móvel rápida (padrão 50) e da média móvel lenta (padrão 200) através de parâmetros e escolha usar SMA ou EMA. Em seguida, calcule as duas médias móveis e determine suas situações de cruzamento:

  1. Quando a média móvel rápida cruzar acima da média móvel lenta (cruz de ouro), abra uma posição longa se não houver posição atual e defina o preço de stop-loss (calculado com base na percentagem de stop-loss).
  2. Quando a média de movimento rápido cruzar abaixo da média de movimento lento (cruz de morte), abra uma posição curta se não houver posição atual e defina o preço de stop-loss.
  3. Se houver uma posição longa existente, feche a posição quando ocorrer uma cruz de morte.
  4. Se existir uma posição curta, feche a posição quando ocorrer uma cruz de ouro. Abrir posições com base em sinais de cruzamento da média móvel e definir o stop-loss para capturar as tendências de preços a médio e longo prazo de forma a seguir a tendência.

Vantagens da estratégia

  1. Suporta tanto a SMA como a EMA, que podem ser selecionadas de forma flexível.
  2. A definição de stop-loss controla o risco de perda até certo ponto.

Riscos estratégicos

  1. A selecção inadequada de parâmetros (como períodos de média móvel inadequados) pode conduzir a sinais frequentes ou a um julgamento da tendência atrasado.
  2. Quando a tendência se inverte ou termina, podem ocorrer grandes retrações.
  3. A taxa fixa de stop-loss pode não controlar bem os riscos.

Orientações para a otimização da estratégia

  1. Otimizar parâmetros, incluindo períodos de média móvel, percentagem de stop-loss, etc., para melhorar a estabilidade e a relação risco/retorno.
  2. Considerar a introdução de indicadores relacionados com a volatilidade, como o ATR, para ajustar dinamicamente as posições de stop-loss.
  3. Confirmar a tendência antes de abrir uma posição, em vez de abrir imediatamente no cruzamento, ou adicionar outros indicadores de confirmação de tendência para facilitar o julgamento e melhorar a precisão da captura da tendência.
  4. Pode ser melhorada através de estratégias de gestão de fundos, tais como adição ou redução de posições.

Resumo

A estratégia de cruzamento de média móvel dupla é uma estratégia simples e clássica de seguir tendências que determina a direção da tendência e o tempo de entrada / saída com base no cruzamento de duas médias móveis com períodos diferentes, adequados para capturar tendências de médio a longo prazo.


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

//@version=5
//==============================================================================
// A baseline strategy with a well known concept, golden cross & death cross.
// Support for both Simple & Exponential moving averages.
// Support for long & short stop losses as a percentage.:well
//==============================================================================
strategy("Basic Moving Average Crosses", overlay=true)

//------------------------------------------------------------------------------
// configuration
//------------------------------------------------------------------------------
maQuickLength = input(50, title="Quick MA Length") 
maSlowLength  = input(200, title="Quick MA Length") 
useSma        = input(true, title="Use SMA? If false, EMA is used.")

maQuick = useSma ? ta.sma(close, maQuickLength) : ta.ema(close, maQuickLength)
maSlow  = useSma ? ta.sma(close, maSlowLength) : ta.ema(close, maSlowLength)

stop_loss_percentage = input(2.0, title="Stop Loss (%)")

var float longStopLevel = na
var float shortStopLevel = na

bool isGoldenCross = ta.crossover(maQuick, maSlow)
bool isDeathCross  = ta.crossunder(maQuick, maSlow)

//------------------------------------------------------------------------------
// position opening logic
//------------------------------------------------------------------------------

if(strategy.position_size == 0)
    // Golden cross, enter a long position
    if(isGoldenCross)
        strategy.entry("Buy", strategy.long)
        longStopLevel := close - close * stop_loss_percentage/100.0
        strategy.exit("StopLossLong", "Buy", stop=longStopLevel)
    // Death cross, enter short position
    else if(isDeathCross)
        strategy.entry("Sell", strategy.short)
        shortStopLevel := close + close * stop_loss_percentage/100.0
        strategy.exit("StopLossShort", "Sell", stop=shortStopLevel)

//------------------------------------------------------------------------------
// position closing logic
//------------------------------------------------------------------------------
else
    // Close long position on death cross
    if(strategy.position_size > 0 and isDeathCross)
        strategy.close("Buy")
    
    // Close short position on golden cross
    else if(strategy.position_size < 0 and isGoldenCross)
        strategy.close("Sell")

//------------------------------------------------------------------------------
// ploting
//------------------------------------------------------------------------------
plot(maQuick, color=color.yellow)
plot(maSlow, color=color.blue)

Relacionados

Mais.