108 lines
6.2 KiB
Markdown
108 lines
6.2 KiB
Markdown
---
|
||
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`(利润回撤止盈) | 只做单边止盈 |
|
||
|
||
ATR(Average 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 中的具体收益率数字(如沙盒示例收益)未收录——沙盒数据量小,结果不具代表性,且代码依赖旧版数据文件。
|