zipline / Strategy

zipline 策略开发:initialize 与 handle_data 回测教程

zipline 策略的核心是两个函数:initialize() 在回测开始时初始化,handle_data() 在每个市场事件(交易日)被调用,在这里计算信号、下单并记录。

initialize:初始化handle_data:逐事件处理order_target / record
initialize初始化上下文
handle_data逐事件算信号
order_target下单
record记录
zipline 策略开发与回测流程示意(基于官方 initialize/handle_data 示例)。
Flow

策略编写四步

以下为 zipline 策略的标准结构。

步骤函数/方法作用
1. 初始化initialize(context)设置初始变量与目标资产
2. 逐事件处理handle_data(context, data)每个交易日计算信号
3. 下单order_target(asset, shares)调整到目标仓位
4. 记录record(...)保存值供后续分析
说明:data.history() 用于取历史价格计算指标(如均线),需保持参数一致。
Code

双均线策略示例

官方 README 的双均线策略:短期均线上穿长期均线时买入,下穿时清仓。

from zipline.api import order_target, record, symbol

def initialize(context):
    context.i = 0
    context.asset = symbol('AAPL')

def handle_data(context, data):
    context.i += 1
    if context.i < 300:
        return
    short_mavg = data.history(context.asset, 'price',
                              bar_count=100, frequency="1d").mean()
    long_mavg = data.history(context.asset, 'price',
                             bar_count=300, frequency="1d").mean()
    if short_mavg > long_mavg:
        order_target(context.asset, 100)
    elif short_mavg < long_mavg:
        order_target(context.asset, 0)
    record(AAPL=data.current(context.asset, 'price'),
           short_mavg=short_mavg, long_mavg=long_mavg)
边界:回测结果仅代表历史表现,不构成收益保证或投资建议。

下一步做什么?

掌握策略结构后,看数据接入与功能特性,或对比 EasyClaw 量化 Skill 免部署路线。