开始
策略开发总览
PandaAI 回测策略的开发指南:一份策略的六步闭环、三条开发原则、推荐的开发顺序与运行环境约束,以及回测前的检查清单。覆盖股票、ETF、证券两融与期货。
这一部分讲策略代码怎么写:回测引擎提供哪些回调、怎么读行情和账户、怎么下单并确认结果。适合自己动手写策略、或者要读懂并修改 Qube 生成的策略代码的人。只想在产品里用对话生成和回测策略的话,先看 Qube 使用手册。
覆盖四类业务:股票(沪、深、北交所)、ETF(二级买卖与一级申购赎回)、证券融资融券、期货。股票、ETF 与两融共用同一个证券账户,写法一脉相承;期货另有一套账户、开平仓和换月规则。
一、一份策略的闭环
一份策略通常由以下六步组成,缺了哪一步,回测结果都不可信:
| 环节 | 做什么 |
|---|---|
| 数据 | 读取当前 Bar、历史行情、因子和交易日历 |
| 信号 | 根据条件、排名或目标仓位形成交易意图 |
| 风控 | 检查现金、可卖数量、保证金、价格和在途委托 |
| 委托 | 按正确的方向、数量、价格方式提交订单 |
| 回报 | 处理订单状态、成交、撤单、拒单和部分成交 |
| 复盘 | 核对成交成本、手续费、滑点、持仓和净值变化 |
二、三条原则
- 先校验,再下单。 数据为空、价格无效、资金不足或存在在途订单时,保持现状比强行交易更可靠。
- 下单返回不等于成交。 下单函数返回的订单列表只代表一次委托尝试,实际结果要看订单状态、成交回报和账户变化。
- 信号要避开未来信息。 用收盘数据生成的信号,不能假设同一根 Bar 的收盘价已经可以成交。
三、推荐的开发顺序
- 先跑通只交易一个标的的最小策略。
- 把历史数据查询和当前行情判断分开。
- 增加待处理订单、已结束订单、已见成交等状态集合,管理订单和成交去重。
- 再扩展到组合、目标仓位、资金和保证金控制。
- 最后加入 ETF 一级申赎、证券两融、期货换月或限价撤单等特殊业务。
- 用成交回报、账户快照和净值结果复盘,而不是只看策略有没有交易。
四、运行环境约束
策略代码运行在平台的回测环境里,账户、回测区间、频率、初始资金与费用都由回测任务配置提供,代码里只读取、不改写。
- 导入:交易接口来自
from panda_backtest.api.api import *;查询历史数据时import panda_data,由平台提供数据访问,策略中不写账号、密码或认证地址。 - 日志:一律用
print。记录交易日期、代码、订单号、状态、实际成交数量和错误原因即可,避免每根 Bar 无条件打印。 - 禁止项:不使用
eval、exec、getattr等动态反射或字符串执行,不读写本地文件,不调用进程或系统命令。 - 报错:账户不存在、参数非法、必需字段缺失时明确抛出异常,便于定位;暂时没有行情、数据不足属于正常分支,跳过这次决策即可,不要用宽泛的异常捕获把失败变成「正常」的收益结果。
注意
本部分所有接口与示例都面向回测。仿真、实盘应使用对应运行环境提供的账户与交易接口,不能仅凭函数同名就认定成交、查询和回调时序完全相同;也不要把回测里的撮合规则与信用设置理解为真实券商账户的交易权限。
五、这部分怎么读
| 你要做的事 | 从哪里看 |
|---|---|
| 写第一份股票或 ETF 策略 | 策略结构与回调 → 行情与历史数据 → 账户与持仓 → 下单、撤单与回报 |
| ETF 一级申购、赎回 | ETF 申购与赎回 |
| 融资买入、融券卖出与偿还 | 融资融券 |
| 查某个方法、排查没有成交 | 方法速查与排查 |
| 期货策略 | 期货:配置、合约与数据 → 开平仓与订单 → 主力换月与排查 |
| 直接拿一份能跑的策略改 | 股票与 ETF 示例、ETF 申赎与两融示例、期货示例 |
六、回测前检查清单
- 账户类型、日期范围和频率与策略代码一致。
- 证券代码带正确的市场后缀;期货下单使用带交易所后缀的真实合约。
- 当前行情和历史 DataFrame 都经过空值、列名、价格和交易日检查。
- 数量单位正确:股票用股、ETF 用份、期货用手;平仓数量不超过可平量。
- 不把订单列表长度当作成交成功,持续处理订单终态和成交回报。
- 信号只使用当时已经可知的数据,避免未来信息泄漏。
- 日志能说明为什么下单、订单发生了什么、账户最终变成什么状态。
