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.
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()