共计 2721 个字符,预计需要花费 7 分钟才能阅读完成。
量化交易与 ABU 框架简介
量化交易简单来说就是用数学模型替代主观判断,通过历史数据验证策略有效性。ABU(Alpha-Beta-Unity)是一个基于 Python 的开源量化框架,特点是:

- 内置 A 股数据接口,省去数据清洗麻烦
- 策略回测和实盘使用同一套代码
- 可视化模块直接输出专业级分析图表
作为新手入门工具,它的学习曲线比 vn.py、backtrader 更平缓。下面我会用炒股的均线策略为例,带你走完从开发到回测的全流程。
环境搭建(10 分钟搞定)
-
安装 Python3.8+(推荐用 Miniconda 管理环境)
conda create -n abu_env python=3.8 conda activate abu_env -
安装 ABU 核心库
pip install abupy -
额外安装依赖(绘图和性能优化用)
pip install matplotlib ta-lib注:Windows 用户安装 TA-Lib 可能需要去官网下载 whl 文件
数据准备:3 种获取方式对比
ABU 支持多种数据源,这里演示最常用的本地模式:
from abupy import AbuBenchmark, AbuCapital, ABuSymbolPd
# 1. 下载历史数据(首次使用需下载)ABuSymbolPd.make_kl_df('000001', n_folds=3) # 下载平安银行 3 年数据
# 2. 从本地读取
kl_pd = ABuSymbolPd.read_kl_df('000001')
print(kl_pd.head()) # 查看开盘价 (open)、收盘价(close) 等字段
数据预处理建议:
- 检查是否有 NaN 值:
kl_pd.isnull().sum() - 处理停牌日期:
kl_pd.fillna(method='ffill', inplace=True) - 添加收益率字段:
kl_pd['pct_change'] = kl_pd.close.pct_change()
策略开发:均线黄金交叉策略
策略逻辑:当短期均线上穿长期均线时买入,反之下穿时卖出。
from abupy import AbuFactorAtrNStop, AbuFactorPreAtrNStop, AbuFactorCloseAtrNStop
from abupy import AbuSlippageBuyBase, AbuSlippageSellBase
from abupy import AbuMetricsBase
class MaStrategy(AbuBenchmark):
def initialize(self):
# 参数设置
self.short_ma = 5 # 5 日均线
self.long_ma = 20 # 20 日均线
self.atr_period = 14 # 波动率计算周期
# 启用 ATR 止损(风险控制)self.stop_loss_factor = AbuFactorAtrNStop(self, self.atr_period)
self.stop_win_factor = AbuFactorPreAtrNStop(self, self.atr_period)
def on_tick(self, kl_pd):
# 计算均线
ma_short = kl_pd.close.rolling(self.short_ma).mean()
ma_long = kl_pd.close.rolling(self.long_ma).mean()
# 生成信号(避免在数据开头产生 None 值)if len(kl_pd.close) < self.long_ma:
return
# 金叉买入
if ma_short[-2] < ma_long[-2] and ma_short[-1] > ma_long[-1]:
self.buy_stock(kl_pd.name)
# 死叉卖出
elif ma_short[-2] > ma_long[-2] and ma_short[-1] < ma_long[-1]:
self.sell_stock(kl_pd.name)
关键方法说明:
initialize(): 策略初始化,相当于构造函数on_tick(): 每个交易日执行的核心逻辑buy_stock()/sell_stock(): 框架封装的交易动作
回测执行与优化
运行回测并分析结果:
from abupy import AbuPickTimeWorker, AbuPickStockWorker
from abupy import AbuCapital, AbuKLManager
# 1. 设置初始资金 10 万元
capital = AbuCapital(100000, benchmark='000300') # 沪深 300 作为基准
# 2. 运行回测
choice_symbols = ['000001', '600000', '000858'] # 测试 3 只股票
workers = AbuPickStockWorker(capital, choice_symbols, MaStrategy)
workers.fit()
# 3. 查看结果
metrics = AbuMetricsBase(capital)
metrics.fit_metrics()
metrics.plot_returns_cmp() # 收益对比图
重要指标解读:
- 夏普比率 >1 为合格,>2 说明风险收益比优秀
- 最大回撤 最好控制在 20% 以内
- 年化收益 需对比大盘基准(如跑输沪深 300 则需优化)
参数优化技巧:
# 网格搜索最佳参数组合
from abupy import ABuGridHelper
param_grid = {'short_ma': [3, 5, 10],
'long_ma': [20, 30, 60],
'atr_period': [10, 14, 20]
}
ABuGridHelper.grid_search_MA_params(capital, choice_symbols, param_grid)
实盘注意事项
-
滑点处理(实际成交价与预期偏差)
class MySlippage(AbuSlippageBuyBase): def fit_price(self, order): # 买入价增加 0.1% 滑点成本 return order.price * 1.001 -
风险控制 三板斧:
- 单票仓位不超过总资金 10%
- 设置每日最大亏损阈值
-
避免在财报披露期重仓
-
回测与实盘差异原因:
- 历史数据包含不复权价格
- 实盘存在订单延迟
- 极端行情流动性枯竭
进阶学习方向
-
多因子分析:
from abupy import AbuFactorBuyBreak, AbuFactorSellBreak -
结合机器学习:
- 用 sklearn 预测涨跌概率
-
基于 LSTM 构建时序模型
-
其他策略类型:
- 均值回归策略
- 布林带突破策略
- 日内高频策略
完整代码已上传 GitHub(搜索 ABU 量化教程),建议先用模拟盘验证策略。记住:没有圣杯策略,持续迭代才是王道!
正文完
