Estratégia de cruzamento da média móvel

Autora:ChaoZhang, Data: 2023-09-18 17:35:37
Tags:

Resumo

A estratégia de cruzamento da média móvel é uma estratégia baseada em cruzamento da média móvel como sinais de negociação.

Princípio da estratégia

Os principais princípios desta estratégia são:

  1. Calcule duas médias móveis, uma rápida e uma lenta, pode escolher SMA ou EMA.

  2. Vai longo quando a linha rápida cruza a linha lenta, posição próxima quando a linha rápida cruza a linha lenta.

  3. Pode escolher a quebra de preço ou cruzamento da média móvel como sinais de negociação.

  4. Pode definir o período de tempo para a execução da estratégia.

  5. Só pode ir longo no mercado de touros e só pode ir curto no mercado de ursos.

  6. Otimizar os parâmetros da média móvel através de backtesting para diferentes períodos.

A estratégia utiliza a tendência após a capacidade de médias móveis. Quando o MA de curto prazo cruza acima do MA de longo prazo, ele indica uma tendência ascendente, deve ir longo. vice-versa, tendência descendente, deve reduzir a posição.

Análise das vantagens

As principais vantagens desta estratégia:

  1. Princípio simples, fácil de implementar, sinais comerciais claros.

  2. Pode acompanhar de forma eficaz as tendências e captar oportunamente as oportunidades comerciais.

  3. Pode combinar diferentes parâmetros de MA para vários ambientes de mercado.

  4. Pode escolher apenas longo ou apenas curto para evitar operações inversas incertas.

  5. Pode definir uma estratégia de tempo de execução para evitar certos períodos.

  6. Pode melhorar continuamente a estratégia através da otimização de parâmetros.

Análise de riscos

Os principais riscos desta estratégia:

  1. São propensos a sinais falsos, evitando negociações muito frequentes.

  2. O desempenho depende dos parâmetros de MA, uma selecção inadequada pode levar a perdas.

  3. Existe um certo atraso, evite entrada prematura e saída atrasada.

  4. Não adequado para ambientes de mercado de gama limitada.

  5. Os cruzes MA têm alguma aleatoriedade, não podem evitar completamente as perdas.

Os riscos podem ser reduzidos através da confirmação do volume, da otimização dos parâmetros ou da utilização com outros indicadores.

Orientações de otimização

Esta estratégia pode ser otimizada nos seguintes aspectos:

  1. Adicionar filtro de inclinação como % ((Linia - ShortMa) /ShortMa) / ((Linia - LongMa) /LongMa).

  2. Otimizar períodos de média móvel, testar diferentes combinações.

  3. Adicionar indicadores como MACD ou RSI para confirmação múltipla.

  4. Configure stop loss para limitar a perda de uma única transação.

  5. Distinguir entre tendências e mercados variáveis para utilização condicional.

  6. Teste diferentes períodos de retenção para encontrar o esquema ideal.

Resumo

A estratégia de cruzamento da média móvel é uma estratégia simples e prática de tendência. As vantagens são a implementação fácil e o rastreamento de tendências eficaz. As desvantagens são atrasadas e propensas a sinais falsos. A estratégia pode ser melhorada através da otimização de parâmetros e filtragem de indicadores para alcançar um melhor desempenho em mercados de tendência forte.


/*backtest
start: 2023-09-10 00:00:00
end: 2023-09-17 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © gliese581d

//@version=4
strategy(title="Moving Averages Testing", overlay=true, precision=2, calc_on_every_tick=false, max_bars_back=5000, pyramiding=2,  
 default_qty_type=strategy.percent_of_equity, default_qty_value=50, commission_type=strategy.commission.percent, initial_capital=10000)


//SETTINGS

longs_on = input(title="Long Trades enabled", defval=true)
shorts_on = input(title="Short Trades enabled", defval=true)

long_cond = input(title="Buy/Long Crossover Condition", defval="price x MA1", options=["price x MA1", "price x MA2", "MA1 x MA2"])
short_cond = input(title="Sell/Short Crossunder Condition", defval="price x MA2", options=["price x MA1", "price x MA2", "MA1 x MA2"])

ma1_type = input(title="Moving Average 1 Type", defval="SMA", options=["SMA", "EMA"])
ma1_len = input(defval=20, title="Moving Average 1 Len", type=input.integer, minval=1, maxval=1000, step=1)
ma2_type = input(title="Moving Average 2 Type", defval="SMA", options=["SMA", "EMA"])
ma2_len = input(defval=30, title="Moving Average 2 Len", type=input.integer, minval=1, maxval=1000, step=1)


//MOVING AVERAGES

ma_1 = ma1_type == "EMA" ? ema(close, ma1_len) : sma(close, ma1_len)
ma_2 = ma2_type == "EMA" ? ema(close, ma2_len) : sma(close, ma2_len)


//STRATEGY

//trade entries
long_entry = long_cond == "price x MA1" ? crossover(close, ma_1) : long_cond == "price x MA2" ? crossover(close, ma_2) : long_cond == "MA1 x MA2" ? crossover(ma_1, ma_2) : false
short_entry = short_cond == "price x MA1" ? crossunder(close, ma_1) : short_cond == "price x MA2" ? crossunder(close, ma_2) : short_cond == "MA1 x MA2" ? crossunder(ma_1, ma_2) : false

start_month = input(defval=4, title="Strategy Start Month", type=input.integer, minval=1, maxval=12, step=1)
start_year = input(defval=2018, title="Strategy Start Year", type=input.integer, minval=2000, maxval=2025, step=1)
end_month = input(defval=12, title="Strategy End Month", type=input.integer, minval=1, maxval=12, step=1)
end_year = input(defval=2020, title="Strategy End Year", type=input.integer, minval=2000, maxval=2025, step=1)

in_time = true

strategy.entry("Long", strategy.long, when=longs_on and in_time and long_entry)
strategy.close("Long", when=longs_on and not shorts_on and short_entry)

strategy.entry("Short", strategy.short, when=shorts_on and in_time and short_entry)
strategy.close("Short", when=shorts_on and not longs_on and long_entry)


//PLOTTING

//color background
last_entry_was_long = nz(barssince(long_entry)[1], 5000) < nz(barssince(short_entry)[1], 5000)
bgcol = (longs_on and last_entry_was_long) ? color.green : (shorts_on and not last_entry_was_long) ? color.red : na
bgcolor(color=bgcol, transp=90)

plot((long_cond == "price x MA1" or long_cond == "MA1 x MA2") or (short_cond == "price x MA1" or short_cond == "MA1 x MA2") ? ma_1 : na, color=color.blue)
plot((long_cond == "price x MA2" or long_cond == "MA1 x MA2") or (short_cond == "price x MA2" or short_cond == "MA1 x MA2") ? ma_2 : na, color=color.black)
plotshape(long_entry, style=shape.triangleup, location=location.belowbar, color=color.green)
plotshape(short_entry, style=shape.triangledown, location=location.abovebar, color=color.red)

Mais.