Estratégia de Crossover de Média Móvel Seguindo Tendência


Data de criação: 2024-01-29 16:52:46 última modificação: 2024-01-29 16:52:46
cópia: 3 Cliques: 596
1
focar em
1617
Seguidores

Estratégia de Crossover de Média Móvel Seguindo Tendência

Visão geral

Esta estratégia é baseada em uma simples estratégia de média móvel, que pode ter um bom efeito em diferentes pares de moedas. Ela traça a média de abertura e a média de fechamento, quando as duas linhas se cruzam.

Princípio da estratégia

Esta estratégia começa com a seleção de tipos de médias móveis de acordo com a configuração, incluindo EMA, SMA, RMA, WMA e VWMA. Em seguida, configure o período para o cálculo de médias móveis, geralmente de 10 a 250 linhas K. Selecionar diferentes tipos de médias móveis e número de períodos pode ter efeitos completamente diferentes de acordo com diferentes pares de moedas.

A lógica de negociação da estratégia é a seguinte:

  1. Calcular a média móvel entre o preço de abertura e o preço de fechamento;
  2. Comparação entre a média de fechamento e a média de abertura;
  3. Estabelecer uma posição a longo prazo se a média do preço de fechamento for superior à média do preço de abertura;
  4. Se o preço de fechamento for abaixo da média do preço de fechamento, a posição a mais será liquidada.

Quando se estabelece uma posição, é considerado um sinal de aumento de preços, e quando se abre uma posição, é considerado um sinal de queda de preços.

Análise de vantagens estratégicas

A estratégia tem as seguintes vantagens:

  1. A configuração de parâmetros é flexível, permitindo a escolha dos melhores parâmetros de acordo com diferentes pares de moedas, o que permite uma boa seleção;
  2. A lógica é simples, fácil de entender e de implementar.
  3. Em alguns pares de moedas, é possível obter taxas de retorno muito altas e, em geral, uma melhor estabilidade;
  4. Pode-se selecionar diferentes indicadores de acordo com as necessidades, com alto nível de personalização.

Análise de Riscos

A estratégia também apresenta alguns riscos:

  1. A taxa de retorno e a estabilidade são baixas em alguns pares e parâmetros;
  2. A falta de capacidade para responder eficazmente às variações de preços de curto prazo, que são ineficazes para moedas altamente voláteis;
  3. A escolha da média móvel baseada no ciclo não é suficientemente científica e tem uma certa subjetividade.

A resposta e a direção para a otimização:

  1. A escolha de períodos de tempo mais longos, como 12 horas e um dia, pode reduzir transações desnecessárias e aumentar a estabilidade;
  2. Adição de função de otimização de parâmetros, testando automaticamente diferentes combinações de parâmetros para encontrar os melhores;
  3. Adição de uma função de adaptação para escolher o ciclo da média móvel, permitindo que o sistema decida automaticamente o melhor ciclo.

Resumir

A estratégia é simples em termos de lógica, usando um indicador de média móvel para determinar tendências de preços e pontos de inflexão. Pode obter um efeito muito bom ajustando os parâmetros, é uma estratégia de acompanhamento de tendências eficaz que vale a pena ser aperfeiçoada e aplicada. Mas também deve-se ter cuidado para controlar os riscos e escolher o par de moedas e os parâmetros adequados para maximizar sua eficácia.

Código-fonte da estratégia
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//Author @divonn1994

initial_balance = 100
strategy(title='Close v Open Moving Averages Strategy', shorttitle = 'Close v Open', overlay=true, pyramiding=0, default_qty_value=100, default_qty_type=strategy.percent_of_equity, precision=7, currency=currency.USD, commission_value=0.1, commission_type=strategy.commission.percent, initial_capital=initial_balance)

//Input for number of bars for moving average, Switch to choose moving average type, Display Options and Time Frame of trading----------------------------------------------------------------

bars = input.int(66, "Moving average length (number of bars)", minval=1, group='Strategy') //66 bars and VWMA for BTCUSD on 12 Hours.. 35 bars and VWMA for BTCUSD on 1 Day
strategy = input.string("VWMA", "Moving Average type", options = ["EMA", "SMA", "RMA", "WMA", "VWMA"], group='Strategy')

redOn = input.string("On", "Red Background Color On/Off", options = ["On", "Off"], group='Display')
greenOn = input.string("On", "Green Background Color On/Off", options = ["On", "Off"], group='Display')
maOn = input.string("On", "Moving Average Plot On/Off", options = ["On", "Off"], group='Display')

startMonth = input.int(title='Start Month 1-12 (set any start time to 0 for furthest date)', defval=1, minval=0, maxval=12, group='Beginning of Strategy')
startDate = input.int(title='Start Date 1-31 (set any start time to 0 for furthest date)', defval=1, minval=0, maxval=31, group='Beginning of Strategy')
startYear = input.int(title='Start Year 2000-2100 (set any start time to 0 for furthest date)', defval=2011, minval=2000, maxval=2100, group='Beginning of Strategy')

endMonth = input.int(title='End Month 1-12 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=12, group='End of Strategy')
endDate = input.int(title='End Date 1-31 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=31, group='End of Strategy')
endYear = input.int(title='End Year 2000-2100 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=2100, group='End of Strategy')

//Strategy Calculations-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

inDateRange = true

maMomentum = switch strategy
    "EMA" => (ta.ema(close, bars) > ta.ema(open, bars)) ? 1 : -1
    "SMA" => (ta.sma(close, bars) > ta.sma(open, bars)) ? 1 : -1
    "RMA" => (ta.rma(close, bars) > ta.rma(open, bars)) ? 1 : -1
    "WMA" => (ta.wma(close, bars) > ta.wma(open, bars)) ? 1 : -1
    "VWMA" => (ta.vwma(close, bars) > ta.vwma(open, bars)) ? 1 : -1
    =>
        runtime.error("No matching MA type found.")
        float(na)

openMA = switch strategy
    "EMA" => ta.ema(open, bars)
    "SMA" => ta.sma(open, bars)
    "RMA" => ta.rma(open, bars)
    "WMA" => ta.wma(open, bars)
    "VWMA" => ta.vwma(open, bars)
    =>
        runtime.error("No matching MA type found.")
        float(na)
        
closeMA = switch strategy
    "EMA" => ta.ema(close, bars)
    "SMA" => ta.sma(close, bars)
    "RMA" => ta.rma(close, bars)
    "WMA" => ta.wma(close, bars)
    "VWMA" => ta.vwma(close, bars)
    =>
        runtime.error("No matching MA type found.")
        float(na)

//Enter or Exit Positions--------------------------------------------------------------------------------------------------------------------------------------------------------------------

if ta.crossover(maMomentum, 0)
    if inDateRange
        strategy.entry('long', strategy.long, comment='long')
if ta.crossunder(maMomentum, 0)
    if inDateRange
        strategy.close('long')

//Plot Strategy Behavior---------------------------------------------------------------------------------------------------------------------------------------------------------------------

plot(series = maOn == "On" ? openMA : na, title = "Open moving Average", color = color.new(color.purple,0), linewidth=3, offset=1)
plot(series = maOn == "On" ? closeMA : na, title = "Close Moving Average", color = color.new(color.white,0), linewidth=2, offset=1)
bgcolor(color = inDateRange and (greenOn == "On") and maMomentum > 0 ? color.new(color.green,75) : inDateRange and (redOn == "On") and maMomentum <= 0 ? color.new(color.red,75) : na, offset=1)