This strategy combines two technical indicators: Donchian Channel and Simple Moving Average (SMA). It opens a long position when the price breaks below the lower band of the Donchian Channel and closes above the SMA. Conversely, it opens a short position when the price breaks above the upper band of the Donchian Channel and closes below the SMA. The long position is closed when the price reaches the upper band of the Donchian Channel, while the short position is closed when the price reaches the lower band. This strategy is suitable for markets with strong trends.
The Dynamic Donchian Channel and Simple Moving Average Combination Strategy is a simple and easy-to-use quantitative trading strategy framework. It constructs entry and exit logic from the perspectives of trend following and volatility breakout, making it suitable for instruments with strong trends. However, the strategy performs poorly in frequently rangebound markets, and its parameter robustness is mediocre. The adaptability and robustness of the strategy can be improved by introducing auxiliary entry conditions, dynamic profit-taking, and parameter self-adaptation mechanisms. Overall, this strategy can serve as a basic strategy framework to be further modified and improved upon to create more advanced quantitative strategies.
/*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()