Estratégia de média móvel

Autora:ChaoZhang, Data: 2024-02-04 15:44:54
Tags:

img

Resumo

A estratégia de média móvel de tendência de balanço é um sistema de seguimento de tendência que usa uma média móvel de longo prazo para identificar a direção da tendência combinada com a faixa média verdadeira para filtrar falsificações e limitar os drawdowns gerais.

Estratégia lógica

A estratégia baseia-se nos seguintes princípios:

  1. Use uma média móvel exponencial para determinar a direção geral da tendência.
  2. Calcule a faixa média verdadeira dos últimos 10 bares.
  3. Quando o preço de fechamento está acima de Média Móvel + Intervalo Verdadeiro Médio, é determinado como uma tendência de alta.
  4. Quando o preço de fechamento está abaixo de Média Móvel - Média Real de Intervalo, é determinado como uma tendência de baixa.
  5. Vai longo numa tendência ascendente e vai curto numa tendência descendente.
  6. Por padrão, a média móvel é usada como a linha de stop loss.

Análise das vantagens

A estratégia apresenta as seguintes vantagens:

  1. Usar uma média móvel para determinar a tendência principal pode efetivamente filtrar o ruído do mercado a curto prazo.
  2. A adição da faixa média verdadeira como condição de filtro evita a geração de sinais de negociação em mercados variáveis, reduzindo assim perdas desnecessárias.
  3. A linha de stop loss é próxima da média móvel ou do seu intervalo inverso, permitindo que as perdas rápidas de stop reduzam o drawdown máximo.
  4. Configurações de parâmetros simples facilitam a compreensão e otimização.

Análise de riscos

A estratégia apresenta também alguns riscos potenciais:

  1. A inversão da tendência geralmente leva a um certo grau de retração num sistema de médias móveis.
  2. As configurações de parâmetros da média móvel e da faixa média verdadeira podem ter um grande impacto no desempenho da estratégia.
  3. A estratégia em si não considera a relação entre preço e volume. Pode gerar alguns sinais falsos.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Teste diferentes tipos de médias móveis para encontrar a mais adequada para estoques ou produtos específicos.
  2. Otimizar o parâmetro da média móvel do período para o tornar mais adequado às características das acções ou produtos negociados.
  3. Otimizar o parâmetro Average True Range para encontrar a melhor combinação para filtrar mercados variados sem perder tendências.
  4. Adicionar regras de volume para evitar quebras inválidas.
  5. Testar e comparar diferentes métodos de stop loss para determinar a solução ideal.

Conclusão

Em geral, a estratégia de média móvel de tendência de balanço é uma estratégia de tendência muito simples e prática. Ela também tem bom controle de risco. Embora a estratégia não leve em consideração muitos fatores, ainda são necessários testes detalhados e otimização de parâmetros e métodos de stop loss. No entanto, sua lógica de negociação simples e configurações de parâmetros a tornam amplamente aplicável a diferentes produtos, especialmente adequada para negociação de criptomoedas como Bitcoin.


/*backtest
start: 2023-01-28 00:00:00
end: 2024-02-03 00:00:00
period: 1d
basePeriod: 1h
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/
// © Inkedlau

//@version=5
strategy('Swing Trend Strategy', overlay=true, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000, commission_value=0.1)

use_short = input.bool(false, 'Open Short Positions?')
exit_type = input.bool(true, 'Exit trade on Moving Average Cross?')
src = input.source(close, 'Source')
len = input.int(200, 'Trend Length')
ma_type = input.string('ema', 'Moving Average Type', options=['sma', 'ema', 'rma', 'wma', 'vwma'], tooltip='Select the type of Moving Average to use to calculate the Trend')
atr_multiplier = input.float(1., 'ATR Threshold', step=0.5, tooltip='Filter the ranging market using the Average True Range')

// ----------------------- DESCRIPTION -----------------------
// THIS SCRIPT IS A TREND FOLLOWING SYSTEM THAT USES A COMBINATION OF MOVING AVERAGE AND AVERAGE TRUE RANGE
// TO SPOT THE TRENDS AND ENTER THE MARKET ACCODINGLY.
// THE MARKET IS CONSIDERED IN AN UPTREND WHEN THE PRICE CLOSES ABOVE THE MOVING AVERAGE + THE AVERAGE TRUE RANGE OF THE LAST 10 PERIODS
// THE MARKET IS CONSIDERED IN AN DOWNTREND WHEN THE PRICE CLOSES BLOW THE MOVING AVERAGE - THE AVERAGE TRUE RANGE OF THE LAST 10 PERIODS
// BY DEFAULT, THE STRATEGY WILL ENTER LONG WHEN AN UPTREND IS SPOTTED, THEN CLOSES WHEN THE PRICE CLOSES BELOW THE MOVING AVERAGE
// THE STRATEGY WILL ENTER SHORT WHEN A DOWNTREND IS SPOTTED, THEN CLOSES WHEN THE PRICE CLOSES ABOVE THE MOVING AVERAGE

// ------------------ INDICATORS CALCULATION------------------
my_ma()=>
    ma = close
    if ma_type == 'sma'
        ma := ta.sma(src, len)
    if ma_type == 'ema'
        ma := ta.ema(src, len)
    if ma_type == 'rma'
        ma := ta.rma(src, len)
    if ma_type == 'wma'
        ma := ta.wma(src, len)
    if ma_type == 'vwma'
        ma := ta.vwma(src, len)
    ma

trend = my_ma()
atr = ta.atr(10)
uptrend = trend + atr * atr_multiplier
downtrend = trend - atr * atr_multiplier

// ---------------- ENTRY AND EXIT CONDITIONS ----------------

open_long = strategy.position_size == 0 and src > uptrend
close_long = exit_type ? strategy.position_size > 0 and src < trend : strategy.position_size > 0 and src < downtrend

open_short = use_short and strategy.position_size == 0 and src < downtrend
close_short = exit_type ? strategy.position_size < 0 and src > trend : strategy.position_size < 0 and src > uptrend

strategy.entry('long', strategy.long, when=open_long)
strategy.close('long', when=close_long)

strategy.entry('short', strategy.short, when=open_short)
strategy.close('short', when=close_short)


// ------------------ PLOTTING AND COLORING ------------------
tcolor = src > uptrend ? color.green : src < downtrend ? color.red : na

ptrend = plot(trend, color=color.blue, linewidth=1)
puptrend = plot(uptrend, color=color.green, linewidth=1)
pdowntrend = plot(downtrend, color=color.red, linewidth=1)
pclose = plot(close, color=na)

fill(puptrend, pclose, color=close > uptrend ? color.green : na, transp = 90)
fill(pdowntrend, pclose, color=close < downtrend ? color.red : na, transp = 90)



Mais.