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

Autora:ChaoZhang, Data: 2023-12-19 13:37:33
Tags:

img

Resumo

Esta estratégia otimiza a estratégia de cruzamento da média móvel convencional, definindo três médias móveis com períodos diferentes, construindo um padrão de cruz de ouro com médias móveis de 9 períodos, 50 períodos e 100 períodos.

Estratégia lógica

A estratégia utiliza três médias móveis com períodos de 9, 50 e 100. O MA de 9 períodos é o MA de curto prazo, o MA de 50 períodos é o MA de médio prazo e o MA de 100 períodos é o MA de longo prazo. Os sinais de negociação são gerados pelo cruzamento entre o MA de curto prazo e o MA de médio prazo. Especificamente, quando o MA de longo prazo está em uma tendência de alta (acima do MA de médio prazo), um sinal de compra é ativado quando o MA de curto prazo cruza acima do MA de médio prazo. Um sinal de venda é ativado quando o MA de curto prazo cruza abaixo do MA de médio prazo.

Análise das vantagens

Em comparação com a estratégia de cruzamento de média móvel dupla convencional, esta estratégia adiciona a condição de julgar tendências de médio e longo prazo antes de gerar sinais de negociação, o que pode efetivamente filtrar alguns sinais inválidos. Quando as tendências de longo prazo não são claras, a estratégia não gerará sinais, evitando ser presa na consolidação. Ao mesmo tempo, esta estratégia é adequada para capturar movimentos de tendência no curto e médio prazo, reduzindo a possibilidade de entrada agressiva.

Análise de riscos

Quando se estabelecem parâmetros para esta estratégia, a combinação de períodos de média móvel precisa ser ajustada. As diferentes combinações de períodos terão um impacto na eficácia da estratégia. Se os parâmetros do período não forem definidos corretamente, existe o risco de gerar muitos sinais falsos. Além disso, os traders precisam estar cientes dos riscos sistêmicos potenciais e parar as perdas em tempo hábil para mitigar os riscos.

Orientações de otimização

Considerar a incorporação de outros indicadores para ajudar a julgar as tendências do mercado, como MACD, BOLL, etc., e definir condições de entrada mais rigorosas, ou incorporar indicadores de volatilidade para construir médias móveis adaptativas de modo que os parâmetros possam ser ajustados automaticamente com base nas condições do mercado para otimizar ainda mais a estratégia.

Conclusão

Baseada no crossover convencional de média móvel dupla, esta estratégia adiciona julgamento de MA a longo prazo e condições de filtragem, que podem efetivamente filtrar sinais falsos e é adequada para capturar movimentos de tendência de curto a médio prazo.


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

//@version=4
strategy("Golden Cross, SMA 100, Moving Average Strategy (by Coinrule)", shorttitle="Golden_Cross_Strat_MA100_optimized", overlay=true, initial_capital = 1000,process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

// Input
switch1=input(true, title="Enable Bar Color?")
switch2=input(false, title="Show Fast Moving Average")
switch3=input(true, title="Show Slow Moving Average")

//Calculate Moving Averages
movingaverage_fast = sma(close, input(9))
movingaverage_slow = sma(close, input(100))
movingaverage_normal= sma(close, input(50))

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2020, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"


// Calculation
bullish_cross = crossover(movingaverage_fast, movingaverage_normal)
bearish_cross = crossunder(movingaverage_fast, movingaverage_normal)

//Entry and Exit
if bullish_cross and window() and movingaverage_slow > movingaverage_normal
    strategy.entry("long", strategy.long)

strategy.close("long", when = bearish_cross and window())

// Colors
bartrendcolor = close > movingaverage_fast and close > movingaverage_slow and change(movingaverage_slow) > 0 ? color.green : close < movingaverage_fast and close < movingaverage_slow and change(movingaverage_slow) < 0 ? color.red : color.blue
barcolor(switch1?bartrendcolor:na)

// Output
plot(movingaverage_fast, color=color.orange, linewidth=2)
plot(movingaverage_slow, color=color.purple, linewidth=3)
plot(movingaverage_normal, color=color.blue, linewidth=2)

bgcolor(color = showDate and window() ? color.gray : na, transp = 90)

Mais.