Três estratégias de acompanhamento de tendências de média móvel


Data de criação: 2024-02-02 17:30:09 última modificação: 2024-02-02 17:30:09
cópia: 1 Cliques: 567
1
focar em
1617
Seguidores

Três estratégias de acompanhamento de tendências de média móvel

Visão geral

Esta estratégia é chamada de “Lightning Trimmer” e é uma estratégia de acompanhamento de tendências baseada em três médias móveis. Ela determina a tendência de preços através da contagem de uma linha rápida, média e lenta, e define um preço de alvo e um preço de parada com o valor ATR.

Princípio da estratégia

A estratégia usa as seguintes três médias móveis:

  1. Média móvel ponderada de 13 dias, usada para avaliar tendências de curto prazo
  2. Média móvel de 55 dias usada para avaliar tendências de médio prazo
  3. Média móvel simples de 110 dias, usada para avaliar tendências de longo prazo

Quando a linha rápida atravessa a linha média, a linha média atravessa a linha lenta, julgue-se como uma tendência múltipla; quando a linha rápida atravessa a linha média e a linha média atravessa a linha lenta, julgue-se como uma tendência vazia.

Para filtrar algumas transações ruidosas, a estratégia também estabelece condições auxiliares:

  1. Os cinco primeiros pontos baixos da linha K estão acima da linha média.
  2. As duas primeiras linhas K têm um ponto baixo abaixo da linha média.
  3. A linha K anterior fechou acima da linha média.

Quando essas condições são cumpridas, é emitido um sinal de fazer mais ou fazer menos. Cada vez que você mantém apenas uma posição, você só pode abrir a posição novamente depois de equilibrar ou parar a perda.

O preço de alvo e o preço de parada são definidos em múltiplos dos valores do ATR.

Análise de vantagens

A estratégia tem as seguintes vantagens:

  1. Usando uma combinação de três médias móveis para avaliar a tendência, evita-se a probabilidade de erros de avaliação em um único indicador.
  2. A configuração de várias condições auxiliares de filtragem de ruído pode melhorar a qualidade do sinal.
  3. O ATR é um sistema de paralisação dinâmica que ajuda a controlar perdas individuais.

Análise de Riscos

A estratégia também apresenta os seguintes riscos:

  1. A combinação de médias móveis pode emitir sinais errados e precisa de uma resposta adequada.
  2. A configuração inadequada do ATR pode levar a um stop loss muito leve ou rigoroso.
  3. A falha de filtragem de eventos inesperados.

Para controlar o risco, é recomendável ajustar adequadamente os parâmetros da média móvel, otimizar o múltiplo ATR e definir o tempo máximo de posse para evitar perdas individuais excessivas.

Direção de otimização

A estratégia pode ser melhorada em:

  1. Teste de médias móveis de diferentes comprimentos ou tipos.
  2. Parâmetros para otimizar as condições auxiliares.
  3. Tente outros indicadores de previsão de tendências, como MACD, DMI, etc.
  4. Indicadores de capacidade de combinação como volume de transação, diferença de preço e outros sinais de filtragem.

Resumir

Esta estratégia é uma estratégia de acompanhamento de tendência estável. Ela se baseia principalmente na direção da tendência de medias móveis, e tem um conjunto de indicadores técnicos para ajudar a filtrar parte do ruído. Embora ainda haja espaço para otimização adicional, o risco geral é controlado e é adequado para investir em tendências de linha média e longa.

Código-fonte da estratégia
/*backtest
start: 2024-01-02 00:00:00
end: 2024-02-01 00:00:00
period: 2h
basePeriod: 15m
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/
// © greenmask9

//@version=4
strategy("Dazzling Bolts", overlay=true)
//max_bars_back=3000

// 13 SMMA
len = input(10, minval=1, title="SMMA Period")
src = input(close, title="Source")
smma = 0.0
smma := na(smma[1]) ? sma(src, len) : (smma[1] * (len - 1) + src) / len

// 55 EMA
emalength = input(55, title="EMA Period")
ema = ema(close, emalength)

// 100 SMA
smalength = input(110, title="SMA Period")
sma = sma(close, smalength)

emaforce = input(title="Force trend with medium EMA", type=input.bool, defval=true)
offsetemavalue = input(defval = 6)

bullbounce = smma>ema and ema>sma and low[5]>ema and low[2]<ema and close[1]>ema and (ema[offsetemavalue]>sma or (not emaforce))
bearbounce = smma<ema and ema<sma and high[5]<ema and high[2]>ema and close[1]<ema and (ema[offsetemavalue]<sma or (not emaforce))
plotshape(bullbounce,  title= "Purple", location=location.belowbar, color=#ff33cc, transp=0, style=shape.triangleup, size=size.tiny, text="Bolts")
plotshape(bearbounce,  title= "Purple", location=location.abovebar, color=#ff33cc, transp=0, style=shape.triangledown, size=size.tiny, text="Bolts")
strategy.initial_capital = 50000
ordersize=floor(strategy.initial_capital/close)
longs = input(title="Test longs", type=input.bool, defval=true)
shorts = input(title="Test shorts", type=input.bool, defval=true)
atrlength = input(title="ATR length", defval=12)
atrm = input(title="ATR muliplier",type=input.float, defval=2)
atr = atr(atrlength)

target = close + atr*atrm
antitarget = close - (atr*atrm)

//limits and stop do not move, no need to count bars from since

bullbuy = bullbounce and longs and strategy.opentrades==0
bb = barssince(bullbuy)
bearsell = bearbounce and shorts and strategy.opentrades==0
bs = barssince(bearsell)

if (bullbuy)
    strategy.entry("Boltsup", strategy.long, ordersize)
    strategy.exit ("Bolts.close", from_entry="Boltsup", limit=target, stop=antitarget)
if (crossover(smma, sma))
    strategy.close("Boltsup", qty_percent = 100, comment = "Bolts.crossover")

if (bearsell)
    strategy.entry("Boltsdown", strategy.short, ordersize)
    strategy.exit("Bolts.close", from_entry="Boltsdown", limit=antitarget, stop=target)
if (crossunder(smma, sma))
    strategy.close("Boltsdown", qty_percent = 100, comment = "Bolts.crossover")

// if (bb<5)
//     bulltarget = line.new(bar_index[bb], target[bb], bar_index[0], target[bb], color=color.blue, width=2)
//     bullclose = line.new(bar_index[bb], close[bb], bar_index[0], close[bb], color=color.blue, width=2)
//     bullstop = line.new(bar_index[bb], antitarget[bb], bar_index[0], antitarget[bb], color=color.blue, width=2)
// if (bs<5)
//     bulltarget = line.new(bar_index[bs], antitarget[bs], bar_index[0], antitarget[bs], color=color.purple, width=2)
//     bullclose = line.new(bar_index[bs], close[bs], bar_index[0], close[bs], color=color.purple, width=2)
//     bullstop = line.new(bar_index[bs], target[bs], bar_index[0], target[bs], color=color.purple, width=2)