双确认唐奇安通道趋势策略


创建日期: 2023-12-22 10:55:06 最后修改: 2023-12-22 10:55:06
复制: 1 点击次数: 470
1
关注
1138
关注者

双确认唐奇安通道趋势策略

概述

本策略基于标准的唐奇安通道指标开发。它默认在发出交易信号前会等待两个连续的更高高点(或更低低点)确认,从而避免被市场做市商的虚晃击败。

该策略还提供了可选项,可以关闭双确认机制,使策略在出现新高或新低时立即发出交易信号。

对于不喜欢做空的人,策略还提供了过滤空头交易的选项。

策略原理

该策略基于唐奇安通道指标的上轨和下轨。上轨是过去n根K线的最高价的最大值,下轨是过去n根K线的最低价的最小值。其中n的值默认为20。

中间轨是上轨和下轨的平均值,可用来判断趋势方向。

当价格突破上轨时,策略会在多头仓位为空的前提下开多;当价格跌破下轨时,策略会在空头仓位为空的前提下开空。

为过滤假突破,策略默认开启了“等待双确认”选项。这意味着,必须要有两个连续的更高更高点(或更低更低点)才会发出交易信号。

优势分析

该策略具有以下优势:

  1. 唐奇安通道指标简单实用,容易理解实现。

  2. 双确认机制可有效过滤假突破,避免被套。

  3. 可自定义通道周期长度,适应不同市场环境。

  4. 提供空头交易选项,可满足不同投资者的需求。

  5. 代码简洁,容易理解和二次开发。

风险分析

该策略也存在一些风险:

  1. 双确认机制可能错过部分交易机会。

  2. 通道周期设置不当可能导致过于频繁或过于稀疏的交易。

  3. 持仓时间过长可能无法有效控制风险。

  4. 空头交易带来的额外风险需要注意。

  5. 回测数据拟合风险需要警惕。

对应解决方法:

  1. 可关闭双确认机制,或适当缩短双确认间隔。

  2. 优化参数,选取合适的通道周期。

  3. 设置止损或止盈,合理控制单笔损失。

  4. 禁用空头交易,只做多头。

  5. 在不同市场环境中多次回测,严格评估策略。

优化方向

该策略的优化方向包括:

  1. 基于波动率指标动态调整仓位大小。

  2. 基于突破力度指标过滤假突破。

  3. 加入移动止损机制,跟踪趋势运行。

  4. 结合其它指标判断趋势方向,避免错过重要转折点。

  5. 使用机器学习方法自动优化参数。

这些优化措施可以进一步提高策略的稳定性和盈利能力。

总结

本策略基于唐奇安通道的双确认机制,在控制风险的同时实现了简单有效的趋势跟踪。通过参数优化和功能扩展,该策略可以适应更广泛的市场环境,具有很好的实用性。

策略源码
/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Donchian Channels", shorttitle="DC", overlay=true, initial_capital=10000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, calc_on_every_tick=true)
length = input(20, minval=1)
lower = lowest(length)
upper = highest(length)
basis = avg(upper, lower)
bool inShortPos = false
bool inLongPos = false
bool wait4confirmation = input(true, title="Wait for double confirmation?")
bool doShort = input(true, title="Include short positions")

plot(basis, "Basis", color=#FF6D00)
u = plot(upper, "Upper", color=#2962FF)
l = plot(lower, "Lower", color=#2962FF)
fill(u, l, color=color.rgb(33, 150, 243, 95), title="Background")

//if(inShortPos == false and inLongPos == false)
if(not inLongPos and upper > upper[1])
    if(wait4confirmation)
        if(not inLongPos and upper > upper[1] and upper[1] > upper[2])
            strategy.close("Short", true)
            strategy.entry("Buy", true)
    else
        strategy.close("Short", true)
        strategy.entry("Buy", true)
else
    if(not inShortPos and lower < lower[1])
        if(wait4confirmation)
            if(not inShortPos and lower < lower[1] and lower[1] < lower[2])
                strategy.close("Buy", true)
                if(doShort)
                    strategy.entry("Short", true)
        else
            strategy.close("Buy", true)
            if(doShort)
                strategy.entry("Short", true)
更多内容