策略 API 文档

聚宽风格 Python 策略接口 · 日线回测 · 前复权数据

返回策略研究
回测机制 (先读这个)

· 所有 order* 下单在次一交易日开盘价撮合 (聚宽日线口径, 杜绝未来函数)。

· 严格 T+1: 当日买入的仓位次日才可卖 (closeable_amount 只含可卖部分)。

· 涨跌停: 开盘触及涨停买不进、触及跌停卖不出, 委托作废并记入撮合提示。

· 费率: 佣金万2.5 (最低5元, 双边) + 印花税万5 (卖出) + 过户费万0.1 (沪深双边); 滑点 5BP。

· 买入自动取整到 100 股 (一手); 清仓卖出含零股全卖。

· 历史数据 API 只提供到当前回测日前一交易日; 当日 bar 仅经 handle_data 的 data 参数提供。

· 股票代码支持 600519 / 600519.SH / 600519.XSHG 写法。

生命周期函数
initialize(context)

回测开始时调用一次, 必须定义。用于设置 g 变量、基准、费率等。

before_trading_start(context)

每个交易日开盘前调用。在这里下单会在当日开盘价成交。

handle_data(context, data)

每个交易日收盘后调用 (核心函数)。data[code] 为当日完整 bar (open/high/low/close/volume); 在这里下单次日开盘成交。

after_trading_end(context)

每日收盘处理完之后调用, 适合做日终统计。

run_daily(func, time='open'|'close')

注册每日定时函数 (在 initialize 中调用)。time='open' 开盘后执行, time='close' 收盘后执行; func(context)。

交易函数
order(security, amount)

按股数下单: 正数买入 (自动取整到 100 股), 负数卖出。

order_value(security, value)

按金额下单: 正数买入约 value 元, 负数卖出约 |value| 元市值。

order_target(security, amount)

调仓到目标持仓股数; order_target(code, 0) 即清仓。

order_target_value(security, value)

调仓到目标市值。

# 半仓买入平安银行, 次日开盘成交
order_value('000001.SZ', context.portfolio.total_value * 0.5)
数据函数
attribute_history(security, count, fields=['open','high','low','close','volume'])

取单只股票最近 count 个交易日的历史数据, 返回 pandas DataFrame (index 为日期)。

history(count, field='close', security_list=[...])

取多只股票同一字段的历史, 返回 DataFrame (行=日期, 列=代码)。

get_price(security, start_date=None, end_date=None, fields=None, count=None)

按区间取历史行情 (end 自动截断到当前回测日前一日)。

hist = attribute_history('000001.SZ', 20, fields=['close'])
ma20 = float(hist['close'].mean())
context 与 g
context.portfolio.cash / total_value / positions_value / returns

可用现金 / 总资产 / 持仓市值 / 收益率。

context.portfolio.positions[code]

持仓对象: .amount 持仓股数 / .closeable_amount 可卖股数 (T+1) / .avg_cost 成本 / .price 最新价 / .value 市值。遍历 positions 得到当前持仓代码。

context.current_dt / context.previous_date

当前回测日 (datetime) / 前一交易日 (字符串)。

g

全局对象, 跨函数保存策略状态, 如 g.security = '000001.SZ'。

设置与日志
set_benchmark(code)

设置业绩基准, 仅 initialize 中有效。默认 'MARKET.EW' (全市场等权指数, 由仓内全部A股每日等权平均合成); 也可设为任意股票代码 (如策略标的本身, 直接衡量择时价值)。

set_commission(commission_rate=..., min_commission=..., stamp_tax_rate=...)

覆盖默认费率, 仅 initialize 中有效。

set_slippage(rate)

设置滑点比例 (默认 0.0005), 仅 initialize 中有效。

log.info / log.warning / log.error / log.debug

输出运行日志 (带回测日期前缀), 在「运行日志」面板查看。print 会重定向到 log.info。

可用模块与限制

可 import: numpy, pandas, math, statistics, datetime, json, random, collections, itertools, functools, heapq, bisect, decimal, re, copy

出于安全, 策略在无网络的隔离沙箱中运行: 不能访问文件/网络/系统接口; 单次回测限时 180 秒、内存 512MB、日志输出 2MB。

数据范围: 全 A 股日线 (前复权), 来自平台自建日线数据仓 (每晚更新、随时间持续累积加深); 可回测区间见「运行回测」弹窗中的数据覆盖提示。分钟级回测将在后续版本开放。