ABU量化框架入门指南:从零搭建你的第一个量化交易策略

1次阅读
没有评论

共计 2721 个字符,预计需要花费 7 分钟才能阅读完成。

image.webp

量化交易与 ABU 框架简介

量化交易简单来说就是用数学模型替代主观判断,通过历史数据验证策略有效性。ABU(Alpha-Beta-Unity)是一个基于 Python 的开源量化框架,特点是:

ABU 量化框架入门指南:从零搭建你的第一个量化交易策略

  • 内置 A 股数据接口,省去数据清洗麻烦
  • 策略回测和实盘使用同一套代码
  • 可视化模块直接输出专业级分析图表

作为新手入门工具,它的学习曲线比 vn.py、backtrader 更平缓。下面我会用炒股的均线策略为例,带你走完从开发到回测的全流程。

环境搭建(10 分钟搞定)

  1. 安装 Python3.8+(推荐用 Miniconda 管理环境)

    conda create -n abu_env python=3.8
    conda activate abu_env

  2. 安装 ABU 核心库

    pip install abupy

  3. 额外安装依赖(绘图和性能优化用)

    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)

实盘注意事项

  1. 滑点处理(实际成交价与预期偏差)

    class MySlippage(AbuSlippageBuyBase):
        def fit_price(self, order):
            # 买入价增加 0.1% 滑点成本
            return order.price * 1.001  

  2. 风险控制 三板斧:

  3. 单票仓位不超过总资金 10%
  4. 设置每日最大亏损阈值
  5. 避免在财报披露期重仓

  6. 回测与实盘差异原因:

  7. 历史数据包含不复权价格
  8. 实盘存在订单延迟
  9. 极端行情流动性枯竭

进阶学习方向

  1. 多因子分析:

    from abupy import AbuFactorBuyBreak, AbuFactorSellBreak

  2. 结合机器学习:

  3. 用 sklearn 预测涨跌概率
  4. 基于 LSTM 构建时序模型

  5. 其他策略类型:

  6. 均值回归策略
  7. 布林带突破策略
  8. 日内高频策略

完整代码已上传 GitHub(搜索 ABU 量化教程),建议先用模拟盘验证策略。记住:没有圣杯策略,持续迭代才是王道!

正文完
 0
评论(没有评论)