Files
my_wiki/raw/量化/abuquant/abuquant-策略开发与回测实践摘编.md
T

108 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: "阿布量化(ABuQuant)策略开发与回测实践摘编"
source: "https://github.com/bbfamily/abu"
source_commit: "d602d847677e4c2b77b0a122df30816ea68b5710 (2026-01-24)"
source_version: "0.4.0"
license: "GPL"
last_updated: 2026-08-07
type: source-derivative
tags:
- "量化"
- "策略开发"
- "回测"
raw_sources:
- path: "raw/量化/abuquant/_meta/源码哈希清单.tsv"
hash: "sha256:e07923e8607d1ce333d692f6acc8db3b5f68f1c9e9679d5629705e359e2f0e1f"
- path: "raw/量化/abuquant/abuquant-框架架构摘编.md"
hash: "sha256:1d40144383bd5f8e0f5d6049da545abb2933a83328693dc2d7852af9e70291d6"
---
# 阿布量化(ABuQuant)策略开发与回测实践摘编
> 本摘编提炼阿布量化教学文档(abupy_lecture notebook 1-9、12、15-19)中的**开发模式与可执行流程**,供阅读源码或复现示例时参考。框架版本 0.4.0,所有 API 名称以源码为准。
## 1. 择时策略开发模式(notebook 1)
择时策略决定"什么时候买/卖"。核心三步:
1. **编写买入择时因子**:继承 `AbuFactorBuyBase` 并混入方向类(BuyCallMixin/BuyPutMixin),实现 `fit_day(today, orders)` 生成买入订单(`self.buy_tomorrow(order)`)。
2. **分解模式逐步回测**:先只用买入因子,观察买入点;再叠加卖出因子。
3. **实现卖出因子**:继承 `AbuFactorSellBase``fit_day` 中调用 `self.sell_tomorrow(order)`
关键概念:
- `kl_pd`:择时时段行情;`combine_kl_pd`:合并前一年行情(供特征构建)。
- 因子通过 `_init_self(**kwargs)` 读取自定义参数。
- `buy_tomorrow/sell_tomorrow`:次日成交,避免未来函数。
## 2. 择时策略优化(notebook 2
三类卖出因子组合:
| 类型 | 代表因子 | 作用 |
|---|---|---|
| 基本止盈止损 | `AbuFactorAtrNStop`(n 倍 ATR 止盈止损) | 保护利润、控制风险 |
| 风险控制止损 | `AbuFactorPreAtrNStop`(单日最大跌幅 n 倍 ATR 止损) | 单边风险控制 |
| 利润保护止盈 | `AbuFactorCloseAtrNStop`(利润回撤止盈) | 只做单边止盈 |
ATRAverage True Range,平均真实波动范围)定义:`TR = max(|最高-最低|, |最高-昨收|, |昨收-最低|)`,ATR 即 TR 的均值,衡量波动强度。
## 3. 滑点与手续费(notebook 3
- 滑点:`AbuSlippageBuyMean/AbuSlippageSellMean` 默认**均价买入/卖出**(当日均价),优点简单高效,交易数量足够多时接近实盘;基类注释明确:不考虑大资金冲击成本,实盘迁移需日内分钟 K 线择时。
- 手续费:`AbuCommission` 计算每笔手续费(示例含 TSLA 按金额比例与固定费用两种形式),`order.commission` 记录。
## 4. 多股票回测与仓位管理(notebook 4)
- 多支股票可用同一因子组合统一回测,也可按股票分别指定不同因子。
- 仓位管理:默认 `AbuAtrPosition`ATR 仓位),示例还有 `AbuKellyPosition`Kelly 仓位)、`AbuPtPosition`(价格位置仓位);通过 `AbuPositionBase` 全局默认类或 kwargs 指定。
- 并行:`AbuPickTimeMaster` 调度,多进程执行提升效率(Windows 注意 ABuParallel 的 ProcessPoolExecutor 实现)。
## 5. 选股策略开发(notebook 5
- 选股因子继承 `AbuPickStockBase`,实现 `fit_first_choice`(首选)等方法;示例:价格选股(AbuPickStockPriceMinMax)、拟合角度选股(AbuPickRegressAngMinMax)、相似度选股(AbuPickSimilarNTop)、位移路程比选股(AbuPickStockShiftDistance)。
- 多个选股因子可并行执行;选股在择时周期内每月/每周动态重新执行。
- 选股 Worker`AbuPickStockWorker`)在择时序列之前的窗口迭代初始交易对象进行因子拟合。
## 6. 回测结果度量(notebook 6
- `AbuMetricsBase` 提供基本度量(收益、回撤、胜率、盈亏比等),支持可视化。
- 可继承扩展自定义度量类(`_read_custom_metrics` 等钩子)。
- 期货市场使用 `AbuMetricsFutures`(含持仓/保证金维度)。
- 度量结果可保存/读取(`ABuStore`notebook 15 用 `load_abu_result_tuple` 读取训练集结果)。
## 7. 参数寻优与评分(notebook 7
- `AbuGridSearch`:对买入/卖出/选股因子在参数取值范围内 Grid Search。
- `AbuScoreTuple`/`AbuBaseScorer`:对度量结果评分,支持不同权重、自定义评分类。
- 示例问题:"应该考虑多少天的均线?"——通过网格搜索+评分确定。
- `AbuCrossVal`:交叉验证避免过拟合。
## 8. 机器学习集成(notebook 12
- 特征提取:从行情构建特征(`AbuMLFeature` 内置特征定义,支持用户扩展)。
- `AbuML` 中间层持有 x/y/df`AbuMLCreater` 封装常用学习器初始化(sklearn 系)。
- 测试集验证与非均衡技术(imbalance 处理)。
- 继承 `AbuMLPd` 对数据处理做业务封装。
- 应用场景:UMP 裁判训练(失败交易特征分类)、策略有效性验证(notebook 32)。
## 9. 数据源接入(notebook 19
- 数据模式切换:沙盒/实盘数据模式。
- 数据存储切换:本地文件存储后端。
- 数据源切换:内置沙盒(ABuDataFeed)↔ 外部数据源。
- 全市场数据更新:`ABuDataCache` merge 策略。
- 外部数据源接入示例:股票、期货、比特币/莱特币(CrawlBu 提供雪球等爬虫采集)。
## 10. 开发注意事项(源码注释级)
- 所有数据访问统一走 `ABuSymbolPd` 对外接口。
- 卖出因子若用于期货需 `support_direction()` 声明支持 put 方向,`fit_day` 中按 `order.expect_direction` 正负号区分 call/put 处理(如 ATR 止损:call 方向"暴跌卖出"put 方向"暴涨卖出")。
- 买入因子方向唯一:一个因子不能同时看涨又看跌。
- 因子内部可绑定专属卖出因子与选股因子(局部生效)。
- `lock_factor`:选股因子可封锁本源买入因子执行。
## 11. 证据边界
- 本文基于 notebook markdown 文本与源码 docstring 提炼,API 细节以源码为准;未执行任何回测复现。
- 教学 notebook 中的具体收益率数字(如沙盒示例收益)未收录——沙盒数据量小,结果不具代表性,且代码依赖旧版数据文件。