一 期货策略代码结构与功能分析
1.1 核心函数组成
initialize(context):策略初始化函数,在策略启动时仅运行一次,用于设置账户、合约、参数等基础配置;
handle_data(context, data):主策略函数,每个交易Bar触发运行一次,包含完整的交易逻辑和信号处理;
before_trading(context):开盘前准备函数,交易日20:30调用,用于获取账户信息和风险检查;
after_trading(context):收盘后处理函数,交易日15:30调用,用于总结当日交易情况和持仓状态;
1.2 辅助函数与回调机制
on_future_trade_rtn(context, order):订单成交回调函数,当订单状态变为"已成交"时自动触发;
future_order_cancel(context, order):订单撤单回调函数,当订单被撤销时自动触发;
print_future_account_info(futures_account):打印期货账户详细信息;
print_future_position_info(position):打印期货持仓详细信息;
二 工作流配置模板结构与字段详解
2.1 顶层结构字段
format_version:格式版本号,当前为"V1.0",用于标识配置文件的兼容性;
name:策略名称,用于在界面中显示的标识;
description:策略描述,简要说明策略的功能和特点;
litegraph:核心画布配置对象,包含所有可视化节点的定义和布局信息;
2.2 节点配置核心字段
id:节点唯一标识符,在同一工作流中必须唯一;
type:节点类型,如"CodeControl"表示代码控制节点;
pos:[x, y]数组,表示节点在画布上的坐标位置;
size:[width, height]数组,表示节点的宽度和高度;
flags:标志对象,包含uuid和plugin_source等信息;
2.3 输入输出端口配置
inputs:输入端口数组,每个端口有name、type、widget、pos、link等属性;
outputs:输出端口数组,每个端口有name、type、boundingRect、links等属性;
boundingRect:[x, y, width, height]数组,定义端口的边界矩形;
hide:布尔值,控制端口是否隐藏;
三 策略执行流程与环境配置
3.1 回测环境与仿真盘环境差异
回测环境API导入:from panda_backtest.api.api import *;
仿真盘环境API导入:from panda_trading.trading_common.api.api import *;
回测运行时间:日线回测每日调用一次,分钟线回测每分钟调用一次;
仿真盘运行时间:期货交易时段9:00~15:00,开盘前20:30,收盘后15:30;
3.2 交易信号处理流程
数据收集:从context和data对象中获取订阅合约的行情信息;
指标计算:基于历史价格计算短期均线和长期均线;
信号判断:根据均线交叉情况产生交易信号;
订单执行:根据信号类型执行开仓或平仓操作;
订单管理:记录订单ID,支持后续撤单操作;
3.3 风险管理与资金配置
仓位控制:每次开仓使用账户总权益的5%计算手数;
持仓检查:开仓前检查是否有未平仓持仓;
可平量控制:平仓时使用position.closable_buy_quantity或position.closable_sell_quantity;
异常处理:价格为零或数据不足时跳过本次处理;
四 期货数据API接口使用示例
4.1 行情数据查询接口
future_api_domain_symbol:查询主力合约信息,需要传入品种代码和日期;
future_api_quotation:查询期货行情数据,支持多合约、多时间段查询;
future_api_symbol_contractmul:查询合约乘数信息,返回每个合约的乘数;
future_api_symbol_contracts:查询品种合约集合,获取同一品种下的所有合约;
4.2 账户与持仓信息获取
账户信息:通过context.future_account_dict获取所有期货账户对象;
持仓信息:通过futures_account.positions获取账户的持仓信息;
资金信息:通过futures_account.total_value、cash、frozen_cash等属性获取资金状况;
盈亏信息:通过holding_pnl、realized_pnl获取持仓盈亏和平仓盈亏;
五 代码调试与日志输出规范
5.1 日志输出格式
使用SRLogger.info()函数输出日志信息;
重要信息使用分隔线("="*80)进行区分;
关键数据使用格式化字符串输出,包含明确的标签说明;
错误信息使用特殊符号(⚠️、❌)标识,便于快速识别;
5.2 异常处理机制
数据访问使用try-except结构,避免因数据缺失导致策略崩溃;
类型检查使用hasattr()函数,确保访问的属性存在;
关键操作前进行参数有效性验证;
捕获异常后输出详细的错误信息和类型;