Estratégia de negociação da média móvel Golden Cross

Autora:ChaoZhang, Data: 2023-12-11 11:37:36
Tags:

img

Resumo

A estratégia de negociação da média móvel Golden Cross é uma estratégia de negociação quantitativa clássica. Esta estratégia usa médias móveis de diferentes períodos para determinar as tendências do mercado para posições longas e curtas. Quando a média móvel de curto prazo cruza acima da média móvel de longo prazo, ela é considerada um sinal de compra. Quando a média móvel de curto prazo cruza abaixo da média móvel de longo prazo, ela é considerada um sinal de venda.

Estratégia lógica

Esta estratégia baseia-se em três médias móveis simples (SMA) de diferentes períodos: 50 dias, 100 dias e 200 dias.

  1. Signo de entrada: quando a média móvel de 50 dias cruzar acima da média móvel de 100 dias, vá longo.

  2. Signo de saída: quando a média móvel de 50 dias cruza abaixo da média móvel de 100 dias, fechar posições; ou quando o preço de fechamento está abaixo da média móvel de 100 dias, sair; ou quando a média móvel de 100 dias cruza abaixo da média móvel de 200 dias, sair.

  3. Tome lucro e stop loss: estabelecer o retorno do take profit e o stop loss fixo.

Esta estratégia utiliza a capacidade de médias móveis para determinar efetivamente as tendências de preços médios do mercado. A cruzação de médias de curto e longo prazo é vista como o mercado entrando em uma tendência ascendente ou descendente, daí os sinais de longo ou saída. Isso permite que a estratégia capture efetivamente as tendências do mercado.

Vantagens

  1. É simples de implementar, requer apenas três médias móveis de diferentes períodos.

  2. As médias móveis têm habilidades de filtragem de ruído que reduzem o impacto da aleatoriedade do mercado nos negócios e tornam os sinais mais confiáveis.

  3. As médias móveis refletem efetivamente as alterações na tendência do preço médio do mercado, utilizando cruzamento entre linhas de curto e longo prazo para determinar as principais mudanças de tendência.

  4. Os períodos de média móvel podem ser ajustados para diferentes níveis de controlo do risco.

Riscos

  1. Pode gerar muitos sinais falsos. Crossovers frequentes podem ocorrer quando as médias de curto e longo prazo são muito próximas, resultando em sinais inválidos excessivos.

  2. As médias móveis reagem lentamente às mudanças de preços e não podem reagir instantaneamente às notícias do mercado e a eventos importantes.

  3. A filtragem do ruído também significa perder lucros de pequenas oscilações do mercado.

  4. Selecção de parâmetros subjetivos: os períodos de média móvel adequados são em grande parte subjetivos e dependem do mercado específico.

Oportunidades de melhoria

  1. Adicionar filtros para reduzir sinais falsos, como filtros de faixa de preços para limitar os sinais a movimentos acima de uma certa magnitude.

  2. Incorporar outros indicadores para estratégias combinadas, que podem melhorar a precisão do sinal, por exemplo, indicadores de volatilidade ou volume.

  3. Adicionar módulos de otimização adaptativa para otimizar dinamicamente os períodos de média móvel com base em algoritmos de aprendizagem de máquina, permitindo a adaptação às condições de mercado em evolução.

  4. Incorporar modelos avançados de aprendizagem profunda em vez de médias móveis para capacidades superiores de extração e modelagem de características.

Conclusão

A estratégia de negociação de média móvel Golden Cross é uma estratégia típica de tendência. Reflete as tendências de preço médio do mercado de forma simples e prática, adequada para iniciantes. No entanto, também tem algumas falhas que podem ser melhoradas através do aprimoramento da qualidade do sinal, combinando-se com outros indicadores técnicos, introduzindo mecanismos adaptativos, etc. para se adaptar a mercados mais complexos.


/*backtest
start: 2023-12-03 00:00:00
end: 2023-12-10 00:00:00
period: 1m
basePeriod: 1m
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/
// © CJDeegan

//@version=4
strategy(title = "[LIVE] Golden Cross", overlay=true)

// ------------Functions------------

//Percent to Decimal Conversion
perToDec(a) => a * 0.01
//Price Difference to Tick
diffToTick(a,b) => (a - b) / syminfo.mintick 

    
// ------------Strategy Inputs------------
takeProfitInput = input(300, "Take Profit Price (% Gain)")
stopLossInput = input(25, "Stop Loss (% Loss)")


startDate = input(title="Start Date", type=input.integer,
     defval=1, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer,
     defval=1, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer,
     defval=2018, minval=1800, maxval=2100)

endDate = input(title="End Date", type=input.integer,
     defval=1, minval=1, maxval=31)
endMonth = input(title="End Month", type=input.integer,
     defval=1, minval=1, maxval=12)
endYear = input(title="End Year", type=input.integer,
     defval=2031, minval=1800, maxval=2100)

inDateRange = (time >= timestamp(syminfo.timezone, startYear,
         startMonth, startDate, 0, 0)) and
     (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0))
     

// ------------Populate Indicators------------

//EMA
sma50 = sma(close,50)
sma100 = sma(close,100)
sma200 = sma(close,200)


// ------------Entry Logic------------
//Guards
entryGuard = true
//Triggers
entryTrigger = crossover(sma50,sma100)
//Conditions
entryCondition = entryGuard and entryTrigger
//Calculations
//Execution
if (inDateRange and entryCondition)
    strategy.entry("Long", strategy.long, when = entryCondition, comment = "Entry")

//------------Exit Logic------------

//Guards
//Triggers
exitTrigger = crossunder(sma50,sma100) or close < sma100 or crossunder(sma100,sma200)
//Conditions
exitCondition = exitTrigger

//Calculations
//Take Profit
takeProfitPrice = strategy.position_avg_price + (strategy.position_avg_price * perToDec(takeProfitInput))
//Take Profit Ticks
takeProfitTicks = diffToTick(takeProfitPrice, strategy.position_avg_price)
//StopLoss
stopLossPrice = strategy.position_avg_price - (strategy.position_avg_price * perToDec(stopLossInput))

//Execution
if (inDateRange)
    strategy.close("Long", when = exitCondition, comment = "Sell Trigger")
    strategy.exit("Exit", "Long", comment="Stop", profit=takeProfitTicks, stop=stopLossPrice)

//Plots
plot(sma50, "SMA 50", color = color.blue)
plot(sma100, "SMA 100", color = color.green)
plot(sma200, "SMA 200", color = color.yellow)
entry = plot(strategy.position_size <= 0 ? na : strategy.position_avg_price, "Entry Price", color = color.yellow, style = plot.style_linebr)
profit = plot(strategy.position_size <= 0 ? na : takeProfitPrice, "Take Profit (Price)", color = color.green, style = plot.style_linebr)
stop = plot(strategy.position_size <= 0 ? na : stopLossPrice, "Stop Loss", color = color.red, style = plot.style_linebr)
fill(entry,profit, color=color.green)
fill(entry,stop, color=color.red)


Mais.