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


Data de criação: 2023-12-28 12:00:27 última modificação: 2023-12-28 12:00:27
cópia: 0 Cliques: 543
1
focar em
1623
Seguidores

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

Descrição: Esta estratégia é uma estratégia de negociação clássica baseada no cruzamento de linhas médias. O indicador usa linhas médias duplas, incluindo a média móvel simples (SMA), a média móvel indexada (EMA), a média móvel ponderada linear (VWMA) e a média móvel ponderada oscilante (HMA).

Princípio: A lógica central da estratégia é o cruzamento de duas médias. Ao calcular a média de dois parâmetros diferentes, um sinal de compra é gerado quando a média rápida atravessa a média lenta acima da média rápida; um sinal de venda é gerado quando a média rápida atravessa a média lenta abaixo da média rápida.

Análise de vantagens: Os benefícios da estratégia de cruzamento de duas linhas de equilíbrio são simples e fáceis de operar, com um sinal, você pode obter o julgamento de tendências mais básicas, sem ter que escolher e ajustar muitos parâmetros, muito adequado para os comerciantes novatos. E os diferentes tipos de linhas de equilíbrio têm testes, você pode escolher diferentes combinações para otimizar.

Análise de Risco: O principal risco desta estratégia é que a estratégia comum de cruzamento de linha média pode ter um grande número de falsos sinais, o que leva ao problema de pequenos lucros em várias posições claras, que afetam o lucro geral. Além disso, a configuração de comprimento de linha média fixa rápida e lenta também pode falhar em certos períodos.

Orientação de otimização: 1) Tente diferentes testes de ciclo para determinar o melhor conjunto de ciclos de cruzamento de linha média; 2) Considere a introdução de parâmetros do segundo conjunto de linhas médias e o julgamento auxiliar do indicador RSI para reduzir os falsos sinais; 3) Introduza um julgamento condicional baseado em variações incrementais do indicador MA em vez de um simples cruzamento para obter um julgamento de cruzamento mais confiável.

Resumo: Esta estratégia utiliza a estrutura da tradicional estratégia de cruzamento de equilíbrio, fazendo testes de equilíbrio duplo para encontrar o melhor conjunto de ciclos de equilíbrio, ao mesmo tempo em que aumenta a determinação de perdas baseada no ROC e no preço de equilíbrio. Em geral, é uma estratégia de equilíbrio duplo simples e fácil de usar e compatível com a lógica de negociação quantitativa. Além disso, uma abundância de ideias de otimização também oferece espaço para o desenvolvimento posterior da estratégia.

Código-fonte da estratégia
/*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")