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

Estratégia quantitativa de combinação do canal dinâmico de Donchian e da média móvel simples

Autora:ChaoZhang, Data: 2024-06-17 17:29:48
Tags:SMA

img

Resumo

Esta estratégia combina dois indicadores técnicos: canal de Donchian e média móvel simples (SMA). Abre uma posição longa quando o preço quebra abaixo da faixa inferior do canal de Donchian e fecha acima da SMA. Por outro lado, abre uma posição curta quando o preço quebra acima da faixa superior do canal de Donchian e fecha abaixo da SMA. A posição longa é fechada quando o preço atinge a faixa superior do canal de Donchian, enquanto a posição curta é fechada quando o preço atinge a faixa inferior. Esta estratégia é adequada para mercados com tendências fortes.

Princípio da estratégia

  1. Calcule as faixas superior e inferior do Canal de Donchian. A faixa superior é a maior alta nos últimos n períodos, e a faixa inferior é a menor baixa nos últimos n períodos.
  2. Calcule a média móvel simples. A SMA é a média aritmética dos preços de fechamento nos últimos m períodos.
  3. Entrada longa: abrir uma posição longa quando o preço estiver abaixo da faixa inferior do canal de Donchian e o preço de fechamento estiver acima da SMA.
  4. Entrada curta: abrir uma posição curta quando o preço estiver acima da faixa superior do Canal de Donchian e o preço de fechamento estiver abaixo da SMA.
  5. Saída longa: fechar a posição longa quando o preço atingir a faixa superior do Canal de Donchian.
  6. Saída curta: fechar a posição curta quando o preço atingir a faixa inferior do Canal de Donchian.

Vantagens da estratégia

  1. Combina dois elementos de mercado: tendência e volatilidade. O SMA capta a tendência, enquanto o canal Donchian capta a volatilidade, permitindo que a estratégia aproveite oportunidades de retração em mercados de tendência.
  2. As posições longas e curtas são fechadas quando o preço atinge as faixas superior e inferior do Canal de Donchian, respectivamente, permitindo que a estratégia saia de negócios lucrativos antes que a tendência se inverta.
  3. Poucos parâmetros facilitam a otimização. A estratégia tem apenas três parâmetros: período do canal de Donchian, deslocamento e período SMA, que simplifica a otimização.

Riscos estratégicos

  1. A estratégia tem uma alta frequência de entradas e saídas de posições, o que pode corroer os retornos em mercados com altos custos de negociação.
  2. Os indicadores de volatilidade podem ser utilizados para identificar os mercados de gama e suspender a estratégia.
  3. Estabilidade dos parâmetros insuficiente. Os parâmetros ideais podem variar significativamente entre diferentes instrumentos e prazos, indicando baixa estabilidade dos parâmetros. O desempenho ao vivo pode não corresponder ao backtest. Extensivos testes fora da amostra e análise de sensibilidade são necessários para confirmar a robustez dos parâmetros.

Orientações para a otimização da estratégia

  1. Adicionar condições de entrada opcionais combinadas com outros indicadores. Por exemplo, exigir que o ADX do DMI esteja acima de um certo limiar para entrada, ou entrar em longo apenas quando o RSI sair da zona de sobrevenda. Isso pode melhorar a taxa de vitória das entradas.
  2. Utilize linhas dinâmicas de captação de lucro em vez de linhas fixas do Canal de Donchian para alcançar uma função de rastreamento de lucro.
  3. Ajustar dinamicamente o período do canal de Donchian com base nos níveis de volatilidade. Encurtar o período do canal de Donchian em condições de mercado de alta volatilidade e alongar o período em condições de baixa volatilidade. Isso ajuda a se adaptar a diferentes mercados.

Resumo

A estratégia de combinação do canal dinâmico de Donchian e da média móvel simples é uma estrutura de estratégia quantitativa simples e fácil de usar. Ela constrói a lógica de entrada e saída a partir das perspectivas de tendência e volatilidade, tornando-a adequada para instrumentos com tendências fortes. No entanto, a estratégia tem um desempenho fraco em mercados com frequência de intervalo e sua robustez de parâmetros é medíocre. A adaptabilidade e robustez da estratégia podem ser melhoradas através da introdução de condições de entrada auxiliares, ganhos dinâmicos e mecanismos de auto-adaptação de parâmetros.


/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("FBK Donchian Channel Strategy", overlay=true)

// Inputs
donchian_period = input.int(20, title="Donchian Channel Period")
donchian_offset = input.int(1, title="Donchian Channel Offset")
sma_period = input.int(200, title="SMA Period")
start_date = input(timestamp("2023-01-01 00:00 +0000"), title="Start Date")
end_date = input(timestamp("2023-12-31 23:59 +0000"), title="End Date")
trade_type = input.string("Both", title="Trade Type", options=["Buy Only", "Sell Only", "Both"])

// Calculate indicators
donchian_upper = ta.highest(high, donchian_period)[donchian_offset]
donchian_lower = ta.lowest(low, donchian_period)[donchian_offset]
sma = ta.sma(close, sma_period)

// Plot indicators
plot(donchian_upper, color=color.red, title="Donchian Upper")
plot(donchian_lower, color=color.green, title="Donchian Lower")
plot(sma, color=color.blue, title="SMA")

// Helper function to check if within testing period
is_in_testing_period() => true

// Entry conditions
long_condition = low <= donchian_lower and close > sma
short_condition = high >= donchian_upper and close < sma

// Exit conditions
exit_long_condition = high >= donchian_upper
exit_short_condition = low <= donchian_lower

// Open long position
if (is_in_testing_period() and (trade_type == "Buy Only" or trade_type == "Both") and long_condition)
    strategy.entry("Long", strategy.long)

// Close long position
if (is_in_testing_period() and exit_long_condition)
    strategy.close("Long")

// Open short position
if (is_in_testing_period() and (trade_type == "Sell Only" or trade_type == "Both") and short_condition)
    strategy.entry("Short", strategy.short)

// Close short position
if (is_in_testing_period() and exit_short_condition)
    strategy.close("Short")

// Close all positions at the end of the testing period
if not is_in_testing_period()
    strategy.close_all()


Relacionados

Mais.