转眼已经是在 PandaAI 平台学习的第四周了。
前三周主要跟着视频和文档走,熟悉了基本的工作流搭建流程:
Python代码输入 → 期货回测 → 策略回测结果 → 报告展示
整体来说,平台的官方流程已经相当完善,基本可以满足日常策略回测需求。
本周的学习重点开始转向 专家模式,尝试在现有流程基础上,通过新增自定义节点,让工作流更加灵活,也更适合做反复的策略实验。
这周折腾了不少时间,不过最终 参数注入节点已经成功跑通,也算是对专家模式有了更直观的理解。
一、为什么想用专家模式?
在日常回测中,我遇到了一个很典型的小问题:
每次想测试不同参数,都必须手动修改策略代码。
比如一个简单的动量策略:
context.mom_lookback = 20
context.mom_threshold = 0.02
如果想测试不同参数组合,就必须:
1 打开策略代码
2 修改参数
3 保存
4 重新运行回测
如果只是改一两次还好,但如果要反复调参,整个流程就会变得非常繁琐。
于是就产生了一个想法:
能不能把“策略逻辑”和“参数配置”拆开?
也就是:
- 策略代码保持不变
- 参数通过工作流节点注入
这就是我这周尝试专家模式的起点。
二、专家模式可以做什么?
这周的教学会议对专家模式做了比较系统的介绍,大致有几个核心能力:
1 查看每个节点背后的代码
进入:
AI工作流 → 已有工作流 → 左侧点击 专家模式
就可以看到每个节点对应的 Python 代码,对于理解平台节点逻辑非常有帮助。
2 创建自定义节点
在节点库下方点击 +,就可以创建自己的 Python 节点。
保存后节点会出现在:
用户自定义节点里,可以随时拖到工作流中使用。
3 复用已有节点逻辑
平台里已经有不少节点,比如:
- 非线性因子节点
- 因子组合节点
- 权重组合节点
在专家模式下可以直接看到这些节点的代码实现,对于理解输入输出结构很有帮助。
4 在工作流中扩展节点
原始流程一般是:
Python代码输入
↓
期货回测
↓
策略回测结果
↓
报告展示
只要 节点输入输出类型匹配,就可以在中间插入新的节点。
三、本周尝试:参数注入节点
我这周选择实现的第一个节点是:
参数注入节点
它的作用非常简单:
在策略运行前,把参数动态写入策略代码。
核心思路
原本策略里的参数写死:
context.mom_lookback = 20
context.mom_threshold = 0.02
改成模板形式:
context.mom_lookback = {{mom_lookback}} context.mom_threshold = {{mom_threshold}}
然后在参数节点里填写:
mom_lookback=30
mom_threshold=0.05
节点运行时自动替换:
context.mom_lookback = 30
context.mom_threshold = 0.05
工作流结构
最终形成的工作流:
Python代码输入(模板策略)
↓
参数注入节点
↓
期货回测
↓
策略回测结果
↓
报告展示
参数格式
目前支持两种输入方式。
方式一:key=value(推荐)
mom_lookback=30
mom_threshold=0.05
方式二:JSON
{
"mom_lookback":30,
"mom_threshold":0.05
}
节点实现逻辑
核心步骤其实不复杂:
1 解析参数文本
2 转换为 Python 字典
3 使用正则匹配 {{变量名}}
4 替换模板变量
5 输出完整策略代码
另外增加了一个校验逻辑:
如果策略模板中存在变量,但参数没有提供,就会直接报错。
这样可以避免生成不完整的策略代码。
四、开发过程中踩过的坑
这一部分其实花的时间最多。
1 本地运行尝试失败
一开始心疼算力,其实是想 在本地跑通整个流程。
但是尝试后发现:
开源项目版本已经比较旧,和现在平台的运行环境存在不少兼容问题。
折腾了一段时间后还是放弃了。
说实话有点心疼算力(笑)。
专家模式调试起来确实比较麻烦,一旦运行失败:
算力 -1
所以经常是:
改代码 → 运行 → 报错 → 修改 → 再运行。
整个过程还是比较消耗资源的。
2 节点一直获取不到策略代码
开发过程中后面还遇到一个的问题。
参数节点一直提示:
获取不到上游代码。
排查了很久接口、变量、节点结构,都没有发现问题。
最后才发现:
原来 Python代码输入 节点里的不知道在哪一次修改中策略代码被清空了。
怪不得参数节点一直拿不到代码。
这个问题其实挺隐蔽,如果不仔细检查很难发现。一直以为我节点的问题。
3 工作流保存体验不太顺畅
在开发节点过程中,对工作流保存有一个比较明显的感受:
保存逻辑有点混乱。
有时候需要:
- 保存节点代码
- 保存节点配置
- 保存整个工作流
不同位置都有保存按钮,而且有时候点击保存也不太确定:
到底保存的是节点代码,还是整个工作流。
如果后续能优化的话,我觉得可以考虑: - 明确区分 节点保存 / 工作流保存
- 增加 自动保存
- 增加 工作流历史版本
比如像 Git 那样保存历史版本,如果误删节点或者代码,也可以快速恢复。
这对开发调试会友好很多。
五、参数注入成功运行
在多次调试之后,参数注入节点终于成功跑通。
日志如下:
INFO 2026/3/15 08:18:40
节点 Python代码输入 执行成功
INFO 解析到 2 个参数
mom_lookback = 30 (int)
mom_threshold = 0.05 (float)
INFO 参数注入节点开始执行
INFO --- 替换完成 ---
context.mom_threshold = 0.05
context.mom_lookback = 30
INFO 已接收上游代码,共 212 行
INFO 语法检查通过
INFO 输出代码共 212 行
INFO 节点 参数注入 执行成功
可以看到:
原本策略中的动量阈值成功被修改为 5%。
六、回测运行日志
参数注入后,回测节点也正常运行:
收盘后 20250519 当前持仓合约数: 2
A2507.DCE
多头=309
总盈亏=36783
RB2510.SHF
空头=422
总盈亏=207309
开盘前 20250520
账户总权益: 12994316
策略信号示例:
20250520 A 多头信号
动量 = 5.46%
合约 = A2507.DCE
手数 = 310
20250520 RB 空头信号
动量 = -5.82%
合约 = RB2510.SHF
手数 = 425
说明参数替换后的策略已经正常参与回测。
七、为什么选择这个节点?
在研究工作流结构的时候,其实也考虑过不少可以扩展的节点类型,比如:
- 在策略代码和回测之间增加处理节点
- 在回测之后增加结果分析节点
- 或者增加一些数据处理和过滤节点
最后还是先选择做 参数注入节点,主要有三个原因:
1、改动最小
不需要修改策略主体逻辑,只是在回测前对代码进行一次参数替换,对原有流程影响很小。
2、使用价值最直接
做策略时最常见的操作就是调参。
有了参数注入节点之后,就不需要每次都打开策略代码修改数字,调试效率会高很多。
3、扩展空间比较大
如果这个节点稳定运行,后面其实还可以继续扩展,比如: - 批量测试不同参数组合
- 自动对比不同参数的回测结果
整体会让策略实验更加方便。
八、下一步计划
接下来准备继续尝试扩展一些比较实用的小节点,例如:、
1、标的池过滤节点
在策略运行前,对交易标的进行简单过滤,比如:
- 只保留流动性较好的品种
- 过滤不活跃合约
这样可以让策略运行更加稳定。
通过节点方式实现,也会更方便复用。
小结
这周最大的收获,其实不是写出了一个节点,而是慢慢理解了:
专家模式真正的使用方式。
不是把整个系统全部推翻重写,而是:
在现有流程中,找到合适的位置,插入一个解决具体问题的小节点。
小改动,清晰目标,可随时撤回。
这样才是比较务实的工作流扩展方式。