Estratégia de inversão de média móvel dupla

Autora:ChaoZhang, Data: 2023-11-22 10:07:19
Tags:

img

Resumo

A ideia principal desta estratégia é utilizar o cruzamento de médias móveis rápidas e lentas para julgar as tendências do mercado e tomar posições quando as médias móveis de curto e longo prazo se inverterem, de modo a alcançar o efeito de acompanhamento das tendências.

Estratégia lógica

  1. Estabelecer a média móvel de curto prazo de período shortma (default 7 dias) e a média móvel de longo prazo de período longma (default 77 dias)
  2. Quando a MA curta cruza a MA longa, ela é determinada como um sinal de compra e uma barra de registro desde que a MA comprou. A MA longa implica que uma tendência de alta começou. Quando a MA curta cruza abaixo da MA longa, ela é determinada como um sinal de venda e uma barra de registro desde que a MA comprou. A MA longa implica que a tendência de alta terminou.
  3. Comparar os valores de barsinha. Quanto mais barras desde que a MA curta cruzou para baixo, mais tempo a tendência de alta persistiu. Quanto mais barras desde que a MA curta cruzou para cima, mais forte o sinal de reversão.
  4. Quando o barsince para o sinal de venda é superior ao barsince para o sinal de compra, um sinal de compra é acionado.
  5. Em essência, trata-se de uma estratégia de reversão de MA dupla, utilizando reversões cruzadas de MA rápidas e lentas para detectar pontos de reversão da tendência.

Vantagens

  1. Usa MAs duplas para filtrar alguns sinais falsos
  2. Barras adicionadas, uma vez que a comparação evita falhas de ruptura e inversões de preços próximas
  3. Fácil de compreender e implementar
  4. Parâmetros MA personalizáveis adequados a diferentes períodos e mercados

Riscos

  1. As estratégias de MA dupla tendem a produzir sinais de negociação mais frequentes
  2. Uma má regulação do parâmetro MA pode deixar de ser uma tendência mais longa
  3. O valor da posição em risco deve ser calculado de acordo com o método de classificação da posição em risco, de acordo com o método de classificação da posição em risco.
  4. Não pode filtrar eficazmente bobinas e oscilações

Orientações para a melhoria

  1. Adicionar outros indicadores para evitar problemas nos mercados variados
  2. Adicionar mecanismos de stop loss
  3. Otimizar combinações de parâmetros MA
  4. Ajuste dinâmico dos parâmetros de MA com base no ciclo de mercado

Resumo

A estratégia geral tem lógica clara e fácil de entender, usando inversões MA rápidas e lentas para detectar pontos de reversão de tendência.


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

//@version=3
strategy("Up Down", "Up Down", precision = 6, pyramiding = 1, default_qty_type = strategy.percent_of_equity, default_qty_value = 99, commission_type = strategy.commission.percent, commission_value = 0.0, initial_capital = 1000, overlay = true)

buy = close > open and open > close[1]
sell = close < open and open < close[1]

longma = input(77,"Long MA Input")
shortma = input(7,"Short MA Input")
long = sma(close,longma)
short = sma(close, shortma)
mabuy = crossover(short,long) or buy and short > long
masell = crossunder(short,long) or sell and short > long

num_bars_buy = barssince(mabuy)
num_bars_sell = barssince(masell)
//plot(num_bars_buy, color = teal)
//plot(num_bars_sell, color = orange)

xbuy = crossover(num_bars_sell, num_bars_buy)
xsell = crossunder(num_bars_sell, num_bars_buy)
plotshape(xbuy,"Buy Up Arrow", shape.triangleup, location.belowbar, white, size = size.tiny)
plotshape(xsell,"Sell Down Arrow", shape.triangledown, location.abovebar, white, size = size.tiny)
plot(long,"Long MA", fuchsia, 2)

// Component Code Start
// Example usage:
// if testPeriod()
//   strategy.entry("LE", strategy.long)
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(2, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(7, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
// Component Code Stop

if testPeriod()
    strategy.entry("buy", true, when = xbuy, limit = close)
    strategy.close("buy", when = xsell)


Mais.