反向唐肖通道承压交易策略是一种基于唐肖通道指标的量化交易策略。该策略结合了停损暂停和跟踪止损来实现风险管理。
当价格触碰唐肖通道上下边界时开仓做多做空,同时设置止损和止盈。如果发生止损,则暂停一定时间后才可开新仓。持仓期间,通过跟踪止损来锁定利润。
该策略使用20日唐肖通道指标,包含上轨、下轨和中线。
价格触碰下轨时开多仓;价格触碰上轨时开空仓。
如果之前同向交易发生止损,则要暂停一定周期(如3根K线),避免追龙。
每次开仓时设置固定比例 stop loss 和动态调整的 take profit。
take profit 根据风险收益比(如2)和 stop loss percent(如22%)计算。
持仓阶段启用跟踪止损:
多头持仓时,如果价格上穿中线,调整止损到入场价和中线价格的中点。
空头持仓下穿中线时同理调整。
使用唐肖通道指标,对突破性行情有一定抓取能力。
承压开仓,符合做反向操作的交易思路。
停损暂停避免追龙,跟踪止损锁定利润,具有良好的风险管理。
策略规则清晰易懂,容易实施。
唐肖通道作为趋势型指标,在盘整行情中容易发生虚假突破,可能导致亏损。
固定止损容易被套,应适当调整止损范围。
跟踪止损调整幅度大容易被击出,应平衡调整频率。
参数设置不当也会影响策略表现。
唐肖通道长度可进行优化,寻找最佳参数组合。
增加仓位管理模块,如定期重置暂停周期。
结合其他指标判断趋势,避免趋势性假突破。
启用动态止损,实时调整止损位置。
反向唐肖通道承压交易策略整合了趋势判断、风险管理等多项功能,基本面较完整。通过持续优化参数以及与其他指标或模型的组合,可以进一步增强策略鲁棒性,提高收益率。本策略适合有一定交易经验的投资者实施。
/*backtest start: 2023-01-17 00:00:00 end: 2024-01-23 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Contrarian Donchian Channel Strategy - Touch Entry with Post-SL Pause and Trailing Stop", overlay=true, default_qty_value=0.01, default_qty_type=strategy.percent_of_equity) // Inputs length = input(20, minval=1, title="Donchian Channel Length") riskRewardRatio = input(2, title="Risk/Reward Ratio") stopLossPercent = input(0.22, title="Stop Loss (%)") / 100 pauseCandles = input(3, minval=1, title="Pause After SL (Candles)") // Donchian Channel Calculation upper = highest(high, length) lower = lowest(low, length) centerline = (upper + lower) / 2 // Calculating the Centerline // Plotting Donchian Channel and Centerline plot(upper, color=color.red, title="Upper Band") plot(lower, color=color.green, title="Lower Band") plot(centerline, color=color.blue, title="Centerline") // Tracking Stop Loss Hits and Pause var longSLHitBar = 0 var shortSLHitBar = 0 var int lastTradeDirection = 0 // 1 for long, -1 for short, 0 for none // Update SL Hit Bars if (strategy.position_size[1] > 0 and strategy.position_size == 0) if (close[1] < strategy.position_avg_price[1]) longSLHitBar := bar_index lastTradeDirection := 1 if (strategy.position_size[1] < 0 and strategy.position_size == 0) if (close[1] > strategy.position_avg_price[1]) shortSLHitBar := bar_index lastTradeDirection := -1 // Entry Conditions - Trigger on touch longCondition = (low <= lower) and (bar_index - longSLHitBar > pauseCandles or lastTradeDirection != 1) shortCondition = (high >= upper) and (bar_index - shortSLHitBar > pauseCandles or lastTradeDirection != -1) // Trade Execution if (longCondition) strategy.entry("Long", strategy.long) if (shortCondition) strategy.entry("Short", strategy.short) // Initial Stop Loss and Take Profit Calculation stopLoss = strategy.position_avg_price * (1 - stopLossPercent) takeProfit = strategy.position_avg_price * (1 + stopLossPercent * riskRewardRatio) // Trailing Stop Loss Logic var float trailingStopLong = na var float trailingStopShort = na // Update Trailing Stop for Long Position if (strategy.position_size > 0) if (close > centerline) trailingStopLong := (strategy.position_avg_price + centerline) / 2 stopLoss := na(trailingStopLong) ? stopLoss : max(trailingStopLong, stopLoss) // Update Trailing Stop for Short Position if (strategy.position_size < 0) if (close < centerline) trailingStopShort := (strategy.position_avg_price + centerline) / 2 stopLoss := na(trailingStopShort) ? stopLoss : min(trailingStopShort, stopLoss) // Setting Stop Loss and Take Profit for each trade strategy.exit("SL_TP_Long", "Long", stop=stopLoss, limit=takeProfit) strategy.exit("SL_TP_Short", "Short", stop=stopLoss, limit=takeProfit)