bt.algos / 59 classes

bt 内置算法库:59 个算法的分组与选法

bt 的策略能力来自 bt.algos 里的算法类。以 PyPI 包 bt 1.2.3 为准,该模块共有 59 个类,按用途分为调度、选券、权重、限额与风控、再平衡成交、逻辑与统计、交易与公司行为、风险与保证金八组。本页把它们逐类列出,并给出「要做什么 → 先用哪个算法」的对照表。

总数:59 个类(1.2.3)八组分类 + 逐类清单基于 bt/algos.py 核验

八组算法

调度
什么时候动手
选券
动谁
权重
分多少
再平衡与风控
怎么成交
四类主流程算法 + 四类辅助(日历条件、限额、逻辑统计、交易与风险),59 个类都落在这八组里。
59bt.algos 类总数
8 组按用途分类
可复用算法对象即插即用
证据bt/algos.py(2026-09-20)
All 59

59 个算法分别是什么?

下表按组列出全部类名(名称与 1.2.3 版源码一致),并给出每组的典型搭配与注意点。

分组全部类名典型搭配注意点
调度(8)RunOnce, RunPeriod, RunDaily, RunWeekly, RunMonthly, RunQuarterly, RunYearly算法链最前缺调度算法时不会按预期频率触发;RunPeriod 可自定义周期
日历与条件触发(5)RunOnDate, RunAfterDate, RunAfterDays, RunIfOutOfBounds, RunEveryNPeriods配合调度使用边界写错会整段不调仓,先用小样本验证
选券(11)SelectAll, SelectThese, SelectHasData, SelectN, SelectMomentum, SelectWhere, SelectRandomly, SelectRegex, SelectTypes, SelectActive, ResolveOnTheRun接在调度之后它写入 temp['selected'],SelectAll 默认排除无数据与价格 ≤0 的证券
权重(11)WeighEqually, WeighSpecified, ScaleWeights, WeighTarget, WeighInvVol, WeighERC, WeighMeanVar, WeighRandomly, LimitWeights, LimitDeltas, TargetVol接在选券之后权重算法依赖 selected;等权之外的方法需要额外输入(波动率、协方差等)
再平衡与成交(6)Rebalance, RebalanceOverTime, PTE_Rebalance, CapitalFlow, SetNotional, CloseDead算法链收尾不写再平衡就不会成交;RebalanceOverTime 把调整分摊到多期
逻辑与统计(6)Require, Not, Or, SetStat, StatTotalReturn, StatMultiPeriodReturn条件分支与记录统计量不是绩效指标,需在结果对象里读
交易与公司行为(5)CorporateActions, ClosePositionsAfterDates, RollPositionsAfterDates, ReplayTransactions, SimulateRFQTransactions现金流与到期处理偏进阶,先确认数据里有对应字段
风险与保证金(5)UpdateRisk, PrintRisk, HedgeRisks, Margin, SelectRandomly 之外的调试类见调度组对冲与保证金场景v1.2.3 修复了保证金维持追缴与证券乘数问题,注意版本差异
打印与调试(4)PrintDate, PrintTempData, PrintInfo, Debug插在任意位置只输出信息、不改变交易结果,排查完记得移除
计数说明:分组共 59 个类,个别类按主要用途归档(如 LimitWeights/LimitDeltas/TargetVol 归入权重与风控组)。完整类名以 bt/algos.py 与官方 algos 文档为准。
Scheduling

调度类算法怎么选?

调度决定「什么时候动手」,是算法链的起始环节。下表给出常见需求对应的选择。

需求用哪个适用场景注意点
只跑一次(建仓后不动)RunOnce买入持有基准适合做对照基准,不适合策略评估
每日调仓RunDaily高频再平衡研究换手与成本会显著上升
每周 / 每月 / 每季 / 每年RunWeekly / RunMonthly / RunQuarterly / RunYearly常规组合再平衡月度最常见;注意月内交易日差异
自定义周期RunPeriod / RunEveryNPeriods非标准调仓频率周期与统计窗口要匹配
指定日期 / 某日之后RunOnDate / RunAfterDate / RunAfterDays事件驱动研究日期必须落在数据区间内
越界才动手RunIfOutOfBounds阈值再平衡阈值参数决定敏感度,先做敏感性测试
Selection and weighting

选券与权重怎么配?

选券决定候选集合,权重决定资金分配;两者常常一起替换,下表给出常见组合。

研究问题选券 + 权重组合适用场景注意点
全部标的等权SelectAll + WeighEqually基准组合作为对照最常用
只取前 N 名SelectN + WeighEqually(或 + ScaleWeights集中度研究N 的取值对结果影响很大,别只测一个值
按动量选SelectMomentum + 权重类算法趋势跟随动量窗口与调仓频率要匹配
按条件筛SelectWhere / SelectRegex / SelectHasData按字段或名称过滤条件表达式写错会选出空集合
风险平价 / 逆波动WeighERC / WeighInvVol降波动组合需要波动率估计窗口,数据不足会退化
均值方差优化WeighMeanVar经典组合优化对输入估计敏感,结果要谨慎解读
Choose by task

「我想做这件事」该用哪个算法?

把研究意图直接映射到算法,是最快的上手方式;不确定时先用最小样本验证触发行为。

我想做先用再补注意点
建一个可比较的基准RunOnce + SelectAll + WeighEquallyRebalance基准要固定数据与区间
每月再平衡RunMonthly选券 + 权重 + 再平衡缺任一环都会异常
控制单券上限LimitWeightsRebalance限额会在权重之后生效
降低换手LimitDeltasRebalanceOverTime成本模型降换手可能牺牲跟踪效果
按波动率目标配置TargetVol权重类算法它是风险目标不是收益目标
做归因与记录SetStat / StatTotalReturnPrintInfo统计量需在结果里读取
排查算法顺序问题Debug / PrintTempData排查完记得移除
模拟公司行为与现金流CorporateActions / CapitalFlowSetNotional数据需带对应字段
Boundaries

算法库覆盖不到的地方有哪些?

59 个算法覆盖的是「组合再平衡」这一类回测,不等于全功能交易系统;下面六条是需要自建或另找工具的部分。

能力bt 是否提供说明
行情数据不提供自备「日期 × 标的」价格矩阵,或用本机财经数据类技能取数
逐笔撮合与盘口不提供bt 按数据行推进,不适合逐笔撮合类研究
实盘下单不提供回测库不包含交易通道
绩效统计与图表经 ffn 提供字段与口径以 ffn 文档为准
参数寻优框架不直接提供可自写循环调用 bt.run 做对照,注意过拟合
中文文档官方为英文本站中文说明基于官方仓库与包源码整理,细节以官方为准
FAQ

bt 算法库常见问题

59 个算法都会用到吗?

不会。多数研究只用到调度、选券、权重、再平衡四组里的十来个类;打印调试(Debug/PrintInfo)与公司行为类属于按需使用。先把四组主流程用熟,再按需扩展。

为什么同一个算法在不同页面说法不一样?

可能是版本差异。本站类名与数量以 PyPI 包 bt 1.2.3bt/algos.py 为准(2026-09-20 核验);官方文档若更新,以官方为准。

能不能直接用算法类名当策略名?

bt.Strategy 的入参里带策略名(如示例里的 "equal_weight"),与算法类名无关;命名建议能反映「选券 + 权重 + 频率」三个要素,便于多策略对比时辨认。

算法参数在哪里看?

以官方 algos 文档与类 docstring 为准;本页只做分组与用途映射,不列默认值,避免文档更新后与本页不一致。

有没有办法批量比较不同算法组合?

可以自己写循环:对每个算法组合构造 bt.Strategybt.Backtest,用 bt.run 汇总或逐个对比 result.display() 输出。注意固定数据、区间与成本假设,只改变量。

这些算法能用于实盘吗?

不能。算法库是回测执行逻辑,不包含实盘通道与风控执行;把它当成研究工具,实盘需要另建系统并自负风险。

下一步:先看生命周期还是先写策略?

理解分工之后,用首次运行示例把 Backtest + Strategy 串起来,或直接进入策略开发与参数优化。