AI助手多样化研究分享-第二周
  user3190 18天前 91 0

一、期货因子分析

1.1 创建流程

在官网顶部导航栏的<AI工作流>中新建一个空白的工作流,然后使用AI助手来创建工作流.在对话框中输入如下内容:

帮我⽣成⼀个期货因⼦分析的框架;因⼦是关于量价⽅⾯的,在2024-2025年分析,并 给出分析结果

image.png
如上图所示,等待一会,就会生成因子分析流程图.

1.2 学习公式含义

第一个节点里面有很多公式,内容如下:

RANK(RETURNS(VOLUME,5)) + RANK(RETURNS(VOLUME,20)) + RANK((RETURNS(CLOSE,5)+RETURNS(CLOSE,20))RETURNS(VOLUME,5)) - RANK((RETURNS(CLOSE,5)+RETURNS(CLOSE,20))-RETURNS(VOLUME,5)) + RANK(CORR(RETURNS(CLOSE,1),RETURNS(VOLUME,1),20)) + RANK(CORR(RETURNS(CLOSE,1),RETURNS(VOLUME,1),60))

假如我们不清楚含义,可以复制下来,咨询deepseek、千问这些,

咨询千问

提示词如下:

帮我解释下pandaai的公式,公式如下RANK(RETURNS(VOLUME,5)) + RANK(RETURNS(VOLUME,20)) + RANK((RETURNS(CLOSE,5)+RETURNS(CLOSE,20))RETURNS(VOLUME,5)) - RANK((RETURNS(CLOSE,5)+RETURNS(CLOSE,20))-RETURNS(VOLUME,5)) + RANK(CORR(RETURNS(CLOSE,1),RETURNS(VOLUME,1),20)) + RANK(CORR(RETURNS(CLOSE,1),RETURNS(VOLUME,1),60)).官方有因子编写与函数参考手册,参考链接为:https://www.pandaai.online/community/article/72

我使用的是千问,解释如下图:

image.png

咨询pandaai

当然作为要一直用pandaai的我们,肯定要用pandaai自己的工具啦.使用方法,在画布中单独创建一个python节点,问完之后删除即可.

image.png

点击python节点的 “代码” 进入代码助手,进行提问.

image.png

如上图,可以看出,pandaai的代码助手回答的也是很好的.

1.3 启动工作流进行回测

点击页面右上角的 <启动工作流> ,等待一会就能回测完成.

1.4 查看回测结果

部分截图如下:

image.png

image.png

1.5 注意事项

这个因子分析,目前暂时不支持实盘和仿真.如果应用实盘,报错如下:
image.png

二、期货策略回测

1.1 创建流程

在官网顶部导航栏的<AI工作流>中新建一个空白的工作流,然后使用AI助手来创建工作流.在对话框中输入如下内容:

帮我⽣成⼀个期货策略回测的框架,策略逻辑是布林带突破,在沪银主⼒合约上测 试,时间范围2025年。

image.png

如上图所示,等待一会,就会生成因子分析流程图.

1.2 理解⼯作流结构与代码逻辑

点击 <Python代码输⼊> 节点,将弹出一个代码编辑框,左侧是源代码,右侧是AI代码助手.我们先大概看下代码,如果有不懂的可以在右侧进行提问.示例如下图:
image.png
右侧代码解释很详细,新手也能看得懂.

如果你除了源码之外还有别的不懂,也可以直接问,比如专业术语,如下图:
image.png

还可以让AI代码助手给你总结下这个策略,如下图:
image.png

1.3 修改与调试⼯作流

1.3.1 增加⽌损条件,亏损超过4.4%平仓

直接跟AI代码助手说出自己的想法,然后等待它的修改,如下图:
image.png

大致看一遍它给出的代码,认为没问题就点击 应用 按钮,如下图:
image.png
然后再点击左侧代码框里面的 应用,然后点击 保存 即可,如下图:
image.png

1.3.2 将回测时间改为20250601到20260201

直接将想法跟AI代码助手说,如下图:
image.png

再次回测
再次点击右上角的 启动工作流 ,如下图:
image.png
如上图,工作流报错,现在还可以点击 “AI智能修复” 按钮快捷修复.点击后会自动跳转到AI代码助手,并回发送 “根据运行日志修复错误” ,这个错误日志在系统里面是有保存的,底层通过一些工具将日志拼接到提示词里面,然后AI助手就可以快速修复了,不需要我们手动复制日志报错.是不是很方便?如下图:
image.png

如果不使用上图的 AI智能修复,我们点击python节点,弹出编辑框后,右下角也会自动提示上次运行报错,这里也可以使用 AI智能修复,如下图:
image.png
修改后发现还是不行,经过几次调试,发现是回测时的时间问题,回测结束时间为20260122还是能回测成功的(当前日期为2026年2月27日),但是改为20260123及之后就不行了,应该是数据有问题,回头将问题提交上去,看看是不是bug.
正常运行如下图:
image.png
报错如下图:
image.png

1.3.3 将测试合约从沪银改为沪金

直接跟AI代码助手说出自己的想法,然后等他修改,如下图:
image.png
然后进行回测和查看结果.
image.png

三、连接仿真实盘

1.1 创建实盘账号

点击左侧导航栏 <超级图表> ,按下图红色标记操作,先点击 “实盘”,然后点击 “账号管理”,如下图
image.png
然后点击 创建仿真盘账号,如下图
image.png
然后输入账号名称,这个字母加数字都可以,然后点击 确认添加 ,如下图
image.png
然后点击创建实盘,如下图:
image.png
然后填写实盘名称,运行工作流这个,选择刚刚保存的工作流,实盘账号,选择刚刚创建的仿真盘账号,如下图:
image.png
运行成功,如下图:
image.png

四、未解决的问题

我写的期货策略,周期是天,然后我应用因为周期比较久,我就想把运行周期改为1分钟,我的做法是将回测频率从1d改为1M,然后关闭实盘重新启动,发现会找不到对应的主力合约.我就修改了个周期,如下图:
image.png
image.png
上面是夜盘测试的,现在我在白天又重新启动了下,发现不报找不到对应主力合约了,但是就开始打印了些日志,后面好几分钟过去了,也没新的日志.截图的时候是2026-2-28 09:48,已经过去20分钟了.如下图:
image.png
在回测里面是正常的,每一分钟都能打印出来,我调试了几次,实盘都没正常.后续再调试下,然后也让官方帮我看看.回测如下图:
image.png

后来我写了个特别简单的示例,在 def handle_data(context, bar) 这个方法里面,只打印K线信息,发现回测时不管是1M还是1d都是好的,但是在实盘中,还是启动的时候打印几条日志,后面无论多久都没有日志了.

from panda_backtest.api.api import * from panda_backtest.api.stock_api import * import panda_data def initialize(context): """策略初始化:只做数据遍历,不做任何交易""" # 虽然不下单,但需设置期货账号字段以防框架访问 context.account = "5588" # 回测区间(供日志使用,真正的起止日期由回测引擎配置) context.start_date = "20260201" context.end_date = "20260205" # 预先查询整个回测区间内沪银(品种代码 AG)的主力合约映射 dominant_df = panda_data.get_future_dominant( underlying_symbol=["AG"], start_date=context.start_date, end_date=context.end_date, ) # 构建 {date: symbol} 映射,date 统一为字符串格式 YYYYMMDD context.ag_dominant_map = {} if dominant_df is not None and not dominant_df.empty: for _, row in dominant_df.iterrows(): trade_date = str(row["date"]) symbol = row["symbol"] # 例如 "AG2602.SHF" context.ag_dominant_map[trade_date] = symbol print("初始化完成: 预加载沪银主力合约映射条数 = {}".format(len(context.ag_dominant_map))) def handle_data(context, bar): """每分钟回调:仅打印当前时间点沪银主力合约的分钟K线信息,不做任何交易""" # 当前回测日期(YYYYMMDD) trade_date = str(context.now) # trade_time 有的环境为字符串,有的为 datetime;统一转成 HHMMSS 字符串 trade_time_raw = getattr(context, "trade_time", None) trade_time = "" if trade_time_raw is not None: # 如果是 datetime 类型,提取时间再格式化 try: # datetime 或带 time() 方法 if hasattr(trade_time_raw, "strftime"): trade_time = trade_time_raw.strftime("%H%M%S") else: # 其他类型,一律转字符串 trade_time = str(trade_time_raw) except Exception: trade_time = str(trade_time_raw) # 根据日期获取当日沪银主力合约 symbol = context.ag_dominant_map.get(trade_date) if not symbol: print(f"{trade_date} 无沪银主力合约映射,跳过该分钟") return # 从 bar 对象中获取该合约的当前分钟行情 try: future_bar = bar[symbol] except Exception: # 有可能该分钟还没有该合约的行情 print(f"{trade_date} {trade_time} 无行情: {symbol}") return # 组装一个可读的时间戳 ts = trade_date if trade_time and len(str(trade_time)) == 6: tt = str(trade_time) ts = f"{trade_date} {tt[:2]}:{tt[2:4]}:{tt[4:6]}" # 打印分钟K线信息:时间戳、合约、开高低收、成交量 print( "[沪银主力分钟K线] 时间: {ts}, 合约: {symbol}, 开: {o}, 高: {h}, 低: {l}, 收: {c}, 成交量: {v}, 持仓量: {oi}, 成交额: {amt}".format( ts=ts, symbol=symbol, o=future_bar.open, h=future_bar.high, l=future_bar.low, c=future_bar.close, v=future_bar.volume, oi=getattr(future_bar, "oi", 0), amt=getattr(future_bar, "turnover", 0.0), ) ) # 不进行任何交易操作 return
最后一次编辑于 17天前 0

暂无评论

推荐阅读
  18764136999   2天前   18   0   0 中频交易
657
  13764338794   8天前   34   0   0 中频交易