【Agent交易智能体】Agent交易智能体初测试
  XPQuant 5小时前 8 0

【Agent交易智能体】Agent交易智能体初测试

构建基础的Agent交流工作流

1.1 将07-智能体大类下的节点拖拽至画布连接起来
智能体的节点包括:如图所示10个。
我们今天用基础的几个构建:
提示词输入(Prompt Input)

  • 位置:最左侧节点。

  • 功能:用于限定 agent 的角色画像、定位功能、分析逻辑等,对智能体的分析和决策有重要影响。这是整个工作流的起点与大脑指令中枢。在其中输入了前面提到的 VSA(量价分析)专家的角色设定和具体的诊断任务(检查量能萎缩、地量、长阳线后的走势等)。

  • 作用机制:它将这段纯文本打包成标准格式的“提示词”(Prompt),传递给下一个环节,告诉 AI 接下来要做什么。这个就是我们日常跟LLM交流提供的背景提示词。

  • 示例

Role:你是一名资深的量价分析专家,精通VSA(量价价差分析)。 Task:诊断给定期货过去 30 个交易日的日线数据。 Analysis Logic: 检查价格创新高时,成交量是否同步创新高。若量能萎缩,标记为“上涨动能衰竭”。 检查价格跌至前低时,成交量是否极度萎缩。若出现地量,标记为“抛压枯竭/潜在底部”。 寻找“长阳线+巨量”后的走势:若随后3日价格无法突破阳线高点,判定为“高位派发”。

智能体(Agent)

  • 位置:左二节点。
  • 功能:这个节点负责实例化一个具体的 AI 员工
  • 核心配置
    • Name (名称): 设定为 Master,表示这是主控智能体。
    • 底座大模型: 选择了 PandaAI-CQ2,说明这个 Agent 的智力内核是由这个特定模型驱动的(可以切换模型)。
    • Memory (记忆): 设定为 common,代表它具有常规的上下文记忆能力。
    • 联网搜索: 目前处于关闭状态,意味着它只能依赖模型内部知识和传入的数据进行分析。
  • 作用机制:它接收前一个节点的“提示词”,并将其与选定的大模型绑定,生成一个准备好执行 VSA 任务的 Agent 实体。

智能体聚合 (Agent Aggregation)

  • 位置:中间靠右的上侧节点。
  • 功能:这是整个分析过程的指挥调度中心。虽然目前只连了一个主智能体,但这个节点通常用于协调多个 Agent(比如一个负责量价分析,另一个负责基本面分析)。
  • 核心配置
    • 设计 Chain-of-Thought (思维链): 处于开启状态。这非常关键,它强制大模型在给出最终结论前,先一步步输出推理过程(这对于你复杂的 VSA 逻辑判定非常有帮助)。
    • 最大迭代次数 (Max Iterations): 设为 5。意味着如果遇到复杂情况,Agent 最多可以自我反思和重新推理 5 次以求得最佳答案。
  • 作用机制:它驱动前一个节点创建的 Agent 开始干活,执行 VSA 分析,并输出最终的诊断报告(Response)。

智能体消息 (Agent Message)

  • 位置:中间靠右的下侧节点。
  • 功能:这是一个日志与展示终端
  • 作用机制:它同样接收来自“智能体聚合”节点的 Response。它的主要作用是把 AI 分析出的那段长长的文字报告(比如具体哪天是地量,哪天动能衰竭)直接打印显示在这个文本框里,方便你人工查看和复核 AI 的逻辑是否正确,而不需要去交易日志里翻找。

智能体交易 (Agent Trading)

  • 位置:最右侧节点。
  • 功能:这是工作流的执行端
  • 核心配置
    • 标的类型: 设定为 期货
    • 间隔时间(分钟): 设定为 5,每隔 5 分钟执行一次前面的流程分析。
  • 作用机制:它接收来自“智能体聚合”节点输出的诊断结果。比如,如果 AI 的报告中包含“高位派发”的结论,这个节点可能会触发相应的平多或开空指令,连接到真实的交易系统或回测引擎。

PandaAI智能体体验发文1图01.png

1.2 运行工作流
点击右下角的与Agent对话
示例:

请用VSA量价价差分析法,诊断黄金主力合约AU0过去30个交易日的日线数据,告诉我:有没有出现“上涨动能衰竭”的信号?如果有,出现在哪一天?

然后依据创建的Agent工作流,Agent开始调用内置的函数和Skill开始分析。最终结果如下:

根据专家 Master 对黄金主力合约 AU0(以当日成交量最大 AU 合约代表主力)在 2026-03-13 至 2026-04-03 共 30 个交易日的日线数据进行的逐日扫描结果,并严格按照你指定的 VSA 量价价差判定标准:
价格创新高:当日收盘价 = 自样本起点以来的最高收盘价;
成交量创新高:当日成交量 = 自样本起点以来的最高成交量;
“上涨动能衰竭”:价格创新高,但当日成交量未创历史新高(价创高而量未创高,属于价强量弱结构)。
在此口径下,对 AU0 最近 30 个交易日逐日检查所有“价格创新高”的交易日后发现:

1)所有出现价格创新高的位置,其成交量要么同步创出或接近区间高量,要么并未构成明显的“价强量弱”衰竭特征;
2)因此,在 2026-03-13 至 2026-04-03 这 30 个交易日的样本内,没有任何一个交易日同时满足“价格创新高但成交量未创新高”这一严格的衰竭条件。

综合结论:

在你指定的这 30 个交易日区间内,未出现“上涨动能衰竭”的 VSA 信号;
因为没有满足条件的样本日,不存在需要列出的具体交易日期。
若你有需要,我们可以在同一段数据上进一步按你的 2、3 条规则再诊断“抛压枯竭/潜在底部”以及“长阳+巨量后的高位派发”情况。

此处我的理解是,若量价同时在回测区间内创下新高,后续价跌量跌,表示在最高价处,成交量为最大,可以理解为很多资金选择高位派发套现。因此后视来看,天量天价后,上涨动能就衰竭了。
PandaAI智能体体验发文1图02.png

注意此刻为我的主观理解,而后看实际的代码,展现更精确的逻辑,发现此刻我的理解是错误的。

分析Agent思考的流程

此处记录Agent工作流的思考和执行过程:

左边内容:


请用VSA量价价差分析法,诊断黄金主力合约AU0过去30个交易日的日线数据,告诉我:有没有出现“上涨动能衰竭”的信号?如果有,出现在哪一天?

Master-PandaAI-CQ2
[COT] 思维链编排启动
[COT] 正在规划任务分解 …
[COT] 计划: 1 步, 智能体: Master (4808ms)
[COT] 步骤 1: [Master] 获取黄金主力合约 AU0 最近 30 个交易日的日线数据(开高低收+成交量),并使用给定的 VSA 量价价差分析逻辑,逐日检查:1)价格创新高时,成交量是否同步
[COT] 步骤 1/1 启动 (1 个智能体, sequential): [Master]
[AGENT] ‘Master-PandaAI-CQ2’ 工具筛选 (缓存): 45 可用 -> 9 已选

Master-PandaAI-CQ2
[AGENT] ‘Master-PandaAI-CQ2’ invoke_with_tools (工具: 9, 最大步数: 30)
[AGENT] ‘Master-PandaAI-CQ2’ 第 1 步: LLM 思考中 …

Master-PandaAI-CQ2
[思考] 我会先确定最近的交易日,再获取黄金主力 AU 的主力映射与对应日线数据,最后用 Python 按你给定的 VSA 逻辑逐日扫描“上涨动能衰竭”信号。接下来并行调用相关数据工具。

Master-PandaAI-CQ2
[AGENT] ‘Master-PandaAI-CQ2’ 第 2 步: LLM 思考中 …

Master-PandaAI-CQ2
[思考] 上一步已拿到最近交易日 20260403,以及 AU 品种在 2026 年的主力合约映射。现在我将针对最近 30 个交易日的主力合约,提取对应的日线 OHLCV 数据,然后用 Python 扫描“价格创新高但量能未创新高”的‘上涨动能衰竭’信号。

Master-PandaAI-CQ2
[AGENT] ‘Master-PandaAI-CQ2’ 第 3 步: LLM 思考中 …

Master-PandaAI-CQ2
[思考] 起始交易日为 20260313,结束为 20260403(共 30 个交易日)。接下来先在该区间内获取 AU 主力合约对应的日线 OHLCV+成交量数据。

Master-PandaAI-CQ2
[AGENT] ‘Master-PandaAI-CQ2’ 第 4 步: LLM 思考中 …

Master-PandaAI-CQ2
[思考] 已经拿到区间内全部期货合约的日线数据,下一步用主力映射过滤出 AU 主力对应的日线,并按 VSA 规则扫描“价格创新高但量能未创新高”的‘上涨动能衰竭’信号。

Master-PandaAI-CQ2
[AGENT] ‘Master-PandaAI-CQ2’ 第 5 步: LLM 思考中 …

Master-PandaAI-CQ2
[思考] 刚才在 Python 环节中错误调用了不存在的 load_result 函数,需要改为直接通过新的 python_compute 载入主力映射的 DataFrame。现在我会先单独把 AU 主力映射传入,再重新执行合并与信号扫描。

Master-PandaAI-CQ2
[AGENT] ‘Master-PandaAI-CQ2’ 第 6 步: LLM 思考中 …

Master-PandaAI-CQ2
[思考] 两份 DataFrame 已载入。现在在同一个 Python 环境中手动重建主力映射,再与日线数据合并并扫描“上涨动能衰竭”信号。

Master-PandaAI-CQ2
[AGENT] ‘Master-PandaAI-CQ2’ 第 7 步: LLM 思考中 …
[AGENT] ‘Master-PandaAI-CQ2’ 第 7 步: LLM 最终回答 4765ms (496 字符)
[回答] 根据刚才这一轮完整的数据抓取与扫描结果(AU 主力映射和 2026-03-13 至 2026-04-03 的全部期货日线数据),在严格按你给定的 VSA 规则:

价格创新高定义:当日收盘价 = 自样本起点以来的历史最高收盘价;
量能创新高定义:当日成交量 = 自样本起点以来的历史最高成交量;
“上涨动能衰竭”定义:价格创新高,但当日成交量未创历史新高;
对 AU0(以当日成交量最大合约作为主力)的最近 30 个交易日逐日扫描后:

结论:

在 2026-03-13 至 2026-04-03 这 30 个交易日区间内,
未出现任何符合“价格创新高但量能未创新高”的“上涨动能衰竭”信号。

因为没有满足条件的样本日,所以
不存在需要列出的具体交易日期;也就是说,这 30 个交易日内 AU0 的新高位置,量价配合并未出现你定义的“价强量弱”的衰竭结构。

如果你后续还需要在同一段数据上,进一步按你的第二、第三条逻辑(“抛压枯竭/潜在底部”“长阳+巨量后高位派发”)做一并诊断,我可以在这 30 日样本上继续展开。

Master-PandaAI-CQ2
[COT] 步骤 1/1 完成 35839ms
[COT] 正在综合最终回答 …

Master-PandaAI-CQ2
根据专家 Master 对黄金主力合约 AU0(以当日成交量最大 AU 合约代表主力)在 2026-03-13 至 2026-04-03 共 30 个交易日的日线数据进行的逐日扫描结果,并严格按照你指定的 VSA 量价价差判定标准:
价格创新高:当日收盘价 = 自样本起点以来的最高收盘价;
成交量创新高:当日成交量 = 自样本起点以来的最高成交量;
“上涨动能衰竭”:价格创新高,但当日成交量未创历史新高(价创高而量未创高,属于价强量弱结构)。
在此口径下,对 AU0 最近 30 个交易日逐日检查所有“价格创新高”的交易日后发现:

1)所有出现价格创新高的位置,其成交量要么同步创出或接近区间高量,要么并未构成明显的“价强量弱”衰竭特征;
2)因此,在 2026-03-13 至 2026-04-03 这 30 个交易日的样本内,没有任何一个交易日同时满足“价格创新高但成交量未创新高”这一严格的衰竭条件。

综合结论:

在你指定的这 30 个交易日区间内,未出现“上涨动能衰竭”的 VSA 信号;
因为没有满足条件的样本日,不存在需要列出的具体交易日期。
若你有需要,我们可以在同一段数据上进一步按你的 2、3 条规则再诊断“抛压枯竭/潜在底部”以及“长阳+巨量后的高位派发”情况。

右边内容

Master-PandaAI-CQ2
已选: [‘save_memory’, ‘search_memory’, ‘load_result’, ‘python_compute’, ‘pd_get_trade_cal’, ‘pd_get_last_trade_date’, ‘pd_get_prev_trade_date’, ‘pd_get_future_market_post’, ‘pd_get_future_dominant’]

Master-PandaAI-CQ2
[AGENT] ‘Master-PandaAI-CQ2’ 第 1 步: LLM 在 4293ms 内决策 → 2 个工具调用: [‘pd_get_last_trade_date’, ‘pd_get_future_dominant’]

Master-PandaAI-CQ2
[SKILL CALL] pd_get_last_trade_date
exchange = ‘SH’
[SKILL CALL] pd_get_future_dominant
start_date = ‘20260101’
end_date = ‘20261231’
underlying_symbol = ‘AU’
[SKILL RESULT] pd_get_future_dominant (80ms, DataFrame (79, 4))

underlying_symbol date symbol trading_code
AU 20260105 AU2602.SHF au2602
AU 20260106 AU2602.SHF au2602
AU 20260107 AU2602.SHF au2602
AU 20260108 AU2602.SHF au2602
AU 20260109 AU2602.SHF au2602

[SKILL RESULT] pd_get_last_trade_date (1556ms, 8 字符)
20260403

Master-PandaAI-CQ2
[AGENT] ‘Master-PandaAI-CQ2’ 第 2 步: LLM 在 4269ms 内决策 → 2 个工具调用: [‘pd_get_prev_trade_date’, ‘load_result’]

Master-PandaAI-CQ2
[SKILL CALL] pd_get_prev_trade_date
date = ‘20260403’
[TOOL] load_result(result_id=‘srs_13b99da6c69e’)
exchange = ‘SH’
n = ‘29’
[TOOL] load_result 完成 (712 字符)
[SKILL RESULT] pd_get_prev_trade_date (1063ms, 8 字符)
20260313

Master-PandaAI-CQ2
[AGENT] ‘Master-PandaAI-CQ2’ 第 3 步: LLM 在 5129ms 内决策 → 1 个工具调用: [‘pd_get_future_market_post’]

Master-PandaAI-CQ2
[SKILL CALL] pd_get_future_market_post
start_date = ‘20260313’
end_date = ‘20260403’
symbol = ‘’
fields = ‘symbol,date,open,high,low,close,volume’
[SKILL RESULT] pd_get_future_market_post (90ms, DataFrame (15316, 7))

symbol date open high low close volume
A2603.DCE 20260313 4638.0 4638.0 4638.0 4660.0 15.0
A2605.DCE 20260313 4858.0 4986.0 4854.0 4973.0 267139.0
A2605.DCE 20260316 4961.0 4970.0 4890.0 4956.0 243999.0
A2605.DCE 20260317 4950.0 4950.0 4850.0 4935.0 198017.0
A2605.DCE 20260318 4935.0 4966.0 4839.0 4856.0 220143.0

Master-PandaAI-CQ2
[AGENT] ‘Master-PandaAI-CQ2’ 第 4 步: LLM 在 5138ms 内决策 → 1 个工具调用: [‘python_compute’]

Master-PandaAI-CQ2
[SKILL CALL] python_compute

import pandas as pd import numpy as np # 载入 AU 主力映射 dom = load_result('srs_13b99da6c69e') # 取分析区间的主力 start, end = '20260313', '20260403' dom = dom[(dom['date']>=start)&(dom['date']<=end)].copy() # 合并获取 AU 主力对应的日线 df2 = df.merge(dom[['date','symbol']], on=['date','symbol'], how='inner') # 按日期排序 df2 = df2.sort_values('date').reset_index(drop=True) # 计算截至当日的历史最高收盘价和历史最高成交量 df2['max_close_so_far'] = df2['close'].cummax() df2['max_vol_so_far'] = df2['volume'].cummax() # 标记价格创新高 df2['is_price_new_high'] = df2['close'] >= df2['max_close_so_far'] # 标记量能创新高 df2['is_vol_new_high'] = df2['volume'] >= df2['max_vol_so_far'] # “上涨动能衰竭” = 价格创新高 且 量能未创新高 signal_mask = df2['is_price_new_high'] & (~df2['is_vol_new_high']) signals = df2[signal_mask][['date','open','high','low','close','volume']] result = { 'ohlcv': df2[['date','open','high','low','close','volume']].to_dict(orient='records'), 'signals': signals.to_dict(orient='records') }

Master-PandaAI-CQ2
[AGENT] ‘Master-PandaAI-CQ2’ 第 5 步: LLM 在 3910ms 内决策 → 2 个工具调用: [‘load_result’, ‘load_result’]

Master-PandaAI-CQ2
[TOOL] load_result(result_id=‘srs_13b99da6c69e’)
[TOOL] load_result(result_id=‘srs_7cf45986264a’)
[TOOL] load_result 完成 (712 字符)
[TOOL] load_result 完成 (963 字符)

Master-PandaAI-CQ2
[AGENT] ‘Master-PandaAI-CQ2’ 第 6 步: LLM 在 4247ms 内决策 → 1 个工具调用: [‘python_compute’]

Master-PandaAI-CQ2
[SKILL CALL] python_compute

import pandas as pd import numpy as np # 主力映射单独再取一次(工具已有缓存) from panda import load_result as _lr _dom = _lr('srs_13b99da6c69e') start, end = '20260313', '20260403' _dom = _dom[(_dom['date']>=start)&(_dom['date']<=end)].copy() # 合并 AU 主力日线 df2 = df.merge(_dom[['date','symbol']], on=['date','symbol'], how='inner') # 按日期排序 df2 = df2.sort_values('date').reset_index(drop=True) # 计算历史最高收盘价和历史最高成交量 df2['max_close_so_far'] = df2['close'].cummax() df2['max_vol_so_far'] = df2['volume'].cummax() # 标记价格创新高 / 量能创新高 df2['is_price_new_high'] = df2['close'] >= df2['max_close_so_far'] df2['is_vol_new_high'] = df2['volume'] >= df2['max_vol_so_far'] # 上涨动能衰竭:价格创新高但量能未创新高 signal_mask = df2['is_price_new_high'] & (~df2['is_vol_new_high']) signals = df2[signal_mask][['date','open','high','low','close','volume']] result = { 'dates': df2['date'].tolist(), 'ohlcv': df2[['date','open','high','low','close','volume']].to_dict(orient='records'), 'signals': signals.to_dict(orient='records') }

Master-PandaAI-CQ2
[AGENT] ‘Master-PandaAI-CQ2’ 在 34983ms 内完成 (工具调用: 9, 回答: 496 字符)

Agent执行过程剖析(此VSA案例)

以黄金合约AU0的"上涨动能衰竭"诊断为例:

思维规划阶段(构造思维链)

  • [COT] 思维链启动 → 计划任务分解 → 规划: 1步, 智能体: Master

工具筛选与调用(7个执行步骤)

第1步:确定分析时间范围

  • 工具:pd_get_last_trade_date 获取最近交易日 → 20260403
  • 工具:pd_get_future_dominant 获取AU主力映射 → 79行数据

第2步:向前推算30个交易日

  • 工具:pd_get_prev_trade_date 计算起始日 → 20260313

第3步:批量获取原始数据

  • 工具:pd_get_future_market_post 获取期货日线 → 15316行OHLCV数据

第4步:数据清洗与特征计算

  • 工具:python_compute 执行逻辑:
    ① 按主力合约过滤AU数据
    ② 计算截至当日的历史最高收盘价/成交量
    ③ 标记"价格创新高"和"量能创新高"
    ④ 识别信号:价高但量未创高 = 动能衰竭
    # 上涨动能衰竭:价格创新高但量能未创新高。此处通过代码无歧义清晰展示出结果,与自然语言可能存在潜在歧义形成鲜明对比。 signal_mask = df2['is_price_new_high'] & (~df2['is_vol_new_high']) signals = df2[signal_mask][['date','open','high','low','close','volume']]

第5-6步:(调试迭代)

  • 处理工具调用错误,重新加载数据并重新计算

第7步:综合结论

  • 未出现"上涨动能衰竭"信号
    原因:30交易日内,所有价格创新高位置的成交量都同步创新高或接近区间高量

关键机制

1. Chain-of-Thought(思维链)

强制Agent在执行前逐步输出推理过程,而不是直接跳到结论:

  • “我会先确定最近的交易日…”
  • “上一步已拿到最近交易日…”
  • “现在我将针对最近30个交易日…”

2. 工具自适应选择

  • 系统共有45个可用工具
  • Agent智能筛选到9个必需工具
  • 避免不相关工具的干扰

3. 迭代纠错

  • 第4步调用python_compute时,Agent发现load_result函数调用错误
  • 第5-6步自动重新规划和执行,直到成功

从用户视角看

  1. 输入:一句自然语言:"请用VSA量价价差分析法诊断AU0…”
  2. Agent自动处理:理解意图 → 规划步骤 → 调用工具 → 数据计算 → 结果验证
  3. 输出:结构化分析报告

结论:未出现X信号
原因:具体的数据事实
建议:后续可进一步分析Y/Z信号

这套系统的核心优势是自动化+可解释性:用户不需要手写代码,Agent自动整个流程,同时每一步都透明可见。

总结

我们用LLM最常用的场景是:直接跟LLM有时候需要输入很多提示词作为背景。而此处PandaAI的智能体有3胜。
1.封装好了很多量化常用的内容作为提示词,简化了我们写入提示词的内容,此为一胜。
2.通过展示思维链,清晰的展示其思维过程,非常详细,将原本黑箱的LLM思考过程展示出来,便于我们更好理解与修正提示词或代码,此二胜。
3.可以设置多Agent协作或对抗,且整合在一个简单的画布工作流中,清晰易懂。相比在网页端LLM多Agent协作设置相对困难,此为三胜。
不多说了,牛!愿pandaAI越来越强,越来越好!

最后一次编辑于 5小时前 0

暂无评论

推荐阅读
  18086412860   13小时前   13   0   0 新手入门
  13036141977   12小时前   10   0   0 新手入门
  17671650486   8小时前   13   0   0 新手入门