4 年实时交易平均年化收益率达 63%!
Impetus 是一款完全机械化的日间交易系统,也是少数几款能够成功交易过去几年市场行情的系统之一。该系统推荐用于 e-mini Russell 2000、德国 DAX 指数以及标准普尔 500 指数。
Impetus 可购买,也可租赁,并可由交易者直接交易,或通过选定的经纪商进行交易。
该系统于 2003 年 1 月发布,自 2003 年 2 月起由开发者进行交易。自发布以来,系统逻辑未做任何修改。
Impetus 仅有一个可优化参数,核心思想可以概括为一个简单公式:
力量 + 方向 = 趋势
系统通过一个独特计算方式来判断市场力量、价格果断移动的倾向以及市场方向。这些力量共同形成可交易的趋势。
Impetus 的特点是停留在市场中的时间非常短,通常不到 1%。它只在当日交易时段的后半段进行交易,平均每周交易约两次。
该系统由两个独立子系统组成。
第一个是常规趋势组件。当价格突破时,它会顺应当日主要趋势方向入场。
第二个系统则寻找主要趋势内部的次要反趋势波动。当价格回调并重新回归主要趋势后,再触发入场。
所有交易均使用止损单入场。所有情况下,系统都会采用随价格和波动率调整的保护性止损,并且在交易前明确最大风险。两个子系统均采用盈亏平衡止损,当交易达到一定浮盈后锁定部分收益。
注:原始绩效描述基于截至 2007 年 11 月 1 日的实际成交数据,交易 1 手合约,佣金为 4.20 美元,账户规模固定为 7,000 美元。历史表现不代表未来结果。
Impetus 基于股票市场中独特的时间和价格模式。这是观察得出的结果,而不是单纯优化出来的结果。
它最初是为标普指数设计的。不过,由于 SP / ES 在 2003 年波动率较低,Impetus 在 2003 年年中被未经修改地用于完全脱离样本的市场,也就是 e-mini Russell 2000,并于 2003 年 11 月开始实际交易。
这类样本外测试结果验证了 Impetus 的稳健性,并展示了系统在不同市场环境中的适应能力。超过 3 年的实际交易结果进一步验证了 Impetus 的规则集。
在指数交易不断变化的环境中,能够长期保持良好表现的系统并不多见。
Impetus 交易 DAX 时使用与 e-mini Russell 相同的参数,并且在德国 DAX 指数上表现优异。DAX 与 Russell 的权益曲线相关性仅为 0.20,这使两者具备较好的组合互补性。
截至 2007 年 11 月 1 日,Impetus DAX 每份合约收益超过 13,000 欧元。
Impetus 也可交易标准普尔 500 指数。通过对单一入场参数进行微调,Impetus 在标准合约的 S&P 500 指数上同样表现优异。其与迷你 Russell 指数的低相关性约为 0.21,也使两者具备组合价值。
截至 2007 年 11 月 1 日,Impetus SP 每合约收益超过 27,000 美元。
使用时,需要打开 5 分钟图表,并在其中插入一个隐藏的日线图。也就是说,系统同时需要日线数据和 5 分钟数据。
以下源码仅适用于 MultiCharts 平台,其他平台请自行移植。
为方便导入 135 编辑器,下面不使用传统代码块,而采用“代码清单”形式展示。导入后可统一设置为灰底、等宽字体或引用样式。
1. 策略参数定义
【代码清单:参数与变量】
01 Inputs: TIMEOFFSET(0);02 // 时间偏移量,单位为分钟,用于调整交易时段0304 Variables:05 LOCKPTS(1),06 // 盈利锁定点数0708 RETRACESELL(0),09 // 回撤卖出触发价1011 RETRACEBUY(0),12 // 回撤买入触发价1314 SRETRACE(0),15 // 卖出回撤信号标志,1 表示触发1617 LRETRACE(0),18 // 买入回撤信号标志,1 表示触发1920 ENTRIES(0),21 // 当日交易次数计数器2223 LIMPETUS(0),24 // 买入动量信号标志,1 表示触发2526 IMPETUSBUY(0),27 // 买入动量触发价2829 SIMPETUS(0),30 // 卖出动量信号标志,1 表示触发3132 IMPETUSSELL(0),33 // 卖出动量触发价3435 VALUE11(0);36 // 基准价格,使用 DATA2 的收盘价
说明:这一部分主要定义系统参数和状态变量。TIMEOFFSET 用于调整交易时段,其余变量用于记录回撤信号、动量信号、触发价格、当日交易次数以及基准价格。
2. 初始化与每日重置
【代码清单:初始化逻辑】
01 // 初始化基准价格 VALUE1102 IF CURRENTBAR = 1 THEN VALUE11 = CLOSE DATA(2);03 // 首个 K 线初始化0405 IF DATE > DATE[1] THEN VALUE11 = CLOSE DATA(2);06 // 新交易日重置基准价格
【代码清单:每日重置信号】
01 // 每日开盘时重置所有交易信号02 IF DATE > DATE[1] THEN BEGIN03 SRETRACE = 0;04 LRETRACE = 0;05 RETRACEBUY = 0;06 RETRACESELL = 0;07 ENTRIES = 0;08 LIMPETUS = 0;09 IMPETUSBUY = 0;10 SIMPETUS = 0;11 IMPETUSSELL = 0;12 END;
说明:系统在新交易日开始时,会重置前一日的交易状态,包括回撤信号、动量信号、触发价格以及交易次数。
3. 主交易时段
【代码清单:主交易时段】
01 // 主交易时段:13:30 至 15:0002 IF TIME >= 1330 + TIMEOFFSET AND TIME < 1500 + TIMEOFFSET THEN BEGIN0304 // 空仓且当日尚未交易时执行05 IF MARKETPOSITION = 0 AND ENTRIES = 0 THEN BEGIN
说明:Impetus 只在指定的日内交易窗口中寻找机会,并且限制当日交易次数,避免过度交易。
4. 卖出回撤条件
【代码清单:卖出回撤信号 S1】
01 // 卖出回撤条件02 // DATA2 低点不创新低03 // DATA2 高点低于 ID 区间中点04 // 跌幅超过 1.3%05 IF LOW DATA(2) >= LOW[1] DATA(2)06 AND HIGH DATA(2) < (IDHigh + IDLow) * 0.507 AND VALUE11 - IDLow >= 0.013 * VALUE11 THEN BEGIN0809 SRETRACE = 1;10 // 触发卖出回撤信号1112 RETRACESELL = LOW;13 // 记录卖出回撤触发价格1415 END;1617 // 执行卖出回撤交易 S118 IF SRETRACE = 1 AND LOW > IDLow THEN19 SELLSHORT ("S1") RETRACESELL - 0.05 STOP;
说明:S1 属于回撤型做空逻辑。系统先判断日线或高一级数据是否满足特定结构条件,然后在价格向下触发时使用止损单做空。
5. 买入回撤条件
【代码清单:买入回撤信号 L1】
01 // 买入回撤条件02 // DATA2 高点不创新高03 // DATA2 低点高于 ID 区间中点04 // 涨幅超过 1.3%05 IF HIGH DATA(2) <= HIGH[1] DATA(2)06 AND LOW DATA(2) > (IDHigh + IDLow) * 0.507 AND IDHigh - VALUE11 >= 0.013 * VALUE11 THEN BEGIN0809 LRETRACE = 1;10 // 触发买入回撤信号1112 RETRACEBUY = HIGH;13 // 记录买入回撤触发价格1415 END;1617 // 执行买入回撤交易 L118 IF LRETRACE = 1 AND HIGH < IDHigh THEN19 BUY ("L1") RETRACEBUY + 0.05 STOP;
说明:L1 属于回撤型做多逻辑。系统在主要方向满足条件后,等待价格重新向上触发,再以止损单方式买入。
6. 动量突破条件
【代码清单:13:45 后动量突破】
01 // 13:45 后启动动量突破条件02 IF TIME >= 1345 + TIMEOFFSET THEN BEGIN0304 // 买入动量:涨幅超过 1.3%05 IF IDHigh - VALUE11 >= 0.013 * VALUE11 THEN BEGIN0607 LIMPETUS = 1;08 // 触发买入动量信号0910 IMPETUSBUY = IDHigh;11 // 记录突破高点1213 END;1415 // 执行买入动量交易 L216 IF LIMPETUS = 1 THEN17 BUY ("L2") IMPETUSBUY + 0.05 STOP;1819 // 卖出动量:跌幅超过 1.3%20 IF VALUE11 - IDLow >= 0.013 * VALUE11 THEN BEGIN2122 SIMPETUS = 1;23 // 触发卖出动量信号2425 IMPETUSSELL = IDLow;26 // 记录突破低点2728 END;2930 // 执行卖出动量交易 S231 IF SIMPETUS = 1 THEN32 SELLSHORT ("S2") IMPETUSSELL - 0.05 STOP;3334 END;35 END;
说明:L2 和 S2 是动量突破逻辑。13:45 之后,如果价格相对基准价格出现足够幅度的上涨或下跌,系统会记录突破价,并通过止损单触发顺势入场。
7. 空头持仓止损
【代码清单:空头止损逻辑】
01 // 空头持仓止损逻辑02 IF MARKETPOSITION < 0 THEN BEGIN0304 // S1 策略止损05 // 取 DATA2 高点 + 0.1 点,与入场价 + 0.9% 的较大值06 BUYTOCOVER ("SX1") ENTRY("S1")07 MAXLIST(HIGH DATA(2) + 0.1, ENTRYPRICE + (0.009 * VALUE11)) STOP;0809 // S2 策略止损10 // 取 DATA2 高点 + 0.1 点,与入场价 + 0.1% 的较大值11 BUYTOCOVER ("SX2") ENTRY("S2")12 MAXLIST(HIGH DATA(2) + 0.1, ENTRYPRICE + (0.001 * VALUE11)) STOP;1314 END;
说明:空头持仓根据不同入场逻辑使用不同止损规则。S1 和 S2 的止损幅度不同,体现了回撤型入场与动量型入场在风险控制上的差异。
8. 多头持仓止损
【代码清单:多头止损逻辑】
01 // 多头持仓止损逻辑02 IF MARKETPOSITION > 0 THEN BEGIN0304 // L1 策略止损05 // 取 DATA2 低点 - 0.1 点,与入场价 - 0.9% 的较小值06 SELL ("LX1") ENTRY("L1")07 MINLIST(LOW DATA(2) - 0.1, ENTRYPRICE - (0.009 * VALUE11)) STOP;0809 // L2 策略止损10 // 取 DATA2 低点 - 0.1 点,与入场价 - 0.1% 的较小值11 SELL ("LX2") ENTRY("L2")12 MINLIST(LOW DATA(2) - 0.1, ENTRYPRICE - (0.001 * VALUE11)) STOP;1314 END;15 END;
说明:多头持仓同样根据 L1 和 L2 两种入场方式分别设置止损。L1 使用较宽的保护性止损,L2 使用更紧的动量型止损。
9. 收盘前强制平仓
【代码清单:收盘前退出】
01 // 收盘前强制平仓时段:15:00 至 15:1502 IF TIME >= 1500 + TIMEOFFSET AND TIME <= 1515 + TIMEOFFSET THEN BEGIN0304 SELL ("LX3") LOW - 0.05 STOP;05 // 多头平仓0607 BUYTOCOVER ("SX3") HIGH + 0.05 STOP;08 // 空头平仓0910 END;
说明:Impetus 是日内交易系统,因此会在收盘前设置强制退出逻辑,避免隔夜风险。
10. 盈利保护机制
【代码清单:多头盈利保护】
01 // 多头盈利保护02 // 浮盈达到 0.8% 后,锁定 1 点利润03 IF MARKETPOSITION > 0 THEN BEGIN0405 IF MaxTradeHigh - ENTRYPRICE >= 0.008 * VALUE11 THEN06 SELL ("LX4") ENTRYPRICE + LOCKPTS STOP;0708 END;
【代码清单:空头盈利保护】
01 // 空头盈利保护02 // 浮盈达到 0.8% 后,锁定 1 点利润03 IF MARKETPOSITION < 0 THEN BEGIN0405 IF ENTRYPRICE - MinTradeLow >= 0.008 * VALUE11 THEN06 BUYTOCOVER ("SX4") ENTRYPRICE - LOCKPTS STOP;0708 END;
说明:当持仓产生一定浮盈后,系统会将止损位置移动到能够锁定部分利润的位置。这相当于一种盈亏平衡或利润保护机制。
11. 交易次数计数
【代码清单:交易计数】
01 // 交易计数02 IF MARKETPOSITION <> 0 THEN ENTRIES = ENTRIES + 1;
说明:该逻辑用于记录当日是否已经发生交易,配合前面的 ENTRIES 条件,避免系统在同一天内反复开仓。
从整体结构来看,Impetus 是一个典型的机械化日内交易系统。
它主要包含以下几个核心部分:
第一,基准价格判断。系统使用 DATA2 的收盘价作为基准价格,并在每个交易日重新初始化。
第二,时间窗口过滤。系统并不全天交易,而是集中在 13:30 至 15:00 之间寻找机会。
第三,回撤型入场。系统通过 S1 和 L1 捕捉主要趋势中的次级回撤,当价格重新回归主要方向时触发入场。
第四,动量型入场。系统通过 S2 和 L2 捕捉日内动量突破,在价格相对基准价格出现明显变化后顺势入场。
第五,保护性止损。不同入场逻辑对应不同止损规则,回撤交易和动量交易的风险控制并不完全相同。
第六,盈利保护。当浮盈达到一定幅度后,系统会锁定部分利润,防止盈利交易重新变成亏损。
第七,收盘前退出。作为日内系统,Impetus 不承担隔夜风险,收盘前会主动退出持仓。
虽然原始资料中给出了较亮眼的历史表现,但这些结果都建立在特定时间、特定市场、特定手续费和滑点假设之上。
实际使用时,需要特别注意以下几点:
不同品种的波动特征不同,不能直接套用参数。
不同交易时段的流动性不同,信号效果可能发生变化。
回测必须考虑手续费、滑点和成交规则。
样本内表现优秀,不代表样本外也能稳定盈利。
日内系统对数据质量和执行速度要求更高。
更稳妥的做法是,先在历史数据中复现逻辑,再进行样本外测试,然后做模拟盘验证,最后再考虑是否用于真实交易。
Impetus 的核心思想并不复杂:在特定时间窗口内,结合价格力量和市场方向,寻找可以交易的趋势机会。
它有两个值得学习的地方。
第一,它不是全天候频繁交易,而是只在系统认为更有优势的时间段出手。
第二,它不是只看入场信号,而是同时设计了止损、盈利保护、交易次数限制和收盘退出机制。
这也是一个成熟机械化交易系统应该具备的基本框架。
当然,任何经典系统都不能简单照搬。真正有价值的,不是迷信历史收益率,而是理解它背后的结构:如何定义趋势,如何等待触发,如何限制风险,以及如何退出。
本文仅用于策略学习和研究交流,不构成任何投资建议。欢迎有兴趣的朋友在更多品种、周期和市场环境中进行回测,以更深入理解 Impetus 系统的特点和适用边界。
夜雨聆风