Estratégia quantitativa combinando canal Donchian dinâmico e média móvel simples

SMA
Data de criação: 2024-06-17 17:29:48 última modificação: 2024-06-17 17:29:48
cópia: 4 Cliques: 772
1
focar em
1617
Seguidores

Estratégia quantitativa combinando canal Donchian dinâmico e média móvel simples

Visão geral

A estratégia combina os dois indicadores técnicos do Canal de Tâng Chi An e da Média Móvel Simples. Abrir uma posição a mais quando o preço se aproxima do Canal de Tâng Chi An e está acima da Média Móvel Simples e abrir uma posição a zero quando o preço se aproxima do Canal de Tâng Chi An e está abaixo da Média Móvel Simples.

Princípio da estratégia

  1. Calcule o trajeto ascendente e descendente do canal de Dongjian. O trajeto ascendente do canal de Dongjian é o preço mais alto nos últimos n ciclos e o trajeto descendente é o preço mais baixo nos últimos n ciclos.
  2. Calcule a média móvel simples. A média móvel simples é a média aritmética do preço de fechamento nos últimos m períodos.
  3. Abrir posições em excesso: quando o preço está abaixo da descida do Canal de Dongguan e o preço de fechamento está acima da média móvel simples.
  4. Posicionamento em branco: quando o preço é superior ao da entrada de Tangjian e o preço de fechamento é inferior à média móvel simples.
  5. Posições de equilíbrio múltiplo: quando o preço toca a trajetória do canal de Dongjian, o equilíbrio multiplo é estabelecido.
  6. Posições em aberto: quando o preço toca o sub-carril do corredor de Dongguan, as posições em aberto.

Vantagens estratégicas

  1. A combinação de tendências e oscilações dos dois elementos do mercado. A média móvel simples capta tendências, a passagem de Tangjian capta oscilações e permite melhor aproveitar as oportunidades de retração no cenário de tendências.
  2. As condições de parada são claras e ajudam a bloquear os lucros em tempo hábil. Os mercados de ativos e de ativos vazios se estabilizam quando o preço toca o caminho superior e inferior do Tangxian, respectivamente, e podem fechar posições de lucro em tempo hábil antes da reversão da tendência.
  3. A estratégia tem apenas três parâmetros de otimização: o ciclo do canal de Dongguan, o desvio e o ciclo da média móvel simples.

Risco estratégico

  1. Negociação frequente. Esta estratégia tem uma alta frequência de abertura de posições e pode prejudicar os ganhos em mercados onde os custos de negociação são altos. Pode-se reduzir o número de negociações com uma flexibilidade moderada nas condições de abertura de posições ou aumentando o período de tempo.
  2. Os mercados de choque não têm um bom desempenho. Quando a tendência não é clara, a estratégia pode sofrer mais perdas. Os mercados de choque podem ser identificados por meio de indicadores de volatilidade estatística e a estratégia pode ser suspensa.
  3. Estabilidade de parâmetros insuficiente. Diferentes padrões e períodos, os parâmetros ideais podem variar muito, a estabilidade de parâmetros é fraca, o desempenho em disco pode não ser suficiente para o teste.

Direção de otimização da estratégia

  1. A adição de condições de abertura de posição opcionais combinadas com outros indicadores, como exigir que o ADX no DMI seja maior do que um determinado limite para permitir a abertura de posições, ou abrir mais posições quando o RSI sair da zona de oversold, aumentando a taxa de abertura de posições.
  2. O uso de um stop-loss dinâmico em vez de um stop-loss fixo no canal de Dongguan permite o rastreamento de lucros. Por exemplo, os operadores podem colocar a posição em um stop-loss ATR ou SAR depois que o preço toca o canal de Dongguan.
  3. Ajustar o ciclo do canal de Dongjian de acordo com a dinâmica do nível de flutuação, reduzir o ciclo do canal de Dongjian em mercados de alta flutuação e prolongar o ciclo em mercados de baixa flutuação. Isso ajuda a se adaptar a diferentes mercados.

Resumir

A estratégia de combinação de canais dinâmicos e médias móveis simples é uma estrutura de estratégia de negociação quantitativa simples e fácil de usar. Ela constrói uma lógica de abertura de posição de equilíbrio a partir de dois ângulos de acompanhamento de tendências e de ruptura de volatilidade, adequada para variedades mais tendenciosas.

Código-fonte da estratégia
/*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()