O recurso está a ser carregado... Carregamento...

Estratégia quantitativa de transição da SMA de tendência a longo prazo

Autora:ChaoZhang, Data: 2025-01-06 17:01:08
Tags:SMAEMA

img

Resumo

Esta estratégia é um sistema de negociação quantitativo baseado em sinais de cruzamento de média móvel simples (SMA) de vários períodos. Ele identifica principalmente oportunidades de retração dentro de tendências de alta de longo prazo.

Princípios de estratégia

A lógica do núcleo inclui vários componentes-chave:

  1. Identificação da tendência a longo prazo através da posição relativa do SMA20 e do SMA60, confirmando uma tendência de alta quando o SMA20 está acima do SMA60.
  2. Os sinais de compra são acionados quando o SMA5 de curto prazo cruza acima do SMA20 após uma retração, indicando um rebote dentro da tendência de alta.
  3. Os sinais de saída ocorrem quando a SMA20 cruza acima da SMA5, sugerindo enfraquecimento do impulso a curto prazo.
  4. A estratégia inclui uma funcionalidade de filtro de tempo para limitar os períodos de backtesting, aumentando a flexibilidade.

Vantagens da estratégia

  1. Lógica clara e simples que seja fácil de entender e implementar, evitando cálculos complexos.
  2. Filtragem eficaz do ruído através da utilização de médias móveis de vários períodos, melhorando a fiabilidade do sinal.
  3. Concentrar-se nas oportunidades de retração dentro dos mercados de tendência, alinhando-se com os princípios fundamentais de seguimento de tendências.
  4. A utilização da SMA em vez da EMA reduz a sensibilidade dos preços e os falsos sinais.
  5. Uma lógica clara de entrada e saída facilita a execução e a gestão dos riscos.

Riscos estratégicos

  1. O atraso inerente nos sistemas de médias móveis pode levar a tempos de entrada e saída subótimos.
  2. Os cruzamentos frequentes em mercados variados podem gerar sinais falsos excessivos.
  3. A ausência de um mecanismo de filtragem da volatilidade expõe a estratégia a um risco significativo de utilização em períodos de alta volatilidade.
  4. A fiabilidade dos sinais pode ser comprometida sem confirmação de volume.
  5. Os parâmetros da média móvel fixa podem não corresponder a todas as condições de mercado.

Orientações de otimização

  1. Implementar o indicador ATR para a filtragem da volatilidade, a fim de evitar a negociação em períodos de alta volatilidade.
  2. Incorporar um mecanismo de confirmação de volume para melhorar a fiabilidade do sinal.
  3. Desenvolver períodos de média móvel adaptáveis para melhor adaptar-se aos diferentes ambientes de mercado.
  4. Adicionar filtros de força de tendência, como o indicador ADX, para garantir que a negociação ocorra apenas em tendências fortes.
  5. Melhorar os mecanismos de stop-loss, incluindo trailing stops, para um melhor controlo dos riscos.

Resumo

A estratégia constrói um sistema de negociação focado em capturar oportunidades de retração dentro de tendências de alta de longo prazo através do uso coordenado de SMAs de vários períodos. Seu projeto é prático e direto, oferecendo boa compreensão e execução. A robustez e confiabilidade da estratégia podem ser melhoradas através da introdução de filtragem de volatilidade, confirmação de volume e outras medidas de otimização.


/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Long-Term Growing Stock Strategy", overlay=true)
// Date Range
// STEP 1. Create inputs that configure the backtest's date range
useDateFilter = input.bool(true, title="Filter Date Range of Backtest",group="Backtest Time Period")
backtestStartDate = input(timestamp("1 Jan 2014"),title="Start Date", group="Backtest Time Period",tooltip="This start date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " +"zone of the chart or of your computer.")
backtestEndDate = input(timestamp("31 Dec 2024"), title="End Date", group="Backtest Time Period")
// STEP 2. See if current bar falls inside the date range
inTradeWindow = true


// Calculate EMAs
// ema20 = ta.ema(close, ema20_length)
// ema60 = ta.ema(close, ema60_length)
// ema120 = ta.ema(close, ema120_length)
sma5 = ta.sma(close, 5)
sma10 = ta.sma(close, 10)
sma20 = ta.sma(close, 20)
sma60 = ta.sma(close, 60)
sma120 = ta.sma(close, 120)

// Long-term growth condition: EMA 20 > EMA 60 > EMA 120
longTermGrowth = sma20 > sma60
//  and ema60 > ema120

// Entry condition: Stock closes below EMA 20 and then rises back above EMA 10

// entryCondition = ta.crossover(close, ema20) or (close[1] < ema20[1] and close > ema20)
entryCondition =  sma5[1] <= sma20[1] and sma5 > sma20
// ta.crossover(sma5, sma20)

// Exit condition: EMA 20 drops below EMA 60
// exitCondition = ema5 < ema60 or (year == 2024 and month == 12 and dayofmonth == 30)
exitCondition = ta.crossover(sma20, sma5)

// Execute trades
if entryCondition and inTradeWindow
    strategy.entry("Long Entry", strategy.long)

if exitCondition and inTradeWindow
    strategy.close("Long Entry")
// plotchar(true, char="sma5: " + str.tostring(sma5))
// plotchar(true, char="sma5: " + sma20)
// label.new(x=bar_index, y=high + 10, text="SMA 5: " + str.tostring(sma5), color=color.blue, style=label.style_label_down, textcolor=color.white, size=size.small)
// label.new(x=bar_index, y=low, text="SMA 20: " + str.tostring(sma20), color=color.red, style=label.style_label_down, textcolor=color.white, size=size.small)


// x = time + (time - time[1]) * offset_x

//     var label lab = na
//     label.delete(lab)
//     lab := label.new(x=x, y=0, text=txt, xloc=xloc.bar_time, yloc=yloc.belowbar, color=color.red, textcolor=color.black, size=size.normal, style=label.style_label_up)
//     label.set_x(lab, x)



// Plot EMAs for visualization
// plot(ema20, color=color.red, title="EMA 20")
// plot(ema60, color=color.green, title="EMA 60")
// plot(ema120, color=color.blue, title="EMA 120")

Relacionados

Mais.