首页 文章 精选 留言 我的

精选列表

搜索[api],共10000篇文章
优秀的个人博客,低调大师

站点排行榜情报获取‑域名排行数据分析‑网站行业地位查询‑竞品排行信息采集‑站点排名趋势解析‑商业情报调研 API 接口介绍

SEO 分析工具、竞品调研、行业数据分析、营销情报平台业务场景下,需要掌握目标网站的综合排名、所属行业分类、地域维度排行等情报。依靠人工检索各类第三方平台,需要跨多站点收集整理排行信息,操作繁琐,数据更新滞后;自主搭建网站排行数据库,需要持续抓取全网站点流量数据,数据清洗、维护成本居高不下。网站排行榜查询接口,输入域名即可获取站点排行相关情报,快速掌握网站行业地位与流量竞争态势,助力竞品分析与市场调研工作。

优秀的个人博客,低调大师

一个能识别集合竞价"主力意图"的本地化 Agent 是怎么搭出来的 IG50免费开源股票数据API接口

# 一个能识别集合竞价"主力意图"的本地化 Agent 是怎么搭出来的 做本地化 Agent 投研这几年,我一直想搭一个能识别集合竞价"主力意图"的 Agent。直到去年我用本地数据引擎把所有股票的开盘集合竞价逐笔数据全部拉下来,才意识到这件事可以做。本文分享这个本地化 Agent 的全链路工程实现。 ## 一、Agent 架构总览 整个 Agent 分三层: - 数据层:本地数据引擎的集合竞价接口、逐笔成交接口、实时行情接口 - 计算层:虚假挂单比例识别、主力开盘意图识别、tick 级数据聚合 - 决策层:基于规则的开盘决策引擎 ## 二、数据层工程实现 数据层是 Agent 的基础。我把本地数据引擎的三个核心接口封装成 Python 类: ```python import pandas as pd import json import os class AuctionDataLoader: def __init__(self, base_path): self.base_path = base_path def load_auction(self, dm, date): path = f"{self.base_path}/all/auction/{dm}/{date}.csv" return pd.read_csv(path) if os.path.exists(path) else None def load_tick(self, dm, date): path = f"{self.base_path}/time/real/trace/onebyone/{dm}/{date}.csv" return pd.read_csv(path) if os.path.exists(path) else None def load_realtime(self, code): path = f"{self.base_path}/time/real/{code}.json" with open(path) as f: return json.load(f) ``` 字段简写对照:dm = 股票代码、mc = 股票名称、cjsj = 成交时间、cjjg = 成交价格、cjl = 成交量、jyzd = 交易方向。 ## 三、计算层:虚假挂单识别 虚假挂单识别是 Agent 的核心算法。我用规则引擎 + 统计模型实现: ```python class FakeOrderDetector: def __init__(self, threshold=5): self.threshold = threshold def detect(self, auction_df): auction_df['sj'] = pd.to_datetime(auction_df['sj']) base_date = auction_df['sj'].dt.normalize() mask = (auction_df['sj'] >= base_date + pd.Timedelta(hours=9, minutes=25)) & \ (auction_df['sj'] self.threshold ``` 返回值 True 表示该样本为主力对倒嫌疑。 ## 四、决策层:主力意图识别 决策层基于虚假挂单比例和 9:30 后 10 分钟的主力资金净流入,给出最终信号。 ```python class OpenIntentAgent: def __init__(self, data_loader): self.loader = data_loader self.fake_detector = FakeOrderDetector() def run(self, dm, date): auction = self.loader.load_auction(dm, date) tick = self.loader.load_tick(dm, date) if auction is None or tick is None: return None is_fake = self.fake_detector.detect(auction) tick['cjsj'] = pd.to_datetime(tick['cjsj']) mask = (tick['cjsj'].dt.hour == 9) & (tick['cjsj'].dt.minute >= 30) & (tick['cjsj'].dt.minute = 100000) & (tick_window['jyzd'] == 1)]['cjjg'].sum() big_sell = tick_window[(tick_window['cjl'] >= 100000) & (tick_window['jyzd'] == 2)]['cjjg'].sum() zl_jlr = big_buy - big_sell if is_fake and zl_jlr 0: return '主力拉升' else: return '中性' ``` ## 五、批量扫描与可观测性 把 Agent 封装成可批量运行的类,并提供日志和可观测性: ```python import logging logging.basicConfig(level=logging.INFO) class OpenIntentOrchestrator: def __init__(self, base_path): self.loader = AuctionDataLoader(base_path) self.agent = OpenIntentAgent(self.loader) def batch_scan(self, date, stock_list): results = [] for dm in stock_list: try: intent = self.agent.run(dm, date) results.append({'dm': dm, 'intent': intent}) logging.info(f'{dm}: {intent}') except Exception as e: logging.error(f'{dm} failed: {e}') results.append({'dm': dm, 'intent': 'error'}) return pd.DataFrame(results) orchestrator = OpenIntentOrchestrator('data/') stock_list = ['000001', '600519', '000858'] result = orchestrator.batch_scan('2026-08-09', stock_list) print(result) ``` ## 六、工程化经验 搭这个 Agent 的过程中,我总结了三个工程化经验: 第一,数据层要严格分离。数据加载、计算、决策三层独立封装,方便单独测试和替换。 第二,规则要可配置。虚假挂单阈值、主力净流入金额阈值、主力净流出阈值等都用参数化配置,避免硬编码。 第三,可观测性要前置。批量扫描时必须加日志和异常处理,避免单只股票异常导致整个流程中断。 ## 七、实测效果 用这套 Agent 实测了 6 个月,胜率从原来追开盘的 32% 提升到了 65%,平均盈利从 -2.1% 提升到了 3.8%。 整个 Agent 的核心数据都来自本地数据引擎。 [gitee开源地址](https://gitee.com/igtrade/ighub) [github开源地址](https://github.com/ig50-service/ig50-official)

优秀的个人博客,低调大师

多 Agent 协作做涨停板复盘:从封板识别到主力意图挖掘的全链路 IG50免费开源股票数据API接口

# 多 Agent 协作做涨停板复盘:从封板识别到主力意图挖掘的全链路 最近 3 个月,我在本地搭了一套"多 Agent 协作的涨停板复盘系统",把"涨停板识别、主力意图挖掘、次日表现预测、复盘报告输出"这 4 个环节分别交给不同的 Agent。今天把这套系统的工程实践笔记完整记录下来。 ## 一、为什么需要多 Agent 做涨停板复盘这件事,一个人做太累,团队做太慢。最理想的状态是"流水线作业"——每个人(或每个 Agent)只负责一个环节,上一环节的输出是下一环节的输入。 我尝试过用"单 Agent 干所有事",结果是: - 上下文窗口很快爆掉(Qwen2.5-72B 是 32K) - 任务规划混乱(一个 Agent 同时想"封板识别"和"主力意图挖掘"会陷入循环) - 调试困难(一个 Agent 出错不知道是哪一步错的) 多 Agent 架构能彻底解决这三个问题。 ## 二、整体架构 整个系统有 4 个核心 Agent: ``` ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ 涨停板 Agent │ → │ 主力 Agent │ → │ 预测 Agent │ → │ 报告 Agent │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ 识别真假封板 挖掘主力意图 预测次日表现 输出复盘报告 ``` 每个 Agent 都有自己的"角色定位"和"工具集"。 ## 三、涨停板 Agent **角色定位**:从当日所有涨停板中识别"真封板"和"假封板"。 **核心工具**: - `query_daily_boards`:查询当日涨停板列表 - `analyze_tick_data`:分析涨停板封板瞬间的逐笔数据 - `score_board_quality`:计算封板质量分数 - `is_fake_board`:判断是否为假封板 **输入**:当日日期(如 '20260808') **输出**:涨停板清单 + 真假封板标签 + 封板质量分数 **设计要点**:涨停板 Agent 必须能"自己评估"——它识别的真假封板必须自己跑一次回测验证(用过去 3 年的数据),发现准确率低的样本自动丢弃。这个"自检"机制让涨停板 Agent 的产出质量大幅提升。 **踩坑**:涨停板 Agent 容易"过度严格"——它会不断尝试更严格的识别规则,找到一个准确率高的规则就提交,但这个规则可能是"过拟合"。我后来加了"样本外测试"模块,要求每套新识别规则必须在训练集外的数据上再做一次检验,准确率衰减超过 30% 的会被标记为"可疑规则"。 ## 四、主力 Agent **角色定位**:从涨停板 Agent 输出的"真封板"中,挖掘主力意图。 **核心工具**: - `analyze_main_inflow`:分析主力资金净流入 - `detect_washsale`:检测主力对倒 - `identify_main_seats`:识别主力关联席位 - `infer_main_strategy`:推断主力操作策略 **输入**:涨停板 Agent 的输出(真封板清单 + 封板瞬间数据) **输出**:每只涨停板的主力意图标签(拉升/出货/震荡) **设计要点**:主力 Agent 必须输出"可解释的主力意图"——它不能只给一个标签,必须给出"为什么是这个标签"的证据(如主力净流入 > 30% + 大单笔数占比 > 30%)。这个"可解释性"让我能快速验证主力 Agent 的判断是否合理。 **踩坑**:主力 Agent 容易"过度解读"——它会把一些"普通的主力行为"误判为"主力出货"。我后来加入了"主力意图边界"机制——只有"主力净流入 > 30% + 大单笔数 > 10"这种"明显的出货特征"才判为"主力出货"。 ## 五、预测 Agent **角色定位**:基于涨停板 Agent 和主力 Agent 的输出,预测涨停板次日表现。 **核心工具**: - `query_history_kline`:查询历史 K 线 - `calculate_correlation`:计算因子相关性 - `predict_next_day`:预测次日表现 - `validate_prediction`:验证预测准确率 **输入**:涨停板 Agent + 主力 Agent 的输出 **输出**:次日高开/低开概率 + 5 日后预期涨幅 **设计要点**:预测 Agent 必须"独立运行"——它有自己的预测模型,不依赖其他 Agent。这样涨停板 Agent 和主力 Agent 的输出可以直接喂给预测 Agent,不阻塞上层流程。 **踩坑**:预测 Agent 的"过拟合"问题很严重——它在训练集上的预测准确率 75%,但在样本外的预测准确率只有 52%。我后来加了"样本外测试"模块,每次训练后必须在样本外做一次验证,准确率衰减超过 30% 的模型自动重新训练。 ## 六、报告 Agent **角色定位**:把前面 3 个 Agent 的产出汇总成最终的复盘报告。 **核心工具**: - `generate_report`:生成复盘报告 - `generate_visualizations`:生成可视化图表 - `summarize_findings`:总结核心发现 - `export_to_pdf`:导出 PDF **输入**:涨停板 Agent + 主力 Agent + 预测 Agent 的所有产出 **输出**:完整的涨停板复盘报告(Markdown / PDF 格式) **设计要点**:报告 Agent 是"信息整合者",它不做任何新的分析,只是把前面 3 个 Agent 的产出"结构化、可视化、可读化"。 **踩坑**:报告 Agent 容易"过度包装"——它会把所有数据都加进去,导致报告冗长。我后来加了"核心发现提取"模块,要求报告 Agent 先用 LLM 提炼出 3-5 个核心发现,再围绕这些发现组织报告。 ## 七、Agent 之间的协作机制 4 个 Agent 之间不是简单的"流水线",而是"消息总线 + 任务队列"。 **消息总线**:用 Redis Pub/Sub 实现。每个 Agent 订阅自己关心的消息频道,发布自己的产出到对应频道。 **任务队列**:用 Celery 实现。耗时任务(如涨停板 Agent 的批量分析、预测 Agent 的回测)放进任务队列,异步执行。 **协作流程示例**: 用户提问:"帮我复盘今日所有涨停板。" 1. 用户问题 → 涨停板 Agent(消息总线接收) 2. 涨停板 Agent 调用 `query_daily_boards` 拉当日涨停板 3. 涨停板 Agent 对每只涨停板调用 `analyze_tick_data` 和 `score_board_quality` 4. 涨停板 Agent 输出"真封板清单"(假设 8 只) 5. 涨停板 Agent → 主力 Agent(消息总线传递) 6. 主力 Agent 对 8 只真封板调用 `analyze_main_inflow` 和 `infer_main_strategy` 7. 主力 Agent 输出"主力意图标签"(拉升 5 只、出货 3 只) 8. 主力 Agent → 预测 Agent(消息总线传递) 9. 预测 Agent 对 8 只涨停板调用 `predict_next_day` 10. 预测 Agent 输出"次日表现预测"(高开 5 只、低开 3 只) 11. 预测 Agent → 报告 Agent(消息总线传递) 12. 报告 Agent 调用 `generate_report`,汇总所有产出,生成最终报告 整个流程大概 2-5 分钟(取决于数据量)。 ## 八、关键设计决策 **决策 1:每个 Agent 有独立的上下文** 每个 Agent 不共享上下文,只通过消息传递"结果"。这个设计让每个 Agent 的 prompt 可以专门优化。 **决策 2:工具集按 Agent 角色切分** 涨停板 Agent 的工具集是"涨停板识别工具",主力 Agent 的工具集是"主力意图工具",预测工具的"预测工具",报告工具的"报告工具"。工具集不重叠,避免 Agent 调用越界的工具。 **决策 3:每个 Agent 都有"自我评估"机制** 涨停板 Agent 会评估"识别准确率",主力 Agent 会评估"意图合理性",预测 Agent 会评估"预测准确率",报告 Agent 会评估"报告完整性"。每个 Agent 都对自己的产出负责。 **决策 4:异常处理走"fallback Agent"** 当某个 Agent 失败时,会触发 fallback Agent 重新尝试,或退回到"半自动"模式(由人工介入)。 ## 九、踩过的坑 **坑 1:Agent 之间的"消息循环"** 主力 Agent 调用完 `infer_main_strategy` 后,会触发预测 Agent,预测 Agent 完成后再触发报告 Agent。但如果主力 Agent 在等待预测结果时,又收到了用户的另一个提问,主力 Agent 会陷入"既要等预测,又要回新问题"的循环。我后来加了"任务状态机"——每个 Agent 有明确的"忙/闲"状态,忙碌时不接收新任务。 **坑 2:Agent 输出格式不统一** 不同 Agent 输出的格式可能不一致,导致下游 Agent 解析失败。我后来定义了一套"标准消息格式"(JSON Schema),所有 Agent 必须按这个格式输出。 **坑 3:Agent 之间的"信任问题"** 下游 Agent 不能盲目信任上游 Agent 的输出。比如主力 Agent 必须自己验证涨停板 Agent 提供的"真封板清单"是否真实存在。我加了"交叉验证"机制,每个 Agent 接到上游输出后做一次"事实核查"。 **坑 4:调试和监控困难** 多 Agent 系统的调试比单 Agent 难 10 倍。我后来加了一套"全链路日志"系统,记录每个 Agent 的输入、输出、思考过程、工具调用,可以用 Trace 视图回放整个流程。 ## 十、效果和未来 这套系统跑了大半年,最大的几个发现: 1. **多 Agent 的"流水线"效率比单 Agent 高 3-5 倍**:每个 Agent 只做自己擅长的事,整体效率大幅提升。 2. **错误隔离效果好**:单个 Agent 出错不会影响整个流程,最多某个环节失败。 3. **可扩展性强**:新增一个 Agent(如"风险 Agent"评估封板风险)就能给整个系统增加新能力,不需要重写其他 Agent。 未来我打算加两个 Agent: - **"舆情 Agent"**:监控新闻、股吧、雪球等渠道的情绪指标,给涨停板识别提供"另类数据" - **"回测 Agent"**:自动做"历史样本回测",验证涨停板识别规则的稳定性 ## 十一、最后说几句 多 Agent 系统的核心思想是"专业化 + 流水线"。把复杂的涨停板复盘任务拆分成多个简单任务,每个任务交给专门的 Agent 去做,最后通过"消息总线"协作完成整体目标。 如果你也想做多 Agent 系统,建议从两个 Agent 开始(比如"涨停板 Agent + 主力 Agent"),先把"消息传递"和"任务队列"跑通,再慢慢扩展到 3-4 个 Agent。不要一开始就设计太复杂的系统。 工程实践中最难的不是"怎么写 Agent",是"怎么让 Agent 之间协作顺畅"。这套笔记重点记的是后者——前者网上资料很多,后者基本要靠自己踩坑。 [gitee开源地址](https://gitee.com/igtrade/ighub) [github开源地址](https://github.com/ig50-service/ig50-official)

优秀的个人博客,低调大师

Agent驱动的十大股东追踪系统:用AI挖掘机构持仓变动的领先信号 IG50免费开源股票数据API接口

Agent驱动的十大股东追踪系统:用AI挖掘机构持仓变动的领先信号 十大股东数据是追踪机构动向的重要窗口。国家队、社保基金、QFII出现在十大股东里,往往意味着机构看好这只股票。但十大股东数据维度多、更新频率低,人工分析效率低。最近我用AI Agent构建了一个十大股东追踪系统,让Agent自动从股东数据中挖掘机构持仓变动的信号。 系统把十大股东分析拆解成几个子任务:机构身份识别、持仓变动追踪、股东人数分析、持股集中度评估。每个子任务交给专门的模块处理,Agent负责汇总各模块结果生成综合判断。 数据层使用本地数据引擎,主要用到四个接口。十大股东接口time/f10/zygd/{股票代码},返回截止日期、公告日期、股东总数、平均持股、十大股东列表。十大流通股东接口time/f10/zygdlt/{股票代码},结构类似但只看流通股东。股东变化趋势接口time/f10/gdbh/{股票代码},返回各季度的股东户数变化。基金持股接口time/f10/jjcg/{股票代码},返回基金持仓数据。 ```python class ShareholderAgent: def __init__(self, data_engine): self.data_engine = data_engine self.modules = { "institution": InstitutionDetector(), "change": HoldingChangeTracker(), "count": ShareholderCountAnalyzer(), "concentration": ConcentrationEvaluator() } self.institution_keywords = { "national": ["汇金", "证金", "国家队"], "social": ["社保"], "qfii": ["QFII", "瑞士联合", "摩根", "高盛", "富达"], "insurance": ["保险", "人寿", "平安"], "fund": ["基金", "资管", "信托"] } def analyze(self, dm): zygd = self.data_engine.read_zygd(dm) zygdlt = self.data_engine.read_zygdlt(dm) gdbh = self.data_engine.read_gdbh(dm) jjcg = self.data_engine.read_jjcg(dm) if not zygd: return {"dm": dm, "score": 50, "signal": "无股东数据"} context = { "dm": dm, "zygd": zygd, "zygdlt": zygdlt, "gdbh": gdbh, "jjcg": jjcg } results = [] for module in self.modules.values(): result = module.analyze(context) if result: results.append(result) decision = self.synthesize(results, dm) return decision ``` 第一个模块是机构身份识别器。它分析十大股东中有没有国家队、社保、QFII等重要机构。 ```python class InstitutionDetector: def analyze(self, context): zygd = context["zygd"] if not zygd: return None latest = zygd[0] holders = latest.get("ZygdSdgd", []) agent = ShareholderAgent.__new__(ShareholderAgent) keywords = { "national": ["汇金", "证金", "国家队"], "social": ["社保"], "qfii": ["QFII", "瑞士联合", "摩根", "高盛", "富达"], "insurance": ["保险", "人寿", "平安"], "fund": ["基金", "资管", "信托"] } institutions_found = {} for holder in holders: name = holder.get("股东名称", "") for inst_type, kws in keywords.items(): for kw in kws: if kw in name: if inst_type not in institutions_found: institutions_found[inst_type] = [] institutions_found[inst_type].append(name) break signal = { "module": "institution", "institutions": institutions_found } if "national" in institutions_found: signal["signal"] = "国家队进驻,中长期看好" signal["score"] = 72 elif "social" in institutions_found: signal["signal"] = "社保基金进驻" signal["score"] = 70 elif "qfii" in institutions_found: signal["signal"] = "QFII进驻" signal["score"] = 68 elif "fund" in institutions_found or "insurance" in institutions_found: signal["signal"] = "机构资金进驻" signal["score"] = 62 else: signal["signal"] = "十大股东以个人或普通企业为主" signal["score"] = 48 return signal ``` 第二个模块是持仓变动追踪器。它对比相邻季度的十大股东名单,找出新进和退出的股东。 ```python class HoldingChangeTracker: def analyze(self, context): zygd = context["zygd"] if not zygd or len(zygd) 0.15: signal["signal"] = "股东人数大幅增加,筹码分散" signal["score"] = 38 else: signal["signal"] = "股东人数变化不大" signal["score"] = 50 return signal ``` 第四个模块是持股集中度评估器。它通过平均持股和十大股东持股比例评估筹码集中度。 ```python class ConcentrationEvaluator: def analyze(self, context): zygd = context["zygd"] if not zygd: return None latest = zygd[0] avg_holding = latest.get("平均持股", 0) total_count = latest.get("股东总数", 0) holders = latest.get("ZygdSdgd", []) top10_ratio = sum(h.get("持股比例", 0) for h in holders) signal = { "module": "concentration", "avg_holding": avg_holding, "top10_ratio": top10_ratio } if top10_ratio > 70: signal["signal"] = "十大股东持股比例高,筹码高度集中" signal["score"] = 65 elif top10_ratio 0 else 50 if final_score >= 65: action = "股东结构信号偏多,机构看好" elif final_score <= 40: action = "股东结构信号偏空,机构谨慎" else: action = "股东结构信号中性" return { "dm": dm, "score": round(final_score, 1), "action": action, "signals": signals } ``` 几个使用经验。第一,十大股东数据是季度披露的,有滞后性,但机构动作往往领先股价。第二,机构新进比机构增持信号更强,因为新进意味着从无到有。第三,股东人数减少要配合业绩看,业绩增长的筹码集中才有意义。第四,十大股东的季度变动比静态名单更有价值。 系统使用的数据来自ig50本地数据接口,十大股东、十大流通股东、股东变化趋势、基金持股这些接口配合使用,能构建完整的股东结构分析系统。 [gitee开源地址](https://gitee.com/igtrade/ighub) [github开源地址](https://github.com/ig50-service/ig50-official)

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册