Visão geral: Esta estratégia baseia-se na estratégia de negociação clássica de cruzamento da média móvel.
Princípio: A lógica central da estratégia é o cruzamento duplo da média móvel. Ao calcular duas médias móveis com parâmetros diferentes, um sinal de compra é gerado quando a média móvel rápida cruza a média lenta e um sinal de venda é gerado quando a média móvel rápida cruza abaixo da média lenta.
Análise de vantagens: As principais vantagens da estratégia de cruzamento de média móvel dupla são simplicidade e facilidade de operação. Com apenas um sinal, o julgamento de tendência mais básico pode ser obtido sem muitas seleções e ajustes de parâmetros, o que é muito adequado para traders novatos. Além disso, diferentes tipos de médias móveis são testados para otimizar diferentes combinações.
Análise de risco: O principal risco desta estratégia é que as estratégias de cruzamento de média móvel comuns terão muitos sinais falsos, resultando em vários lucros pequenos e posições estáveis, o que afeta o retorno geral.
Orientações de otimização: 1) Teste diferentes períodos para determinar a combinação ideal de cruzes da média móvel; 2) Considere a introdução de um segundo conjunto de parâmetros da média móvel e indicadores RSI para ajudar no julgamento para reduzir os sinais falsos; 3) Introduza o julgamento da condição baseado na alteração incremental do indicador MA em vez de um simples cruzamento para obter um julgamento de cruzamento mais confiável.
Resumo: Esta estratégia adota a estrutura da estratégia tradicional de cruzamento de médias móveis para testar médias móveis duplas para encontrar a combinação ideal de períodos de médias móveis. Ao mesmo tempo, adiciona julgamentos de stop-loss com base no ROC e no preço da média móvel.
/*backtest start: 2023-11-27 00:00:00 end: 2023-12-27 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //study(title="MA Crossover Strategy", overlay = true) strategy("MA Crossover Strategy with MA Turning Point Exits", overlay=true) src = input(close, title="Source") price = request.security(syminfo.tickerid, timeframe.period, src) ma1 = input(5, title="1st MA Length") type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA", "VWMA"]) ma2 = input(7, title="2nd MA Length") type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA", "VWMA"]) f_hma(_src, _length)=> _return = wma((2*wma(_src, _length/2))-wma(_src, _length), round(sqrt(_length))) price1 = if (type1 == "SMA") sma(price, ma1) else if (type1 == "EMA") ema(price, ma1) else if (type1 == "VWMA") vwma(price, ma1) else f_hma(price, ma1) price2 = if (type2 == "SMA") sma(price, ma2) else if (type2 == "EMA") ema(price, ma2) else if (type2 == "VWMA") vwma(price, ma2) else f_hma(price, ma2) //plot(series=price, style=line, title="Price", color=black, linewidth=1, transp=0) plot(series=price1, style=line, title="1st MA", color=blue, linewidth=2, transp=0) plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0) longCondition = crossover(price1, price2) if (longCondition) // and time>timestamp(2018,6,1,9,30) strategy.entry("Long", strategy.long) shortCondition = crossunder(price1, price2) if (shortCondition) // and time>timestamp(2018,6,1,9,30) strategy.entry("Short", strategy.short) lookback1 = input(1, "Lookback 1") roc1 = roc(price1, lookback1) ma1up = false ma1down = false ma2up = false ma2down = false ma1up := nz(ma1up[1]) ma1down := nz(ma1down[1]) ma2up := nz(ma2up[1]) ma2down := nz(ma2down[1]) trendStrength1 = input(2, title="Minimum slope magnitude * 100", type=float) * 0.01 if crossover(roc1, trendStrength1) ma1up := true ma1down := false if crossunder(roc1, -trendStrength1) ma1up := false ma1down := true shortexitCondition = ma1up and ma1down[1] if (shortexitCondition) strategy.close("Short") longexitCondition = ma1down and ma1up[1] if (longexitCondition) strategy.close("Long")