
Vibe-Trading 全市场选股工具 screen_market基于东财 clist 接口的 A 股/美股/港股行情排行榜实战指南【免费下载链接】Vibe-TradingVibe-Trading: Your Personal Trading Agent项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-TradingVibe-Trading 内置的screen_market工具MarketScreenerTool封装了东方财富免费免鉴权的全市场行情列表接口push2clist可以一次性获取 A 股、美股、港股全市场的涨跌幅、成交量、成交额、换手率排行榜 Top N无需逐 symbol 抓取。读完本文你将掌握该工具的端点寻址、市场全集选择器fs与排序字段fid映射、工具入参与返回字段约定、限速保护机制以及如何在 Vibe-Trading 中直接调用它回答今天哪些标的涨得最猛、成交最活跃这类问题。一、工具定位一次请求获取整张市场排行榜在交易研究中今天全市场涨跌幅榜成交量最大的个股这类问题是最高频的需求之一。常规做法是遍历候选列表逐个抓行情既慢又容易触发上游限流。Vibe-Trading 的screen_market工具换了一种思路直接调用东财 push2clist接口给定一个市场全集选择器fs服务端就返回每只上市标的一行数据最新价 常用排名指标并由服务端按所选字段fid预排序客户端只需取前 N 行。该工具的实现位于 agent/src/tools/market_screener_tool.py工具名为screen_market类为MarketScreenerTool继承自BaseTool见 agent/src/agent/tools.py通过 agent/src/tools/init.py 中的BaseTool.__subclasses__()自动发现机制注册到工具注册表无需手动配置即可被 LLM 调用。它在技能索引页 agent/src/skills/eastmoney/SKILL.md 中登记在选股检索分类下。二、端点与市场全集选择器fs端点https://push2.eastmoney.com/api/qt/clist/get该 URL 在源码中以模块级常量_CLIST_URL定义agent/src/tools/market_screener_tool.py。clist是东财 push2 行情体系的榜单列表接口与逐标的 K 线接口push2his见 agent/backtest/loaders/eastmoney_client.py分工不同前者回答全市场谁排前面后者回答某只标的历史走势。市场全集选择器fsmarketfsaA 股SH/SZ/主板创业板北交所m:0t:6,m:0t:80,m:1t:2,m:1t:23,m:0t:81s:2048usNASDAQ/NYSE/AMEXm:105,m:106,m:107hk主板 创业板等m:116,m:113,m:114,m:115,m:128这三组选择器在源码_MARKET_FS字典中原样保存agent/src/tools/market_screener_tool.py。理解它们需要对照东财的 secid 寻址体系见 agent/backtest/loaders/eastmoney_client.py 模块文档A 股m:0t:6深市主板、m:0t:80创业板、m:1t:2沪市主板、m:1t:23科创板、m:0t:81s:2048北交所。注意 A 股 secid 中上海用市场号1深市/北交所用0与这里的m:前缀一一对应。美股m:105NASDAQ、m:106NYSE、m:107AMEX。港股m:116主板、m:113/m:114/m:115/m:128创业板及其他市场其中港股 secid 固定用116前缀 5 位零填充代码如00700.HK→116.00700。三、排序字段与查询参数fid 怎么映射排序字段sort_by → fidsort_byfid含义change_pctf3涨跌幅默认volumef5成交量amountf6成交额turnoverf8换手率该映射在源码_SORT_FID字典中原样保存agent/src/tools/market_screener_tool.py。排序恒为降序po1——排行语义天然是取最大的前 N 名。端点查询参数参数取值说明pn1页码固定取第一页pztop_n每页条数po1排序方向1 降序fid排序字段服务端排序依据fs市场全集市场全集选择器fieldsf2,f3,f4,f5,f6,f8,f12,f14请求返回的列这些参数由源码_screen_market函数在调用get_json时逐项拼装agent/src/tools/market_screener_tool.pyfields常量_FIELDS定义在同文件 L52。测试 agent/tests/test_market_screener_tool.py 验证了sort_byamount会正确映射为fidf6、po1、fsm:105,m:106,m:107证明参数拼接链路与文档一致。四、返回字段与信封结构返回字段field id → 输出键field id输出键描述f12code代码f14name名称f2price最新价f3change_pct涨跌幅f4change涨跌额f5volume成交量手f6amount成交额货币f8turnover_rate换手率%源码中由_shape_row函数完成 field id 到输出键的归一化agent/src/tools/market_screener_tool.py。需要注意两个实现细节哨兵值映射为 None东财对无值单元格返回-或整数哨兵-_num函数同文件 L71-L89会将其转换为None而不是误导性的 0.0。测试用例中平安银行的f8为-断言结果为turnover_rate is Noneagent/tests/test_market_screener_tool.py。例如停牌标的的换手率就是None消费方不应把它当 0 处理。diff 结构归一化push2clist返回的data.diff在不同主机上可能是 list 也可能是按索引键控的 dict_screen_market会把 dict 形式list(diff.values())归一化为 listagent/src/tools/market_screener_tool.py测试test_diff_as_dict_is_normalized覆盖了此分支。信封结构成功时返回 JSON 字符串{ ok: true, market: a, source: eastmoney, data: { market: a, sort_by: change_pct, rows: [ {code: 600519, name: 贵州茅台, price: 1688.0, change_pct: 9.98, change: 153.0, volume: 1234567.0, amount: 2080000000.0, turnover_rate: 1.23} ] } }行列表嵌套在data.rows下而非裸列表这是为了与 Vibe-Trading 所有工具的data:{...}信封形状保持一致源码 docstring 明确说明了这一点见 agent/src/tools/market_screener_tool.py。失败时返回{ok: false, error: ...}。五、工具入参market / sort_by / top_n名称类型必选描述marketstrYaA 股/us美股/hk港股sort_bystrNchange_pct涨跌幅默认/volume成交量/amount成交额/turnover换手率降序top_nintN返回 top N1–100默认 30这三个入参的定义在MarketScreenerTool.parametersJSON Schema 形式agent/src/tools/market_screener_tool.py中execute方法对每个参数做严格校验market必须属于_MARKET_FS的三个键之一否则返回market must be one of [a, us, hk]sort_by必须属于_SORT_FID的四个键之一top_n必须是正整数布尔值True也会被拒绝因为isinstance(True, int)为真随后被min(top_n, 100)钳制到上限 100。常量_MAX_TOP_N 100、_DEFAULT_TOP_N 30定义在同文件 L55-L56。测试文件 agent/tests/test_market_screener_tool.py 完整覆盖了这些边界缺失 market、非法 market、非法 sort_by、top_n0、top_nTrue全部返回ok: false错误信封HTTP 失败如 429也会被兜底捕获并转成{ok: false, error: ...}而不是抛异常。六、限速保护为什么可以放心调用东财按源 IP限流并会临时封禁突发请求的客户端因此screen_market的每次请求都走共享的eastmoneyper-host 节流层MarketScreenerTool导入backtest.loaders.eastmoney_client.get_json而后者调用 agent/backtest/loaders/_http.py 的throttled_get_json以host_keyeastmoney通过进程级HostThrottle保证同一 host 桶内相邻请求的最小间隔最小间隔默认1.0秒可由环境变量VIBE_TRADING_EASTMONEY_MIN_INTERVAL调整resolve_min_interval解析见 agent/backtest/loaders/eastmoney_client.py批量任务可适当调大HostThrottle还在间隔之上叠加最多 0.4 秒的随机抖动避免多个并发调用方同时到期齐射见 agent/backtest/loaders/_http.py并复用 per-process 的requests.Session摊薄 TCP/TLS 握手开销。这意味着不要绕过工具对端点直接发起裸 HTTP 突发请求。top_n上限 100 同时保证了全市场列表的响应体规模有界不会撑爆 LLM 上下文——即使请求全市场拿到的也只是一张最多 100 行的紧凑表格。七、调用范例直接调用在agent/目录下运行无需 tokenfrom src.tools.market_screener_tool import MarketScreenerTool # A 股今日涨幅榜前 20 print(MarketScreenerTool().execute(marketa, sort_bychange_pct, top_n20)) # 美股成交额榜前 10 print(MarketScreenerTool().execute(marketus, sort_byamount, top_n10)) # 港股换手率榜前 50 print(MarketScreenerTool().execute(markethk, sort_byturnover, top_n50))与代码搜索联动的研究流程技能脚本 agent/src/skills/eastmoney/scripts/screen_search_example.py 演示了先search_symbol解析标的、再screen_market看市场动向的完整范式——先用SymbolSearchTool把公司名/代码片段解析为候选 symbol再用screen_market拉取市场榜单二者配合即可从模糊查询走到全市场扫描。八、在 Agent 与多 Agent 编排中的使用screen_market在设计上就是给 LLM 用的只读盘点工具MarketScreenerTool的description明确指示模型用这个工具找今天的大幅波动标的或最活跃标的而不是逐个 symbol 抓取agent/src/tools/market_screener_tool.py并声明repeatable True允许在同一轮对话中多次调用以对比不同市场/不同排序。在 Vibe-Trading 的 swarm 多 Agent 编排中screen_market被用作研究型 worker 的universe 枚举工具统计套利台 presetagent/src/swarm/presets/statistical_arbitrage_desk.yaml先screen_market枚举当日热点/活跃标的再以get_market_data拉价格面板配对研究实验室 presetagent/src/swarm/presets/pairs_research_lab.yaml用screen_market枚举{market}/{sector}候选池后再逐对扫描。这体现了该工具的核心定位全市场榜单是研究流水线的起点而非终点——先低成本获得今天谁最热的粗筛结果再对入选标的做深度数据拉取与因子分析避免一开始就盲目遍历全市场。九、适用前提与限制数据范围仅覆盖 A 股、美股、港股三大市场不含期货、期权、外汇等衍生品行情实时性返回的是东财 push2 的行情列表快照适合当日排名类问题历史榜单序列不在本工具职责内限流依赖可靠性建立在共享节流层之上若在工具外绕过节流直连端点可能触发东财按 IP 临时封禁字段精度volume以手为单位amount为货币单位成交额turnover_rate为百分比停牌等无值场景下对应字段为None而非 0下游计算需做空值防御。【免费下载链接】Vibe-TradingVibe-Trading: Your Personal Trading Agent项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考