Indicators & Signals

vectorbt 指标与信号:双均线策略与交叉信号生成

策略研究真正卡人的环节不是写策略,而是把行情稳定地转成可回测的买卖信号。这套框架用 vbt.MA.run 这类访问器算指标,用 crossed_above / crossed_below 判断序列交叉,再交给 Portfolio.from_signals 回测。本页以双均线为例,把「指标 → 信号 → 回测」这条链路拆成可逐步验证的步骤,并说明指标与参数该怎么选。

指标:vbt.MA / RSI / MACD / BBANDS信号:crossed_above / crossed_below回测:Portfolio.from_signals
MA.run 算指标
crossed_above 出信号
shift(1) 防前视
from_signals 回测
指标 → 信号 → 回测四步示意(schematic);双均线完整代码见正文,参数与默认值以官方 API 文档为准。
Steps

vectorbt 双均线策略怎么做?从指标到回测五步

vectorbt 的双均线五步按顺序做,每步都给真实代码、一句话说明和可验证的预期结果;命令与参数取值以官方文档和实际解释器提示为准。

  1. 1. 准备一段价格序列

    指标和信号都挂在 pandas 对象上,所以首先要拿到一列收盘价。用内置数据访问器可以直接下载,也可以换成自备 CSV(见数据接入页)。

    import vectorbt as vbt
    
    price = vbt.YFData.download('AAPL', start='2023-01-01').get('Close')
    print(price.tail())

    预期:打印出末尾若干行「日期 → 收盘价」。若这一步就报网络类错误,说明数据源在当前网络不可达,先换成本地 CSV 或国内数据源再继续;能否下载到数据与数据源可用性有关,与指标逻辑无关。

  2. 2. 计算快慢两条均线

    同一套访问器可以对同一条价格序列跑多次,得到不同窗口的均线;两条均线的差与交叉,就是双均线策略的全部信息。

    fast = vbt.MA.run(price, 10).ma
    slow = vbt.MA.run(price, 30).ma

    预期:得到两条与价格等长的序列,窗口越大,开头缺失值越多(10 日均线前 9 根为空,30 日均线前 29 根为空)。缺失值不参与后续布尔判断,这是后面要留意的地方。

  3. 3. 用交叉判断生成买卖信号

    交叉判断返回布尔序列:上穿为 True 的位置当作买入信号,下穿为 True 的位置当作卖出信号。先数一下 True 的个数,可以快速判断信号频率是否合理。

    entries = fast.vbt.crossed_above(slow)
    exits = fast.vbt.crossed_below(slow)
    
    print(entries.sum(), exits.sum())

    预期:两个整数,通常远小于 bar 总数——若一年内信号上百次,说明窗口太小或标的噪声太大,实盘会被手续费吃掉,建议回到本页参数表重新选窗口。

  4. 4. 信号后移一根 bar,堵住前视偏差

    当天收盘才能算出当天的均线,如果直接用当天信号在当天成交,等于用收盘价"预知"了信号。把信号整体后移一根 bar,才符合「收盘后决策、下一根 bar 执行」的实际情况。

    entries = entries.shift(1).astype(bool)
    exits = exits.shift(1).astype(bool)

    预期:信号位置整体后移一格。注意 shift 会产生缺失值,必须转成布尔类型再回测,否则会出现类型或缺失值相关的报错。

  5. 5. 交给组合回测并查看绩效

    把价格、买入信号、卖出信号一起交给组合回测入口,就能得到净值、回撤与各项绩效统计;需要手续费和滑点时可以继续加参数(取值以官方 API 文档为准)。

    pf = vbt.Portfolio.from_signals(price, entries, exits, fees=0.001)
    print(pf.stats())

    预期:返回一个组合对象,并打印出「指标名 → 取值」的统计表。字段名称与计算口径以官方实现输出为准,不同版本可能增加或调整字段;回测结果只反映历史区间表现,不构成投资建议。

写代码之外的两件事:一是口径要固定——手续费、滑点、成交价假设一旦定下就不要中途更改,否则不同参数之间不可比;二是信号逻辑要能被复述——如果你无法用一句话说清「什么条件买、什么条件卖」,后面的参数扫描只会把噪声调成"看起来很好"的曲线。
Indicators

vectorbt 常用指标与交叉信号怎么对照?

下表按 vectorbt 里「先有指标、再有信号」的顺序整理,关键参数一列写的是常见起点而不是固定默认值——各项指标的默认窗口与实现细节以官方 API 文档为准。

指标 / 工具作用关键参数适用场景注意点
移动均线 MA(vbt.MA.run)平滑价格,刻画趋势方向窗口长度(如 10 / 30)趋势跟随、双均线交叉滞后指标,窗口越大转折越迟;震荡行情里交叉频繁失效
布林带 BBANDS(vbt.BBANDS.run)用波动带宽给出价格相对位置窗口长度与带宽倍数超买超卖、波动收缩与突破带宽随波动放大,区间震荡与单边行情下的解读完全不同
RSI(vbt.RSI.run)把涨幅与跌幅折算成 0–100 的动量值周期长度、超买超卖阈值震荡区间反转、动量强弱判断强势单边行情里会长时间停留在超买或超卖区,别当反向信号硬用
MACD(vbt.MACD.run)用快慢均线差与信号线判断动量转折快线、慢线、信号线周期趋势转折确认、动量背离观察本质仍是均线组合,噪声放大时金叉死叉同样会密集出现
交叉判断(crossed_above / crossed_below)判断一条序列是否上穿或下穿另一条无(两条序列即可)均线交叉、指标与阈值线交叉返回布尔序列,缺失值位置恒为 False,需自行确认是否合理
自定义指标(vbt.Indicator 子类化)把自有算法接进同一套向量化流程自定研报因子、特殊规则指标继承内置指标基类或先用 pandas/NumPy 算好,两种做法得到的都是可回测序列
第三方指标(TA-Lib / Pandas TA,经可选集成扩展)直接调用成熟技术指标库随第三方库定义需要大量现成指标、避免重复造轮子属于可选集成扩展,安装时最常卡在底层 C 库;这些库的许可以其各自仓库为准
信号频率统计评估信号是否可用统计口径自定参数筛选前的一道体检信号过多意味着成本吞噬,过少意味着样本不足,两者都不能直接进入参数寻优
使用顺序:先确定要回答什么问题(趋势、反转还是突破),再选一到两个指标,最后才调参数。反过来做——先扫参数再挑解释——几乎必然过拟合。
Ecosystem

vectorbt 指标生态与第三方集成有哪些?

vectorbt 的指标只是研究链路的一环,能不能把指标、绩效与图表串起来,才决定这套流程是否值得长期用。

内置指标

均线、布林带、RSI、MACD 等常用指标以访问器形式挂载,调用后得到带属性的结果对象(如均线对象的均线序列),可直接参与后续布尔运算与回测。具体支持清单与参数命名以官方 API 文档为准,不同版本可能增补。

自定义指标

研报里的非标准因子往往没有现成实现,这时可以继承内置指标基类自定义,或先用 pandas / NumPy 手工算好再接入信号流程。两种方式产出的都是与价格等长的序列,后续步骤完全一致,迁移成本很低。

第三方指标集成

需要成规模的成熟指标时,可以通过可选集成扩展接入 TA-Lib、Pandas TA 等技术指标库。这一步依赖底层 C 库与平台编译环境,是安装失败最集中的环节;装不上时可以退回内置指标继续研究,功能不受阻断。

绩效与可视化生态

组合回测的结果可以接绩效分析类库输出统计摘要与报告,图表走 Plotly 交互式渲染,在 Jupyter 里内联显示最顺手。另有数据下载、绘图、自动化等模块与第三方库配合使用,模块清单以官方文档目录为准。

边界说明:生态中的第三方库与商业版组件各有独立许可与授权方式,本页只做技术链路说明,不构成对任何第三方交付内容的承诺;具体可用性请以官方 README、文档与各自仓库的许可文件为准。
Signals

vectorbt 信号生成方法有哪些?清单

vectorbt 里指标算完只是原料,下面这些方法才是把原料变成可执行信号的常见套路。

方法作用适用场景注意点
序列交叉判断判断两条序列的上下穿关系均线交叉、指标与阈值线交叉交叉点数量与窗口强相关,先统计频率再决定是否采用
布尔条件组合用与、或、非把多个条件拼成一个信号趋势过滤 + 动量确认条件越多信号越少,容易把有效样本一起筛掉
阈值比较指标越过固定水平即触发超买超卖、波动率区间判断固定阈值在不同标的、不同波动环境下不可直接套用
截面排名在同一时点对所有标的横向排序多标的选股与轮动排名要求所有标的指标口径一致,缺失值处理方式必须统一
信号映射与分组把信号映射成不同规模、方向或分组分批建仓、多空对冲映射规则一旦引入,回测结果对规则的敏感性会显著上升
信号分布分析统计信号频率、胜率与盈亏分布参数筛选前的可行性判断这是筛选环节而不是优化环节,先排除不可用信号能省下大量算力
信号后移(shift 一根 bar)让信号在下一根 bar 生效所有基于收盘数据的日线策略后移后产生的缺失值需转为布尔类型,否则回测入口会拒绝或报错
与回测入口的关系:信号最终都要落到组合回测入口(买入信号 / 卖出信号两组布尔序列,或进一步转成订单序列)。信号本身的写法千变万化,但只要输出的是布尔序列,就能接进同一套回测流程,这也是这套框架把指标与策略解耦的关键。
Params

vectorbt 双均线参数怎么选?

vectorbt 的均线参数没有普适的较优解,只有「与你研究的标的和周期是否匹配」。下表给的是常见起点与判断依据,真正结论要用样本外回测验证。

参数 / 做法常见取值适合的行情注意点
短线组合(快 / 慢)5 / 20 量级波动大、节奏快的标的信号密集,手续费与滑点会吃掉大部分理论收益
中短线组合10 / 30 量级中短周期、想兼顾灵敏与稳定最常用的默认起点,但仍需配合趋势或量能过滤
长线组合20 / 60 量级趋势明显、噪声较小的行情信号少、转折滞后,样本内交易笔数可能不足以下结论
均线加权方式以官方 API 支持的加权选项为准希望近期价格权重更高的研究不同加权方式结果差异明显,比较时必须固定同一口径
参数搜索方式网格组合扫描不确定参数区间、需要看参数敏感度关注参数邻域是否稳定,而不是单点极值——孤立的高点通常是过拟合
样本切分训练段 + 样本外段所有打算落地判断的研究只用样本内较优参数很容易自欺,样本外表现才是筛掉绝大多数参数组的关卡
成本假设按你的实际费率设定信号频率偏高的策略成本参数应写在策略口径里统一施加,事后挑选是否计成本等于变相择优
口径提醒:本表数值是行业里常见的量级起点,不是官方推荐值,也不代表任何收益预期;参数对比务必在同一数据区间、同一成本假设、同一信号口径下进行。
Decision

vectorbt 指标与参数怎么选?决策表

先定场景、再定指标、最后定参数——在 vectorbt 里顺序反了,后面所有工作都要重做。

研究场景选哪些指标参数起点为什么这样选
趋势跟随(顺势持有)双均线、MACD10 / 30 量级起步均线与 MACD 都在刻画趋势方向,交叉给出进出场时点,逻辑直观且易复述
震荡区间反转RSI、布林带常用超买超卖阈值与带宽倍数区间行情下均值回归更有效,动量与波动带更贴合这段行情的性质
突破确认布林带或波动通道 + 量能条件以波动带宽与放量阈值为准突破最怕假突破,用波动带宽提供阈值、用成交条件做二次确认
多指标共振趋势指标 + 动量指标组合先各自固定一套参数再联合多条件同时满足能减少假信号,代价是信号频率与样本量同步下降
控制回撤止损止盈参数 + 仓位约束(辅助指标)按可承受回撤反推回撤主要靠止损与仓位管理控制,指望指标预测拐点往往更不可靠
多标的筛选与轮动截面排名 + 动量类指标排名窗口常取 20 日量级多标的必须口径一致,横截面排名才能保证同一时点可比
参数寻优流程先用上面的场景组合,再进网格扫描网格 + 样本外验证先去掉不可用的信号组合,再花算力扫参,能显著缩短研究周期
决策纪律:选型结论必须用样本外回测复核,表里的参数起点只是「从哪开始试」,不是推荐值;任何指标组合都不能保证未来收益,回测结果仅供研究,不构成投资建议。
FAQ

常见问题

双均线金叉死叉为什么经常亏损?

均线是滞后指标,vectorbt 里震荡行情的金叉死叉会密集出现假信号,而每次进出都要付手续费与滑点,理论收益很容易被成本吞掉。常见改法是加趋势或量能过滤、拉长窗口、并在样本外段复核——但回测只能验证历史区间表现,不代表未来同样有效,口径以官方实现与你自己的成本假设为准。

crossed_above 和 crossed_below 具体怎么用?

它们判断一条序列是否上穿或下穿另一条序列,返回与输入等长的布尔序列,可以直接作为组合回测入口的买入 / 卖出信号。使用时注意两点:缺失值位置会返回 False,以及信号更稳妥的做法是整体后移一根 bar 再加进回测,具体签名与行为以官方 API 文档为准。

能用自己的指标,而不是内置指标吗?

可以。既可以在内置指标基类上子类化定义新指标,也可以先用 pandas / NumPy 把指标算成普通序列,再接进信号与回测流程——两条路最后进的都是同一套向量化流程。自定义指标的计算正确性需要你自己负责验证;基类与接口以官方 API 文档为准

指标一定要用访问器调用吗?

不是必须。访问器只是把常用指标包装成便捷写法,本质仍是 pandas 扩展;你也可以完全在 pandas / NumPy 里算好指标,再把结果交给信号与组合入口。混用时只需盯住索引对齐——两条序列索引不一致,布尔运算的结果会静默出错而不是直接报错;访问器用法以官方 API 文档为准

指标数值和第三方软件对不上,先查什么?

先核对四件事:数据区间是否完全一致(含起止日期与交易日历)、价格是否用了相同复权口径、指标参数与平滑方式是否相同、缺失值处理方式是否一致。这四项里任意一项不同,结果就会系统性偏离;对不上的时候优先怀疑数据与口径,而不是先怀疑指标算错,具体计算定义以官方实现为准。

这些指标能直接用在 A 股数据上吗?和本机技能路线是什么关系?

能。vectorbt 的指标与信号环节只要求输入是「索引为时间、值为价格」的序列,A 股数据只要整理成同样结构即可接入,具体取数方式见数据接入页。本机已核验的技能里,技术分析类与财经数据类技能覆盖的是「一句话做形态与指标分析、拉行情」的方向,与本页讲的代码级指标计算是两条独立路线,双方没有已证实集成;哪条更合适取决于你是要做深度回测还是先快速验证想法;技能能力以官方技能文档为准

vectorbt 策略写好之后怎么做参数优化?

下一步用网格组合一次扫描多组均线参数,重点看参数邻域是否稳定,而不是单点极值。