bt / cost models & fixed income

bt 交易成本建模与固定收益:成本模型怎么用

bt 把交易成本抽象成可替换的模型对象:bt/__init__.py 公开导出 CostModelSqrtCostModelAlmgrenChrissCostModel 三个成本相关类;此外还有固收与对冲证券类型(FixedIncomeSecurityCouponPayingSecurityHedgeSecurityCouponPayingHedgeSecurity)与相应的策略类。这一页说明它们各自解决什么问题、什么时候不必用。

成本三件套:CostModel 系列固收与对冲:Security 子类依据:bt 1.2.3 源码导出

三种成本模型

CostModel
抽象基类
SqrtCostModel
平方根冲击
AlmgrenChriss
瞬时+永久冲击
成本模型挂在单次回测上,用于把成交行为折算成成本;三者是替换关系,不是叠加关系。
成本模型bt 顶层导出三个类
固收证券FixedIncome / CouponPaying
对冲证券HedgeSecurity 系列
证据bt/__init__.py(2026-09-20)
Cost models

三种成本模型分别适合什么场景?

成本模型决定「成交要付多少钱」,直接影响高换手策略的净收益;下表给出选择依据。

模型建模思路适用场景注意点
CostModel成本模型的抽象基类,定义接口需要自定义成本函数时继承它直接使用意义有限,通常作为扩展点
SqrtCostModel成本随交易量按平方根增长流动性一般、需反映冲击成本参数需与标的流动性匹配
AlmgrenChrissCostModel区分瞬时与永久价格冲击大额交易、对冲击敏感的研究参数较多,需说明取值来源
佣金 / 固定成本配置按交易额或笔数计费常规手续费场景费率假设要写进报告,便于复现
无成本假设不配置成本模型只验证逻辑、做机制对比结论不能当作可实现的净收益
成本对结论的影响同一策略跑含成本/不含成本两遍判断策略是否被成本吃掉高换手策略差异通常最明显
Fixed income

固定收益与对冲证券怎么用?

bt 的证券层不止一种普通股票证券,源码里还有固收与对冲相关类(bt/core.py)。下表说明各自定位。

定位适用场景注意点
FixedIncomeSecurity固收类证券的基础类型债券类资产建模字段与现金流假设比普通证券多
CouponPayingSecurity带票息的证券付息债券票息与付息频率需与数据一致
HedgeSecurity对冲用途的证券套保与对冲研究对冲比例与成本要显式说明
CouponPayingHedgeSecurity票息 + 对冲组合类型复杂固收对冲偏进阶,先用小样本验证
FixedIncomeStrategy固收专用策略容器固收组合回测与普通 Strategy 的假设不同,勿混用
RenormalizedFixedIncomeResult固收结果的归一化封装固收统计口径对齐口径以官方文档为准
Cashflow & risk

现金流、公司行为与保证金怎么处理?

这些算法用于让回测更接近真实账户,但都需要数据侧配合;下表给出用途与前置条件。

算法 / 类用途适用场景注意点
CorporateActions处理分红送转等公司行为长区间股票回测数据需带对应字段,否则无法生效
CapitalFlow外部资金流入流出定投、分期投入现金流假设要写清
SetNotional按名义金额设置仓位固定金额建仓与按权重分配的方式不同
UpdateRisk / PrintRisk更新与打印风险状态含杠杆或对冲的组合打印类只输出信息
HedgeRisks对冲风险敞口套保研究需要明确对冲标的与比例
Margin保证金相关处理杠杆场景v1.2.3 修复了保证金维持追缴与证券乘数相关问题,注意版本
版本相关:release v1.2.3(2026-09-11)的说明里包含「修复保证金维持追缴与证券乘数」「核心迁移到 numpy 数组(性能)」等条目;使用保证金类功能时请记录版本号,避免把旧版本行为当成库的固有行为。
When not to

什么时候不必用这些高级功能?

成本与固收类功能会显著增加配置与解释成本,下面四种情况可以先不用。

情况建议原因
只比较算法链结构是否生效先不配成本模型验证逻辑阶段不需要成本假设,避免两个变量混在一起
标的流动性很好、交易频率低用简单费率即可复杂冲击模型对结论影响有限
数据里没有现金流字段不要开公司行为类算法缺少字段时算法无法生效,只会增加误判
没有固收数据与估值口径先做权益组合固收建模依赖票息与到期结构,口径不全时结论不可用
只做单资产研究用更轻的工具bt 的组合与成本能力用不上,学习成本不划算
不确定成本参数来源先做敏感性测试参数直接决定成本结论,需说明取值依据
FAQ

bt 成本与固收常见问题

不配成本模型的结果能不能用?

能用于验证逻辑与机制对比,但不能当作可实现的净收益。含成本与不含成本两个结果通常要一起看,尤其在高换手策略上差异明显。

三种成本模型可以叠加吗?

通常按「替换」理解:一次回测配置一种成本模型。具体可配置项与参数以官方文档为准,本站不列默认值以免与版本更新不一致。

成本参数从哪里来?

应来源于你自己的交易经验、券商费率或公开的冲击成本估计,并在报告里写清假设。bt 提供的是建模框架,不提供参数取值。

固定收益回测需要什么数据?

除价格外通常还需要票息、付息频率等现金流字段,且估值口径要与你的研究目标一致。bt 提供固收证券类与策略容器,数据仍需自备。

保证金与杠杆功能有什么风险?

杠杆会放大亏损,且涉及追缴规则;不同版本对保证金与证券乘数的处理曾有修复。使用前请以官方 release 说明与文档为准,并自行评估风险。

这些功能在实盘同样适用吗?

不适用。bt 是回测库,成本模型与固收类只在本库回测流程内生效;实盘的成本与执行需要另行实现。

下一步怎么走:成本与固收之后做什么?

先把策略骨架与参数扫描的写法看明白,再回到安装页确认环境依赖;需要横向比较选型时,导航里的「对比」页给了两条独立路线的分工。