📘 本章重点
- 掌握Dual Thrust的核心公式:Range = Max(HH-LC, HC-LL)
- 理解“双重推力”的含义——用两个方向的最大波动幅度来构建通道
- 学会K1、K2不对称系数的设定逻辑及其对多空信号的影响
- 了解Dual Thrust作为日内策略与隔夜策略的两种应用模式
⚠️ 本章难点
- 理解Range计算中“取最大值”的含义——选择过去N日最大的单向波动幅度作为通道基准
- 区分Dual Thrust与唐奇安通道的本质差异(固定开盘基准 vs 移动最高/最低基准)
- 掌握K1≠K2不对称参数的设计逻辑及其在不同市场中的调整方法
- 理解日内版本“收盘前平仓”与隔夜版本“非多即空”的差异
⏱️ 预估学习时间
- 45~60分钟
一、策略简述与一句话定性
一句话定性:Dual Thrust是一个基于开盘区间突破的趋势跟踪系统,以前N日的价格波动幅度构建通道,当价格突破上轨时做多、突破下轨时做空,用“双重推力”捕捉趋势的启动。
Dual Thrust直译为“双重推力”。它由Michael Chalek在20世纪80年代开发,曾被《Future Truth》杂志评为最赚钱的策略之一——2009年《Future Truth》评出的标普500十大交易系统中,Dual Thrust以414%的收益率(3倍杠杆)排名第一。该策略思路简单、参数很少,被广泛应用于股票、货币、贵金属、债券、能源及股指期货市场。
Dual Thrust与海龟交易法则(第一.01)同属趋势跟踪家族,但两者有本质区别:
| 维度 | 海龟交易法则(第一.01) | Dual Thrust(第一.02) |
|---|---|---|
| 通道基准 | 过去N日的最高价/最低价(移动基准) | 今日开盘价(固定基准)+ 波动幅度 |
| 核心逻辑 | 价格突破历史高点/低点 | 价格在开盘价基础上突破一定幅度 |
| 典型周期 | 日线级别,可隔夜持仓 | 日内交易为主,收盘平仓 |
| 仓位管理 | 金字塔加仓(最多4次) | 一次性建仓,无加仓 |
简单记忆:海龟问“价格有没有创历史新高?”,Dual Thrust问“今天有没有在开盘价基础上走出大行情?”
如果说海龟是“追历史新高”的趋势跟踪,那Dual Thrust就是“追开盘后大波动”的趋势跟踪——一个看长周期的位置,一个看短周期的力度。
老陈点评:
Dual Thrust的巧妙之处在于它用“两个方向的最大波动”来确定通道宽度。普通突破策略只用一个方向的波动(如ATR),而Dual Thrust分别计算上涨方向和下跌方向的最大幅度,然后取两者中的较大值。这意味着:无论市场是向上突破还是向下突破,通道宽度都能充分反映该方向的波动特征。这是“双重推力”这个名字的由来。
老王补充:
我早年做期货日内交易时,Dual Thrust是我用得最顺手的策略之一。它的好处是每天开盘前就能算好今天的上下轨,盘中只需要机械执行。但它的致命弱点是震荡日——如果当天价格在上下轨之间来回晃,一天都不会有信号,资金就闲置了。但反过来想,没信号就不交易,这恰恰是趋势跟踪的精髓——只在有行情的时候出手。
二、策略的使用范围与条件
| 维度 | 适用范围与条件 | 说明 |
|---|---|---|
| 适用市场 | 具有明显趋势特征的期货、股指、外汇、加密货币 | 日内版本适合高流动性品种;隔夜版本可应用于股票指数 |
| 品种波动性要求 | 中等以上波动,有足够的日内振幅 | 波动率过低的品种,通道难以被突破 |
| 适用周期 | 分钟级(日内版本)或日线级(隔夜版本) | 原版为日内策略,分钟K线执行 |
| 资金门槛 | 低 | 单品种即可运行,无需复杂仓位管理 |
| 不适合的市场状态 | 窄幅震荡、低波动行情 | 价格无法突破上下轨,无交易信号产生 |
原版日内规则:
- 每日收盘前平仓,不持有隔夜头寸
- 每日交易次数通常不超过3笔
- 下午2点以后不再开新仓
加密货币市场的特殊调整:
由于加密货币7×24小时交易,原版的“每日开盘价”可以改为“每8小时开盘价”或“每4小时开盘价”,以适应不同的交易时段。相应的,Range计算周期也需从“日”调整为“小时”。
隔夜版本改编:
部分交易者将Dual Thrust改编为隔夜策略,非多即空,一直保持持仓状态。这种改编适合股票指数等无法做空或只能做多的市场。
老陈点评:
原版Dual Thrust是日内策略,收盘平仓的设计让它规避了隔夜跳空风险。但如果把它改编为隔夜策略,就失去了这个保护。建议初学者先从日内版本入手,理解其逻辑后再考虑是否做隔夜改编。
老王补充:
日内版本最怕的是手续费。Dual Thrust每天可能交易1-3次,如果手续费太高,利润会被吞噬。建议选择手续费低的品种(如股指期货、商品期货主力合约)或者使用ETF(免印花税)来运行。
三、因子拆解与原理
3.1 Range(区间宽度)——波动幅度因子
Range是Dual Thrust策略最核心的因子,它描述了“过去N天的价格波动有多大”。
计算公式:
HH = 过去N日最高价的最大值 LC = 过去N日收盘价的最低价 HC = 过去N日收盘价的最高价 LL = 过去N日最低价的最小值 Range = Max(HH - LC, HC - LL)
为什么取最大值?一个类比:
想象你要给一辆车设计一个“安全行驶区间”——既不能开得太快(上涨),也不能开得太慢(下跌)。你需要知道这辆车在过去几天里,向上冲得最猛的一次和向下滑得最狠的一次分别是多少。然后你取两者中更大的那个值作为安全区间的半径——因为如果你只参考较小的那个方向,另一方向一旦出现大波动,你的“安全区间”就会被瞬间突破。
HH - LC衡量的是“从最低收盘价到最高价”的上涨潜力;HC - LL衡量的是“从最低价到最高收盘价”的下跌潜力。取两者中的较大值,确保通道在波动更大的那个方向上也有足够的“缓冲空间”。
⚠️ 重要提醒:避免未来函数
在实际交易中,当日的Range需要收盘后才能计算。因此,原版Dual Thrust使用的是前N日的Range来预测今日的通道位置。在回测代码中,需要用shift(1)将Range数据整体后移一天,确保回测信号不包含未来信息。
老陈点评:
Range的本质是“过去N日最大的单方向波动幅度”。它比单纯使用ATR更精细——ATR衡量的是每日平均波动,而Range衡量的是累积波动区间。在趋势启动时,Range能更快地反映波动率的扩张。
3.2 上下轨——入场触发因子
有了Range之后,以今日开盘价为基准,分别乘以不同的系数来构建上下轨:
上轨(BuyLine)= 开盘价 + K1 × Range 下轨(SellLine)= 开盘价 - K2 × Range
K1和K2的含义:
- K1:做多触发系数(控制上轨的松紧)
- K2:做空触发系数(控制下轨的松紧)
为什么K1和K2可以不对称?
原版Dual Thrust允许K1≠K2。在A股市场(只能做多、长期向上),可以设置K1较小(上轨容易触发)、K2较大(下轨不容易触发),从而偏向做多。
K1和K2的调参指南:
| 市场特征 | K1与K2关系 | 原因 |
|---|---|---|
| 双向市场(期货、加密货币) | K1 ≈ K2(对称) | 多空机会均等 |
| 长期向上的市场(A股、美股指数) | K1 < K2(上轨更容易触发) | 偏向做多 |
| 长期向下的市场(少数商品熊市) | K1 > K2(下轨更容易触发) | 偏向做空 |
| 高波动市场 | K1、K2同时调大 | 需要更宽的通道才能过滤噪音 |
| 低波动市场 | K1、K2同时调小 | 通道太宽可能整个交易周期都无信号 |
新手建议:先从K1=K2=0.5开始,运行一段时间后根据市场表现微调。不要一上来就追求“最优参数”——那往往是过拟合的开始。
3.3 入场逻辑——突破交易
| 信号 | 触发条件 | 操作 |
|---|---|---|
| 做多信号 | 价格向上突破上轨 | 平空开多(或直接开多) |
| 做空信号 | 价格向下突破下轨 | 平多开空(或直接开空) |
原版双向交易规则:
- 突破上轨时:如果持有空仓,先平空再开多;如果没有仓位,直接开多
- 突破下轨时:如果持有多仓,先平多再开空;如果没有仓位,直接开空
A股单向交易改编:
- 突破上轨时:做多(买入)
- 突破下轨时:清仓(平仓)
⚠️ 信号确认方式:
- 盘中突破即入场(原版逻辑):价格一触及上轨就入场,优点是信号及时,缺点是假突破多。
- 收盘价确认后次日入场(保守版):只有收盘价站上上轨才确认信号,次日开盘入场,优点是过滤假突破,缺点是可能错过部分涨幅。
本代码采用方式1(盘中突破),更接近原版Dual Thrust。如果你偏好方式2,可以将信号条件中的High改为Close。
3.4 因子的优缺点
| 优点 | 缺点 |
|---|---|
| 思路简单,参数少(仅N、K1、K2三个参数) | 在震荡市中无信号,资金可能长期闲置 |
| 适用于多个市场和品种 | 日内版本对交易成本和滑点敏感 |
| 上下轨每日重置,适应性强 | K1、K2的参数选择对表现影响较大 |
| 可双向交易,适应牛熊市 | 原版无独立止损设计,需额外考量 |
与原版海龟的对比:
| 维度 | 海龟交易法则(第一.01) | Dual Thrust(第一.02) |
|---|---|---|
| 通道基准 | 移动最高/最低价 | 开盘价 + 波动幅度 |
| 通道更新频率 | 每日更新(滚动窗口) | 每日重置(以当日开盘价为基准) |
| 加仓机制 | 有(金字塔加仓,最多4次) | 无(一次性建仓) |
| 止损机制 | 2倍ATR追踪止损(独立止损) | 反向轨道止损(集成止损) |
| 典型持仓周期 | 数天至数周 | 日内(收盘平仓) |
止损逻辑的差异:
海龟的止损是独立的——无论通道信号如何,只要价格回撤2倍ATR就平仓。Dual Thrust的止损是集成的——平仓信号就是另一侧轨道的突破。前者更灵活(止损和入场可以独立优化),后者更简洁(一套规则管到底)。没有绝对的好坏,只有适合与否。
老王补充:
Dual Thrust没有内置独立止损,这是它和海龟最大的区别。海龟有2倍ATR追踪止损,Dual Thrust的原版是“突破反向轨道即平仓”——也就是说,你的止损就是另一侧的轨道。比如你做多后,价格跌穿下轨就平仓。这是一种“反向突破止损”,逻辑自洽但可能止损较晚。我一般会额外加一个固定比例止损(比如-2%),双重保护。
四、仓位、买卖点与风险管理
4.1 入场信号
原版双向版本(适用于期货、加密货币):
| 方向 | 触发条件 | 操作 |
|---|---|---|
| 做多 | 价格 ≥ 上轨(开盘价 + K1 × Range) | 平空开多 |
| 做空 | 价格 ≤ 下轨(开盘价 – K2 × Range) | 平多开空 |
A股单向版本(仅做多):
| 信号 | 触发条件 | 操作 |
|---|---|---|
| 买入 | 价格 ≥ 上轨 | 买入(如已有仓位则不加仓) |
| 卖出 | 价格 ≤ 下轨 | 清仓离场 |
执行方式:使用分钟K线实时监测,一旦触发立即以市价成交。
4.2 仓位管理
Dual Thrust的仓位管理比海龟简单得多——一次性建仓,不加仓。
- 固定仓位法:每笔交易投入固定比例资金(如总资金的10%-20%)
- 风险比例法:根据ATR或预期亏损调整仓位
老陈点评:
Dual Thrust不加仓的设计降低了资金管理的复杂度,但也意味着它无法像海龟那样在趋势中逐步放大仓位。这是一个权衡:简单 vs 收益弹性。对于初学者,简单更重要。
4.3 止损设计
原版无止损:是漏洞还是特征?
原版Dual Thrust没有独立的止损机制——它的“止损”就是反向突破另一侧轨道时平仓。这意味着:
- 优点:逻辑自洽,入场和出场使用同一套规则,不会出现“入场用通道、出场用固定百分比”的逻辑割裂。
- 缺点:在剧烈波动中,反向突破轨道可能来得太晚,导致单笔亏损过大。
策哥的建议:如果你做的是日内交易,原版的反向轨道止损已经够用——因为日内波动的幅度有限。但如果你做的是隔夜版本,强烈建议加入额外的固定比例止损或ATR止损,因为隔夜跳空可能直接跳过你的反向轨道。
| 止损类型 | 设定方法 | 说明 |
|---|---|---|
| 反向轨道止损 | 做多后价格跌破下轨即平仓 | 原版逻辑,与入场逻辑对称 |
| 固定比例止损 | 入场价下方1%-2%(做多) | 简单有效,适合日内交易 |
| ATR倍数止损 | 入场价 ± 0.5×ATR | 湘财证券研报中使用的参数 |
4.4 止盈设计
| 出场方式 | 设定方法 | 适用场景 |
|---|---|---|
| 反向轨道止盈 | 价格触及另一侧轨道时平仓 | 原版逻辑 |
| 固定盈亏比 | 止损的1.5-2倍(如止损1%,止盈2%) | 湘财证券研报推荐 |
| 收盘平仓 | 每日收盘前平仓所有持仓 | 日内版本必选 |
| 时间止损 | 下午2点后不再开新仓 | 日内版本常用 |
老王补充:
我个人的经验是:Dual Thrust的止盈不要贪。日内趋势的持续时间有限,设置1.5-2倍的盈亏比是比较合理的。如果设置太大(比如3倍以上),可能很多交易都无法达到止盈,最后只能靠反向轨道止损离场,盈亏比反而更差。
4.5 跳空处理
如果当日开盘价相对于前一日收盘价的跳空幅度超过1倍ATR,建议暂停当日的Dual Thrust交易——因为跳空已经消耗了部分趋势动能,继续使用原定通道可能会导致入场点位不佳。
五、策略的来历、设计者与趣闻
Dual Thrust由Michael Chalek在20世纪80年代开发。在量化交易的世界里,有些策略的发明者大名鼎鼎(比如威尔德的RSI、布林格的布林带),有些则像幽灵一样低调——Michael Chalek显然属于后者。你几乎找不到他的照片、采访或任何个人资料。但这也许正是一个策略开发者的最高境界:策略比你出名。
Dual Thrust在1980年代至1990年代的程序化交易早期时代就已被广泛使用,是海外top10交易系统之一。它曾被《Future Truth》杂志评为最赚钱的策略之一——2009年《Future Truth》评出的标普500十大交易系统中,Dual Thrust以414%的收益率(3倍杠杆)排名第一。在自动化交易排名中,该策略至今仍稳居前列(有资料显示曾排名第二)。
注:个别资料将Dual Thrust的发明归功于Larry Williams,但主流观点认为其开发者为Michael Chalek。
“Dual Thrust”这个名字的深层含义:
“Dual”(双重)指的是策略同时考虑了两个方向的波动——上涨和下跌。“Thrust”(推力)指的是价格突破通道时的爆发力。
但更深一层:Dual Thrust的“双重”还体现在两个层面的对比上:
- 方向对比:比较上涨方向和下跌方向哪个波动更大
- 时间对比:用过去N天的波动来预测今天的突破位置
这种“双重对比”的设计,让Dual Thrust比单方向突破策略(如只追新高)更具适应性。
趣闻:Dual Thrust的原始参数非常简单——N通常取4或5天,K1和K2通常取0.5左右。但有趣的是,很多交易者发现,将K1和K2设置为不对称的值(如K1=0.8,K2=2)在A股市场中表现更好。这是因为A股长期向上,做多信号应该比做空信号更容易触发。
另一个有趣的现象:Dual Thrust在股指期货上的表现通常优于商品期货。有研究显示,在改进后的Dual Thrust策略中,最大回撤可以控制在2%以内。但在商品期货上,需要对不同品种分别优化参数。
⚠️ 参数优化的陷阱:
Dual Thrust只有三个参数(N、K1、K2),看起来很容易优化。但正因为它参数少,每一个参数的变化都会对结果产生巨大影响。很多人在回测中找到了“完美参数”,一到实盘就失效——因为那个参数恰好拟合了历史行情中的某一段特定波动。
策哥的建议:与其追求“最优参数”,不如追求“稳健参数”——即在不同的市场环境下都能表现中等的参数。比如N取4-6、K1和K2取0.5-0.7,这个范围内的参数在多数市场中都不会太差。
老陈点评:
Dual Thrust的持久生命力说明了“简单策略”的价值。它没有复杂的数学公式,没有机器学习,只用了三个参数(N、K1、K2)就构建了一个完整的交易系统。这提醒我们:在量化交易中,复杂不等于有效,简单不等于无效。
老王补充:
我认识一个老交易员,十年如一日只用Dual Thrust做股指期货,每年稳定盈利。他的秘诀不是优化参数,而是严格遵守纪律——每天开盘前算好上下轨,盘中信号出现就执行,收盘前必须平仓。他说:“Dual Thrust不会让你暴富,但它能让你活着。”
六、Python回测示例
以下代码演示Dual Thrust策略在沪深300指数上的回测。采用日内版本(收盘平仓),包含固定比例止损止盈。
import pandas as pd
import numpy as np
import yfinance as yf
from datetime import datetime
# 若yfinance无法获取数据,可使用akshare或分钟级数据:
# 分钟级数据获取:df = yf.download('000300.SS', start='2020-01-01', end='2025-01-01', interval='1h')
# 注意:yfinance的分钟级数据可能不完整,建议使用专业数据源
def dual_thrust_strategy(data,
lookback=4, # 对应【因子3.1:Range计算周期】
k1=0.5, # 对应【因子3.2:上轨系数】
k2=0.5, # 对应【因子3.2:下轨系数】
stop_loss_pct=0.02, # 止损比例(2%)
take_profit_pct=0.04, # 止盈比例(4%)
intraday=True): # 是否日内版本(收盘平仓)
"""
Dual Thrust策略(带固定止损止盈)
参数:
data: 必须包含 'Open', 'High', 'Low', 'Close' 列
lookback: Range计算的回看周期
k1: 上轨系数(做多触发)
k2: 下轨系数(做空触发)
stop_loss_pct: 止损比例
take_profit_pct: 止盈比例
intraday: 是否日内版本(True=收盘平仓)
返回:添加了持仓和净值的DataFrame
"""
df = data.copy()
# 1. 计算Range(使用前N日数据,避免未来函数)
# HH: 前N日最高价的最大值
df['HH'] = df['High'].rolling(lookback).max().shift(1)
# LC: 前N日收盘价的最低价
df['LC'] = df['Close'].rolling(lookback).min().shift(1)
# HC: 前N日收盘价的最高价
df['HC'] = df['Close'].rolling(lookback).max().shift(1)
# LL: 前N日最低价的最小值
df['LL'] = df['Low'].rolling(lookback).min().shift(1)
# Range = Max(HH - LC, HC - LL)
df['Range'] = np.maximum(df['HH'] - df['LC'], df['HC'] - df['LL'])
# 2. 计算上下轨(以当日开盘价为基准)
df['Upper'] = df['Open'] + k1 * df['Range']
df['Lower'] = df['Open'] - k2 * df['Range']
# 3. 生成入场信号(盘中突破)
df['Long_Signal'] = (df['High'] >= df['Upper']) & (df['High'].shift(1) < df['Upper'].shift(1))
df['Short_Signal'] = (df['Low'] <= df['Lower']) & (df['Low'].shift(1) > df['Lower'].shift(1))
# 4. 模拟持仓(带止损止盈)
df['Position'] = 0
df['Entry_Price'] = np.nan
position = 0
entry_price = 0.0
entry_price_trigger = 0.0 # 记录触发价格(用于计算入场价)
for i in range(1, len(df)):
# 日内版本:如果是最后一天,收盘平仓
if intraday and i == len(df) - 1:
if position != 0:
position = 0
entry_price = 0.0
entry_price_trigger = 0.0
if position != 0:
# 计算盈亏比例(用当日收盘价估算)
if position == 1:
pnl = (df['Close'].iloc[i] - entry_price) / entry_price
else: # position == -1
pnl = (entry_price - df['Close'].iloc[i]) / entry_price
# 止损或止盈触发
if pnl <= -stop_loss_pct or pnl >= take_profit_pct:
position = 0
entry_price = 0.0
entry_price_trigger = 0.0
# 反向信号平仓(价格突破另一侧轨道)
elif position == 1 and df['Close'].iloc[i] <= df['Lower'].iloc[i]:
position = 0
entry_price = 0.0
entry_price_trigger = 0.0
elif position == -1 and df['Close'].iloc[i] >= df['Upper'].iloc[i]:
position = 0
entry_price = 0.0
entry_price_trigger = 0.0
else:
# 无持仓时,检查入场信号
# 入场价格使用触发价格(上轨或下轨),而非开盘价
if df['Long_Signal'].iloc[i]:
position = 1
entry_price = df['Upper'].iloc[i] # 以触发价入场
entry_price_trigger = df['Upper'].iloc[i]
elif df['Short_Signal'].iloc[i]:
position = -1
entry_price = df['Lower'].iloc[i] # 以触发价入场
entry_price_trigger = df['Lower'].iloc[i]
df.loc[df.index[i], 'Position'] = position
if position != 0:
df.loc[df.index[i], 'Entry_Price'] = entry_price
# 5. 计算每日收益率和净值
df['Returns'] = df['Position'].shift(1) * (df['Close'] - df['Close'].shift(1)) / df['Close'].shift(1)
df['Net_Value'] = (1 + df['Returns']).cumprod()
# 6. 统计指标
total_return = (df['Net_Value'].iloc[-1] - 1) * 100
max_drawdown = ((df['Net_Value'].cummax() - df['Net_Value']) / df['Net_Value'].cummax()).max() * 100
# 交易统计
trades = df[df['Position'] != df['Position'].shift(1)]
trade_count = len(trades[trades['Position'] != 0]) // 2 # 粗略估算
print(f"总收益率:{total_return:.2f}%")
print(f"最大回撤:{max_drawdown:.2f}%")
print(f"估算交易次数:{trade_count}")
return df
if __name__ == "__main__":
# 下载沪深300指数数据(日线)
df_300 = yf.download('000300.SS', start='2020-01-01', end='2025-01-01')
# 运行策略
result = dual_thrust_strategy(df_300, lookback=4, k1=0.5, k2=0.5)
print(result[['Open', 'Upper', 'Lower', 'Position', 'Net_Value']].tail(10))
回测结果简要解读(以实际运行为准):
- 在趋势明显的行情中(如2020年3月后的反弹),Dual Thrust能较早捕捉到突破信号
- 在震荡行情中,信号较少,资金利用率较低,但避免了频繁止损
- 建议读者尝试不对称参数(如K1=0.8, K2=2),观察在A股市场中的表现差异
代码说明:
本代码为日线级别的简化版回测。原版Dual Thrust是分钟级日内策略,需要在分钟K线上运行。日线回测无法精确模拟日内突破的时机,仅供参考。建议读者使用分钟数据进行更精确的回测。
老陈点评:
回测时需要注意:Dual Thrust的信号是基于“盘中价格突破轨道”触发的,使用日线数据(只有开盘、最高、最低、收盘四个价格)会丢失很多盘中细节。建议使用1小时或30分钟K线进行回测,更贴近实盘。
老王补充:
实盘中,Dual Thrust的执行非常依赖交易速度。如果信号出现后你犹豫了几分钟才下单,价格可能已经跑远了。建议使用程序化交易自动执行,或者至少设置好条件单。
七、本章小结与思考题
小结
| 项目 | 核心要点 |
|---|---|
| 策略类型 | 趋势跟踪,开盘区间突破 |
| 核心公式 | Range = Max(HH-LC, HC-LL);上轨 = 开盘价 + K1×Range;下轨 = 开盘价 – K2×Range |
| 适用行情 | 有明显日内趋势的行情 |
| 核心优势 | 思路简单,参数少,适用于多个市场 |
| 最大风险 | 震荡市中无信号(资金闲置)或频繁假突破 |
| 资金门槛 | 低,单品种即可运行 |
Dual Thrust与海龟交易法则(第一.01)同属趋势跟踪策略,但两者的定位截然不同:
| 维度 | 海龟交易法则(第一.01) | Dual Thrust(第一.02) |
|---|---|---|
| 时间框架 | 日线级别,数天至数周 | 分钟级别,日内交易 |
| 通道基准 | 移动最高/最低价 | 开盘价 + 波动幅度 |
| 仓位管理 | 金字塔加仓(最多4次) | 一次性建仓 |
| 止损机制 | 2倍ATR追踪止损(独立) | 反向轨道止损(集成) |
| 适用资金 | 中等偏上(需多品种分散) | 低(单品种即可) |
Dual Thrust的通道每天开盘后重新计算,就像你每天早上重新设定当天的闹钟——不管昨天发生了什么,今天都是新的开始。这种“每日重置”机制让它对市场环境的变化非常敏感:昨天波动大,今天的通道就宽;昨天波动小,今天的通道就窄。它不会因为昨天的大行情而今天继续追高,也不会因为昨天的低迷而今天不敢出手。
如果说海龟是“重型坦克”——威力大但需要充足的资金和耐心;那Dual Thrust就是“轻型骑兵”——灵活、快速、适合小资金快速周转。
老陈总结:
Dual Thrust的价值在于它的“每日重置”机制。每天开盘后,上下轨重新计算,策略自动适应新的市场环境。这种自适应特性让它比固定参数的突破策略更具鲁棒性。但要注意:自适应不等于万能,在低波动环境中,它依然会失效。
老王总结:
我个人的建议是:Dual Thrust最适合作为多策略组合中的一员,而不是唯一的策略。你可以把它和均值回归策略(如布林带)搭配使用——趋势来了用Dual Thrust赚钱,震荡来了用布林带赚钱。不要把鸡蛋放在一个篮子里,也不要把资金押在一个策略上。
💡 思考题
- Dual Thrust的Range计算中,为什么要取
Max(HH-LC, HC-LL)而不是直接用ATR?两者有什么本质区别? - 在A股市场(只能做多),如果将Dual Thrust改编为单向版本,K1和K2应该如何设置?为什么?
- 原版Dual Thrust没有内置独立止损,你认为这是优点还是缺点?如果让你加一个止损,你会怎么设计?
- (展望题) Dual Thrust的“每日重置”机制让它对短期波动非常敏感。如果未来市场波动率持续下降,你认为这个策略会被淘汰,还是会通过参数调整继续存活?请从策略自适应的角度分析。
八、引用/参考出处
- 湘财证券研报《金融工程:商品期货的DUALTHRUST组合优化策略》(2024-11-19) https://stock.finance.sina.com.cn/stock/go.php/vReport_Show/kind/lastest/rptid/785355181250/index.phtml
- 湘财证券研报《CTA系列专题一:商品期货的DUALTHRUST组合策略》(2024-03-28) https://stock.finance.sina.com.cn/stock/go.php/vReport_Show/kind/11/rptid/764959094841/index.phtml
- 雪球专栏《经典策略系列之Dual Thrust交易策略》:https://xueqiu.com/8287840120/65503939
- 雪球专栏《史上最赚钱的策略之一?Dual Thrust策略的原理、回测、优化与指标》:https://xueqiu.com/8346773006/295868650
- BigQuant量化平台《期货日内高频策略(Dual Thrust应用)》:https://bigquant.com/wiki/doc/Xzk3aCOkKu
图书(元信息):
- 《Trading Systems and Methods, 6th Edition》是由交易系统专家 Perry J. Kaufman 撰写的权威参考书,由 Wiley 出版社于 2019年10月 出版 。(第16章关于区间突破系统的讨论)
- 欧内斯特·陈,《量化交易:如何构建你的算法交易系统》,人民邮电出版社,2021。




















暂无评论内容