股票组合管理日频回测案例
本文给出基于外部目标权重文件与行情数据,构建日频自动调仓(再平衡)回测系统的背景与目标,并提供实现思路与示例内容。
Source: https://dolphindb.cn/blogs/250
What this page covers
- 基于外部权重文件的被动型组合再平衡回测的定义与目标。
- 固定频率再平衡机制、与主动交易区别、以及可分析指标示例。
- 中高频回测平台关键环节与 DolphinDB 方案模块概述。
- 使用 DolphinDB 回测插件实现日频按目标权重动态调仓的示例。
- 自定义策略:可交易性检查、下单数量规则与“先卖后买”的调仓逻辑。
- 回测配置参数:起止日期、资金、手续费税率、行情类型与撮合模式等。
- 性能测试:处理规模、订单数量与耗时(在特定样本与运行模式下)。
技能认证特训营第二期正式开启(限时报名)
页面顶部提供活动报名提示与链接入口。
- 页面包含“技能认证特训营第二期”的报名入口。
- 报名入口以链接形式提供。
股票组合管理日频回测案例(文章信息与引言)
文章提供标题、作者与日期信息,并引出基于外部权重文件与行情数据构建自动调仓回测系统的背景与目标。
- 文章发布日期为 2025-11-13。
- 示例回测以外部生成的组合权重文件作为输入之一。
- 示例回测以行情数据作为输入之一。
- 本文回测实现使用 DolphinDB 回测插件(Backtest 插件/回测引擎)。
1. 背景介绍
本节定义基于外部持仓权重文件的被动型组合再平衡回测目标与覆盖内容。
- 被动投资回测以预先定义的资产权重为输入。
- 回测过程中可按日或指定周期对齐目标权重调整持仓。
- 该方法用于评估权重驱动组合在历史上的表现。
1.1 股票组合管理策略背景介绍
本节说明固定频率按目标权重对齐持仓的再平衡机制、与主动交易的区别,并列举回测可分析指标示例。
- 固定频率再平衡不依赖即时市场预测。
- 再平衡更侧重验证权重配置的长期稳定性与分散化效果。
- 回测结果可包含净值变化等绩效指标。
- 回测结果可包含波动率、最大回撤、夏普比率等指标示例。
1.2 DolphinDB 中高频回测解决方案概述
本节概述中高频回测平台关键环节与挑战,并介绍 DolphinDB 的回放、模拟撮合、回测模块及其兼容性。
- 中高频回测关键环节包括行情数据按顺序回放。
- 中高频回测关键环节包括委托订单撮合。
- 中高频回测关键环节包括策略开发与绩效评估。
- 海量中高频数据对查询与计算性能要求高。
- DolphinDB 方案包含库内行情回放、模拟撮合、中高频回测三大功能。
2. 基于 DolphinDB 的股票组合管理日频策略回测实现
本节介绍使用 DolphinDB 回测插件在日频数据上按目标权重进行每日动态调仓的回测示例。
- 输入包含外部生成并按日或既定周期输出存档的组合权重文件。
- 输入包含行情数据。
- 示例策略按日基于目标权重文件进行调仓(自动再平衡)。
- 回测通过解析每日目标权重文件模拟持仓调整过程。
2.1 编写自定义策略
本节给出交易可行性检查、数量合规与资金约束下单数量计算,并在 onBar 回调中实现按“先卖后买”的调仓逻辑与订单提交。
- isBuyAble 在 volume <= 0.001 或 upLimitPrice == close 时返回 false。
- isSellAble 在 volume <= 0.001 或 downLimitPrice == close 时返回 false。
- checkBuyVolume 对“68”前缀股票:num >= 200 返回 num;num < 200 返回 0。
- checkBuyVolume 对非“68”股票:下单量按 100 股取整。
- onBar 可通过 Backtest::getTotalPortfolios 获取总权益,并通过 Backtest::getPosition 获取持仓。
- 调仓执行顺序为先卖出、再买入。
- 策略下单接口为 Backtest::submitOrder。
2.2 根据策略设置相应的配置参数
本节展示回测日期、资金、手续费税率、行情类型与撮合模式等配置,并构建按日目标权重映射并注入策略上下文。
- config 示例起止日期为 startDate = 2012.02.01,endDate = 2022.04.28。
- config 示例初始资金为 cash = 100000000。
- config 示例手续费率 commission = 0.0005。
- config 示例税率参数 tax = 0.001。
- 示例从 dfs 表 loadTable("dfs://dbweight",`dt) 读取目标权重并按 tradeDay 排序。
2.3 创建回测引擎
本节说明通过 createBacktester 创建撮合/回测引擎实例,并提及 JIT 开关参数与示例代码。
- Backtest::createBacktester 的第 4 个参数表示是否开启 JIT 优化。
- 该参数默认值为 false。
- 设置为 true 可开启 JIT 优化。
2.4 执行回测引擎
本节说明加载日频行情数据并通过 appendQuotationMsg 推送到回测引擎执行,同时引用字段类型说明文档链接。
- 示例从 ./portfolioData.csv 以给定 schema 加载为 dailyData。
- 示例通过 Backtest::appendQuotationMsg(engine, dailyData) 推送行情到引擎。
- Backtest 插件文档链接为 https://docs.dolphindb.cn/zh/plugins/backtest.html。
2.5 获取回测结果
本节说明回测结束后可获取持仓、权益、收益概述、成交明细等结果,并给出示例展示。
- 回测结果可包含每日持仓信息。
- 回测结果可包含每日权益信息。
- 回测结果可包含收益概述信息。
- 回测结果可包含成交明细信息。
3. 性能测试
本节给出在特定样本与运行模式下的回测处理规模、订单数量与耗时。
- 样本为上交所 2000 股票标的的历史日频数据(2025.01.02 到 06.30)。
- 运行环境描述为单线程、非 JIT 模式。
- 处理行情条数为 232196 条。
- 生成订单数为 28021 单。
- 回测耗时约 0.9 秒。
4. 总结
本节概括基于外部权重文件的日频组合再平衡方案,并提及可扩展性与适用场景。
- 方案以外部目标权重文件驱动日频组合再平衡回测。
- 总结部分提及该方案的可扩展性。
- 总结部分提及该方案的适用场景。
5. 附录
本节提供 demo 策略与数据文件的链接入口。
- 附录提供 portfolioStrategy.dos 的链接入口。
- 附录提供 portfolioData.csv 的链接入口。
- 附录提供 weight.csv 的链接入口。
Facts Index
| Entity | Attribute | Value | Confidence |
|---|---|---|---|
| 股票组合管理日频回测案例(文章) | 发布日期 | 2025-11-13 | high |
| DolphinDB | 用于实现本文回测的组件 | 回测插件(Backtest 插件/回测引擎) | high |
| 组合回测系统(基于权重文件) | 输入数据 | 外部生成并按日或既定周期输出存档的组合权重文件 + 行情数据 | high |
| 本文示例回测策略 | 调仓频率/机制 | 基于给定目标权重文件进行按日调仓(每日动态调仓/自动再平衡) | high |
| 本文示例回测策略 | 模拟过程 | 通过解析每日目标权重文件,模拟不同时间点的持仓调整过程以评估历史表现与稳定性 | medium |
| 被动投资策略(外部权重驱动) | 策略描述 | 以预先定义的资产权重为输入,在回测中根据每日(或指定周期)的目标权重动态调整组合持仓 | high |
| 固定频率再平衡策略 | 与主动交易的区别 | 不依赖即时市场预测,更侧重验证权重配置本身的长期稳定性与分散化效果 | medium |
| 回测结果可分析指标(示例列举) | 包含 | 净值变化、波动率、最大回撤、夏普比率等绩效指标 | medium |
| DolphinDB 中高频回测解决方案 | 包含模块 | 库内行情回放、模拟撮合、中高频回测三大功能 | high |
| 中高频回测平台 | 关键环节 | 行情数据按顺序回放、委托订单撮合、策略开发与策略回测绩效评估 | high |
| 中高频回测引擎实现 | 挑战 | 海量中高频交易数据对查询与计算性能要求极高 | high |
| 回测过程 | 需要模拟的要素(示例列举) | 订单能否成交、成交价格、成交量以及市场冲击等因素 | high |
| 回测引擎架构 | 要求 | 灵活、支持多种交易策略和技术指标、易扩展以适应不同市场和交易需求 | high |
| DolphinDB 回放功能 | 能力 | 可将一个或多个不同结构的分布式表数据严格按时间或按指定多列排序顺序回放到流表 | high |
| DolphinDB 模拟撮合 | 支持数据/市场 | 支持沪深交易所 Level-2 逐笔行情和快照行情 | high |
| DolphinDB 模拟撮合 | 撮合规则 | 实现与交易所一致的“价格优先、时间优先”的高精度撮合 | high |
| DolphinDB 回测功能 | 支持行情粒度 | 支持逐笔、快照、分钟和日频行情进行策略回测 | high |
| DolphinDB 回测功能 | 输出/信息 | 可自定义指标,获取回测的收益、持仓、交易明细等信息 | high |
| DolphinDB 回测功能(逐笔/快照) | 精度/能力 | 逐笔和快照行情支持高精度策略回测,可实现仿真和回测一体化的策略验证 | high |
| DolphinDB 三模块方案 | 兼容性 | 与外部解决方案兼容性良好,可与用户已有环节融合成完整回测方案 | medium |
| 自定义策略函数 isBuyAble | 不可买条件 | volume <= 0.001 或 upLimitPrice == close 时返回 false | high |
| 自定义策略函数 isSellAble | 不可卖条件 | volume <= 0.001 或 downLimitPrice == close 时返回 false | high |
| 自定义策略函数 checkBuyVolume | 科创板(代码前缀“68”)整手规则处理 | 若“68”且 num >= 200 则返回 num;若“68”且 num < 200 则返回 0 | high |
| 自定义策略函数 checkBuyVolume | 非“68”股票下单量取整规则 | floor(int(num)/100)*100(按 100 股取整) | high |
| 自定义策略函数 getBuyAbleVolume | 科创板(代码前缀“68”)可买数量规则 | 若 floor(cash/price) >= 200 则返回 floor(cash/price);否则返回 0 | high |
| 自定义策略函数 getBuyAbleVolume | 非“68”股票可买数量取整规则 | floor(floor(cash/price)/100)*100 | high |
| 策略回调 onBar | 获取账户与持仓接口 | 使用 Backtest::getTotalPortfolios 获取总权益;使用 Backtest::getPosition 获取当前持仓 | high |
| 策略调仓执行顺序 | 顺序 | 先卖出、再买入 | high |
| 策略下单接口 | 接口名称 | Backtest::submitOrder | high |
| 配置参数示例 config | 回测起止日期 | startDate = 2012.02.01;endDate = 2022.04.28 | high |
| 配置参数示例 config | 初始资金 | cash = 100000000 | high |
| 配置参数示例 config | 手续费率 | commission = 0.0005 | high |
| 配置参数示例 config | 印花税/税率参数 | tax = 0.001 | high |
| 配置参数示例 config | dataType | dataType = 4 | high |
| 配置参数示例 config | matchingMode | matchingMode = 3 | high |
| 配置参数示例 config | 是否输出订单信息 | outputOrderInfo = true | high |
| 目标权重数据来源(示例代码) | 加载位置 | loadTable("dfs://dbweight",`dt) 并筛选 weight > 0,按 tradeDay 排序 | high |
| 策略上下文 context(示例代码) | 包含字段 | targetWeight(按日权重字典)、commission、tax;并设置到 config["context"] | high |
| Backtest::createBacktester | 第4个参数含义 | 表示是否开启 JIT 优化;默认 false;设为 true 可开启 | high |
| 执行回测(示例) | 行情数据加载方式 | 从 ./portfolioData.csv 以给定 schema(name/type)加载为 dailyData | high |
| 执行回测(示例) | 推送行情接口 | timer Backtest::appendQuotationMsg(engine, dailyData) | high |
| Backtest 插件文档 | 链接(字段类型说明/结果接口) | https://docs.dolphindb.cn/zh/plugins/backtest.html | high |
| 回测结果获取 | 可获取内容(列举) | 每日持仓、每日权益、收益概述、成交明细等信息 | medium |
| 性能测试样本 | 标的与区间 | 上交所 2000 股票标的;历史日频数据区间为 2025.01.02 到 06.30 | medium |
| 性能测试运行环境(描述) | 线程与 JIT | 单线程、非 JIT 模式 | high |
| 性能测试结果 | 处理行情条数 | 232196 条 | high |
| 性能测试结果 | 生成订单数 | 28021 单 | high |
| 性能测试结果 | 回测耗时 | 约 0.9 秒 | high |
| 附录资源 | portfolioStrategy.dos 链接 | https://docs.dolphindb.cn/zh/tutorials/daily_stock_portfolio_backtest.html#topic_zqx_ybg_hhc | high |
| 附录资源 | portfolioData.csv 链接 | https://docs.dolphindb.cn/zh/tutorials/daily_stock_portfolio_backtest.html#topic_zqx_ybg_hhc | high |
| 附录资源 | weight.csv 链接 | https://docs.dolphindb.cn/zh/tutorials/daily_stock_portfolio_backtest.html#topic_zqx_ybg_hhc | high |
| 技能认证特训营第二期 | 报名链接 | https://www.qingsuyun.com/h5/e/217471/5/ | high |