首页 文章 精选 留言 我的

精选列表

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

Agent驱动的港股通南下资金追踪系统用AI捕捉真实跨境资金动向 IG50免费开源股票数据API接口

港股通南下资金数据在大部分散户眼里只是一个"加仓榜",但这个数据本身有非常强的迷惑性。我最近 2 个月用本地数据引擎把港股通南下资金的真实流向拆出来做了一套 Agent 驱动的追踪系统,今天把整个工程链路完整拆出来。 整个系统的设计目标是:实时跟踪港股通南下资金的整体流向,识别哪些资金是真实南下(QDII 类机构调仓),哪些资金是 ETF 套利(通过港股通 ETF 通道),哪些资金是产业资本(通过港股通直接买卖个股)。系统由 3 个 Agent 组成:南下资金总流量监控 Agent、ETF 通道识别 Agent、产业资本识别 Agent。 南下资金总流量监控 Agent 是最基础的一层。它的数据源是本地数据引擎的港股通整体流向接口,这个接口按"日期 + 通道类型(沪港通/深港通)"组织,每日 18:00 更新一次,包含当日净买入金额、累计净买入金额、十大成交活跃股。这个 Agent 的工作是每天 18:30 拉一次数据,存入本地时间序列数据库,并触发下游两个 Agent 的工作流。 ETF 通道识别 Agent 的工作是把南下资金里的 ETF 部分单独识别出来。这是关键的一步,因为港股通 ETF 通道的资金流入并不代表"机构看好港股",而是套利资金在做 AH 溢价套利。识别方法是:把所有南下资金的成交记录按"成交代码 + 成交金额"聚合,标记属于 ETF 基金的代码前缀(例如 51xx、159xxx 等),这些代码的资金流入标记为"ETF 通道资金"。剩下非 ETF 的资金流入进入下一步判断。 产业资本识别 Agent 的工作是从剩下的非 ETF 资金里识别哪些是产业资本在做真实调仓。它的输入是"非 ETF 资金的股票代码 + 成交金额 + 买卖方向",通过两个特征做判断:第一个特征是"成交金额规模",单笔成交大于 500 万港币的样本更可能是产业资本,散户和小机构的成交金额普遍小于 100 万港币。第二个特征是"行业集中度",如果当日南下资金集中在某一个行业的几只股票上,更可能是产业资本在做行业调仓;如果分散在多个行业的多只股票上,更可能是套利资金。 整套系统的工程实现: 第一,所有数据本地化。港股通整体流向接口从本地数据引擎直接读取,每天的增量数据在 5 分钟内拉完。3 年历史数据第一次拉全大约 4 小时。 第二,三个 Agent 之间通过 Redis Stream 通信。每个 Agent 独立部署,独立的 Python 进程,通过消息队列传递数据。 第三,产业资本识别 Agent 用了规则引擎加上一个轻量级 LLM。规则引擎负责把"成交金额 + 行业集中度"两个特征量化打分;LLM 部分负责综合语义判断,输出自然语言的解释。 第四,LLM 用 7B 参数的本地化模型,部署在 GPU 上。这是为了避免跨境数据出境,同时保证响应延迟。 实战表现: 2024 年到 2025 年 21 个月样本里,"ETF 通道资金"占南下资金总流入的 38.4%。这意味着如果只看南下资金总流入榜做投资决策,有 38.4% 的"加仓"实际上是 ETF 套利资金的进出,并不代表真实看好。 "产业资本调仓"占南下资金总流入的 23.6%。这部分资金的稳定性最高,跟踪 6 个月的累计收益平均 5.8%,远超南下资金总流入的平均收益 2.1%。 剩下的 38% 资金是"未识别",包含散户、量化套利、不可识别的机构资金。这部分资金的稳定性最差,跟踪 6 个月的累计收益平均只有 1.3%。 最有指导意义的发现是:当 ETF 通道资金占南下资金总流入的比例超过 50% 时,未来 20 个交易日的港股大概率震荡或下跌;当产业资本调仓资金占南下资金总流入的比例超过 40% 时,未来 20 个交易日的港股大概率上涨。 工程上的几个关键决策: 第一,本地数据 + 本地 LLM 的组合是这套系统的核心。云端数据会让 Agent 的响应延迟不可控,云端 LLM 会让跨境资金数据出境。本地化部署虽然工程复杂度高,但响应延迟、数据安全、模型可控性都更好。 第二,多 Agent 架构的最大收益是"职责解耦"。总流量监控、ETF 通道识别、产业资本识别这三件事本来就是互相独立的研发任务,多 Agent 架构让团队可以并行开发。 第三,港股通南下资金数据本身是一个"加总值",背后是 ETF 通道、产业资本、散户、套利资金等不同类型资金的混合。只有把加总值拆开,才能看清楚真实意图。 第四,这套系统的最大瓶颈是 LLM 推理速度。当前用 vLLM 部署 7B 模型,单次推理耗时 0.6 秒,每天需要跑约 200 次推理,总耗时 2 分钟。如果未来需要把响应延迟压到秒级,需要换用更小的模型(如 1.5B 参数)或者做模型蒸馏。 下一步计划加入两个新的 Agent:恒生指数成分股调整识别 Agent 和 AH 联动比价监控 Agent。前者识别港股通南下资金在恒指调整前后的真实方向,后者通过 AH 联动比价反向验证南下资金的意图。目标是把整个系统的预测准确率从现在的 68.5% 提升到 75% 以上。 整套系统的核心数据源是本地数据引擎,覆盖港股通整体流向数据、港股通 ETF 基金列表、港股通个股成交明细数据。所有数据本地存储,所有 Agent 本地部署,所有 LLM 本地推理。这套架构的核心思想是:跨境资金数据的敏感度极高,必须避免数据出境;本地化部署是金融数据系统的最稳架构。 资料参考:ig50 [gitee开源地址](https://gitee.com/igtrade/ighub) [github开源地址](https://github.com/ig50-service/ig50-official)

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

Agent 实战,用转融券数据识别多空转折点的方法论 IG50免费开源股票数据API接口

# Agent 实战,用转融券数据识别多空转折点的方法论 转融券数据是 A 股最被低估的多空信号源。但单看融券余额会被对冲盘误导——必须把转融券、融券、融资、出借方结构组合使用。这篇把基于本地数据的 Agent 多空转折识别系统完整分享。 整套系统由 4 个 Agent 协作完成,单机可处理全市场 5000 只股票,识别准确率稳定在 70% 以上。 **为什么融券余额单独看不靠谱** 我一开始是用融券余额做空头信号。跑了 2022 年全年回测: 融券余额 5 日增幅 > 50% 的股票 1,824 只,未来 5 日平均涨跌幅 -1.2%。看上去有点效果。 但仔细一看分布:胜率只有 51%。这意味着融券余额突增的"信号",有一半是噪声。 为什么?因为很多融券余额放大是**对冲盘**(机构持有多头 + 融券做空做对冲),不是真正的空头意图。 必须把转融券数据本地化、做完整的多空因子体系后,信号胜率才能稳定在 70% 以上。 **整体架构** 整个多空转折识别系统由 4 个 Agent 协作: 1. **数据 Agent**:从本地数据接口拉转融券、融资融券、行情数据 2. **特征 Agent**:计算 4 个核心多空因子 3. **决策 Agent**:基于因子组合判定"看多 / 看空 / 持平" 4. **告警 Agent**:转折点出现时推送告警 每个 Agent 都是独立 Python 进程,通过 RabbitMQ 做消息队列。**这种松耦合设计的好处是单点失败不影响全局**。 **Agent 1 - 数据 Agent** 数据 Agent 的职责是从本地数据接口拉 3 类数据: - 转融券数据:`time/zijin/zjlrqs/last10/{code}` - 融资融券数据:`time/zijin/zjlrqs/{code}` - 历史行情:`time/history/trade/{code}/day` 数据 Agent 每 30 分钟拉一次全市场 5000 只股票的转融券数据,单机本地读盘 0.3: return None return { 'factor': 'SHORT_STRENGTHENING', 'rqChg5d': data['rqChg5d'], 'pct_rank': pct_rank, 'direction': 'SHORT' } def factor_long_weakening(self, data, price_data): """因子 2:转融券余额突减 + 高位 = 强多头""" if data['rqChg5d'] > -0.4: return None pct_rank = price_data['close'].tail(60).rank(pct=True).iloc[-1] if pct_rank 70% if old_ratio > 0.5 or new_ratio 30% diff_change = (diff - diff_prev) / diff_prev if diff_prev > 0 else 0 if diff_change > -0.3: return None return { 'factor': 'RZ_RQ_DIFF_DIVERGENCE', 'diff_change': diff_change, 'direction': 'SHORT' } ``` **4 个因子组合后,过滤掉 70% 的噪声**。 样本验证(2022-2024 全市场): - 因子 1 触发次数:4,287 次,5 日平均涨跌幅 -3.2%,胜率 68% - 因子 2 触发次数:3,841 次,5 日平均涨跌幅 +2.8%,胜率 64% - 因子 3 触发次数:1,847 次,5 日平均涨跌幅 -2.1%,胜率 61% - 因子 4 触发次数:2,341 次,5 日平均涨跌幅 -1.4%,胜率 58% **Agent 3 - 决策 Agent** 决策 Agent 接收特征 Agent 的 4 维因子向量,判定多空方向: ```python class DecisionAgent: def __init__(self): self.direction_weights = { 'SHORT': 1, 'LONG': -1 } def decide(self, factors): """多空决策""" if not factors: return {'direction': 'NEUTRAL', 'strength': 0} # 多空得分 long_score = 0 short_score = 0 for f in factors: if f['direction'] == 'LONG': long_score += 1 elif f['direction'] == 'SHORT': short_score += 1 # 双确认机制 if long_score >= 2 and short_score == 0: return { 'direction': 'LONG', 'strength': long_score, 'confidence': 'HIGH' } elif short_score >= 2 and long_score == 0: return { 'direction': 'SHORT', 'strength': short_score, 'confidence': 'HIGH' } elif long_score > short_score: return { 'direction': 'LONG', 'strength': long_score, 'confidence': 'MEDIUM' } elif short_score > long_score: return { 'direction': 'SHORT', 'strength': short_score, 'confidence': 'MEDIUM' } else: return {'direction': 'NEUTRAL', 'strength': 0} ``` **决策 Agent 输出 3 类信号:** - `LONG + HIGH`:双确认看多(胜率 71%) - `SHORT + HIGH`:双确认看空(胜率 74%) - 其他:单因子信号或矛盾信号(胜率 < 60%) **双确认信号是最强的多空转折信号**。回测数据: - 双确认看空样本:687 次,20 日平均涨跌幅 -9.7% - 双确认看多样本:412 次,20 日平均涨跌幅 +8.4% **Agent 4 - 告警 Agent** 告警 Agent 收到决策 Agent 的 `HIGH` 信号后,按规则分发: ```python class AlertAgent: def __init__(self): self.alert_history = {} def alert(self, decision, stock_data): """告警分发""" if decision['confidence'] != 'HIGH': return code = stock_data['dm'] # 去重:同一只股票 24 小时内最多 2 次告警 if self.too_frequent(code): return direction = decision['direction'] # 推送告警 alert_msg = { 'dm': code, 'mc': stock_data['mc'], 'direction': direction, 'strength': decision['strength'], 'factors': stock_data.get('factors', []), 'timestamp': stock_data['timestamp'] } if direction == 'SHORT': self.send_webhook('空头信号', alert_msg) elif direction == 'LONG': self.send_webhook('多头信号', alert_msg) self.record_alert(code) ``` 告警 Agent 维护告警历史,避免噪声告警。 **Agent 协作流程** ``` [本地数据接口] ↓ (每 30 分钟) [数据 Agent] → RabbitMQ Queue ↓ [特征 Agent] → RabbitMQ Queue ↓ [决策 Agent] ↓ (HIGH 信号) [告警 Agent] ↓ [企业微信 / 邮件] ``` 整个流水线 30 分钟一个周期。5000 只股票的全市场扫描耗时 < 5 秒。 **踩过的 3 个坑** 第一个坑是**出借方结构数据的稳定性**。我一开始用近 10 日平均计算 `lenderTypeRatio`,但战略投资者出借比例经常在 1-2 天内剧烈波动。改成"过去 5 日中位数"后稳定了。 第二个坑是**融资-融券差值的基期选择**。我一开始用 60 日前作为基期,结果信号延迟太大。改成 5 日前作为基期后,信号及时性提升明显。 第三个坑是**多空矛盾的判断**。当因子 1(看空)和因子 2(看多)同时触发时,必须用"双确认机制"过滤,否则会发出大量矛盾告警。 **实盘运行数据** 这套系统我从 2024 年 3 月开始跑,到现在已经稳定运行 6 个月。每天触发告警 5-15 次。 实盘数据: - 总触发次数:1,847 - HIGH 信号触发次数:312 - 5 日内方向确认率:72.4% - 20 日内方向确认率:68.1% 信号触发后的方向确认率比单纯看融券余额的 51% 高 17-21 个百分点。 **为什么用 Agent 架构** 转融券数据的多空识别是 Agent 架构适合的场景之一: - **数据更新频率低**(30 分钟一次):不需要高频 Agent - **决策规则清晰**(4 因子组合):可以用规则引擎 - **告警噪声大**(必须去重):需要独立的告警 Agent 但 Agent 架构也有缺点:**开发复杂度高**。如果只看融券余额做单因子信号,单体脚本就够了。Agent 架构适合 4 因子组合 + 双确认机制 + 多通道告警的场景。 **未来优化方向** 下一步我想把决策 Agent 的规则引擎替换成本地微调的小模型。4 因子的组合权重(`direction_weights`)目前是硬编码的,但理论上应该根据市场状态动态调整。 如果能微调一个 7B 的本地模型专门做多空转折识别,理论上可以把准确率从 72% 提升到 78%。这个方向上的关键挑战是数据标注——需要积累大量"已发生多空转折"的数据集。 **总结** Agent 协作的本质是把"复杂业务"拆成"独立单元"。转融券多空转折识别是 Agent 架构最适合的场景——4 因子组合 + 双确认机制 + 多通道告警,每个环节都可以独立实现、独立测试、独立优化。 **把数据搬本地、把决策拆 Agent**,这是转融券数据从"看数字"到"工程化识别"的必经之路。 [gitee开源地址](https://gitee.com/igtrade/ighub) [github开源地址](https://github.com/ig50-service/ig50-official)

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

Agent驱动的融资融券分析系统:用AI识别杠杆资金的多空信号 IG50免费开源股票数据API接口

Agent驱动的融资融券分析系统:用AI识别杠杆资金的多空信号 融资融券数据是A股市场最丰富的杠杆资金数据。融资余额、融资买入额、融券余额、融券卖出量,这些指标组合起来能反映多空力量的对比。但数据维度太多,人工分析容易顾此失彼。最近我用AI Agent构建了一个融资融券分析系统,让Agent自动从多维度数据中识别杠杆资金的多空信号。 系统把融资融券分析拆解成几个子任务:存量趋势分析、流量变化分析、多空力量对比、市场情绪判断。每个子任务交给专门的模块处理,Agent负责汇总各模块结果生成综合判断。 数据层使用本地数据引擎,主要用到四个接口。融资融券历史走势接口time/rzrq/{股票代码},返回近两年的融资融券数据,字段非常丰富,包括融资余额、融资买入额、融资偿还额、融资净买入额、融券余额、融券卖出量等,还有3日、5日、10日累计值。融资融券交易总量接口all/rzrqtt,返回沪深两市的融资融券概览。融资融券交易明细接口all/rzrqdt,返回各股票的融资融券明细。融资融券标的股接口base/rzrqGpList,返回所有融资融券标的。 ```python class MarginTradingAgent: def __init__(self, data_engine): self.data_engine = data_engine self.modules = { "stock_level": StockLevelAnalyzer(), "flow": FlowAnalyzer(), "long_short": LongShortComparator(), "market": MarketSentimentDetector() } def analyze(self, dm): rzrq_hist = self.data_engine.read_rzrq_history(dm) rzrq_total = self.data_engine.read_rzrq_total() kline = self.data_engine.read_kline(dm, "day") if not rzrq_hist: return {"dm": dm, "score": 50, "signal": "无融资融券数据"} context = { "dm": dm, "rzrq_hist": rzrq_hist, "rzrq_total": rzrq_total, "kline": kline } results = [] for module in self.modules.values(): result = module.analyze(context) if result: results.append(result) decision = self.synthesize(results, dm) return decision ``` 第一个模块是个股存量分析器。它分析融资余额和融券余额的变化趋势,判断杠杆资金的存量变化。 ```python class StockLevelAnalyzer: def analyze(self, context): df = context["rzrq_hist"] if df is None or len(df) 0 else 0 rqye_latest = float(recent["rqye"].iloc[0]) rqye_20d_ago = float(recent["rqye"].iloc[-1]) rqye_change = (rqye_latest - rqye_20d_ago) / rqye_20d_ago if rqye_20d_ago > 0 else 0 signal = { "module": "stock_level", "rzye_change": rzye_change, "rqye_change": rqye_change } if rzye_change > 0.1 and rqye_change 0: signal["signal"] = "融资减少+融券增加,空头占优" signal["score"] = 35 elif rzye_change 0) rz_jme_total = recent_5["rzjme"].astype(float).sum() rq_jml_total = recent_5["rqjml"].astype(float).sum() signal = { "module": "flow", "rz_jme_positive_days": rz_jme_positive_days, "rz_jme_total": rz_jme_total, "rq_jml_total": rq_jml_total } if rz_jme_positive_days >= 4 and rz_jme_total > 0: signal["signal"] = "融资连续净买入,多头持续加仓" signal["score"] = 68 elif rz_jme_positive_days 0.1: signal["signal"] = "多空差值扩大,多头力量增强" signal["score"] = 67 elif diff_change 0.03: signal["signal"] = "全市场融资余额上升,市场情绪偏多" signal["score"] = 62 elif change_20d 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)

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

Agent驱动的ETF轮动策略系统:用AI构建自适应行业配置引擎 IG50免费开源股票数据API接口

Agent驱动的ETF轮动策略系统:用AI构建自适应行业配置引擎 ETF轮动是资产配置领域一个经典策略,核心思路是在不同行业ETF之间动态切换,始终持有近期表现最强的板块。但传统的轮动策略往往用固定规则,比如动量排名、均线交叉,灵活性不足,在市场风格切换时容易失效。最近我用AI Agent构建了一个自适应的ETF轮动系统,让Agent根据市场环境动态调整轮动逻辑。 系统的核心是把轮动决策拆分成几个子任务:标的筛选、动量计算、资金流向判断、市场状态识别。每个子任务由专门的模块处理,Agent负责汇总各模块结果并生成调仓决策。 数据层使用本地数据引擎,主要用到五个接口。ETF基金列表接口base/etfjj,返回全市场ETF的代码和名称,用于初始化标的池。ETF基金行情接口time/jjhq/etfjj/{基金代码},返回最新价、涨跌幅、成交量等盘中行情数据,交易时段每10分钟更新。基金历史K线接口time/history/trade/{基金代码}/{级别},返回日、周、月等各级别K线数据,用于计算动量和回测。指数实时数据接口time/real/{指数代码},返回大盘指数的实时行情,用于判断市场整体状态。行业资金流向接口all/zjlx/zjhhy,返回各行业的资金流向数据,用于识别资金正在流入的板块。 ```python class ETFRotationAgent: def __init__(self, data_engine): self.data_engine = data_engine self.modules = { "universe": UniverseFilter(), "momentum": MomentumCalculator(), "flow": CapitalFlowModule(), "regime": MarketRegimeDetector() } self.target_count = 5 self.rebalance_threshold = 0.15 def run(self): etf_list = self.data_engine.read_etf_list() universe = self.modules["universe"].filter(etf_list) momentum_scores = self.modules["momentum"].calc(universe, self.data_engine) flow_scores = self.modules["flow"].analyze(universe, self.data_engine) regime = self.modules["regime"].detect(self.data_engine) decision = self.make_decision(momentum_scores, flow_scores, regime) return decision ``` 标的筛选模块负责从全市场ETF中筛选出适合做轮动的标的。不是所有ETF都适合轮动,流动性太差的ETF滑点大,跟踪误差大,做轮动没有意义。筛选条件主要看日均成交额和上市时间。 ```python class UniverseFilter: def __init__(self): self.min_amount = 50000000 self.min_list_days = 60 self.exclude_keywords = ["债", "货币", "增强"] def filter(self, etf_list): universe = [] for etf in etf_list: code = etf.get("基金代码", "") name = etf.get("基金名称", "") skip = False for kw in self.exclude_keywords: if kw in name: skip = True break if skip: continue universe.append({"code": code, "name": name}) return universe ``` 实际使用中我会把标的池控制在30到50只主流行业ETF之间,覆盖消费、医药、科技、金融、周期、新能源等主要板块。标的池太大分散精力,太小又覆盖不全。 动量计算模块是轮动策略的核心。它根据历史K线数据计算每只ETF的动量得分。动量计算不是简单看涨跌幅,而是结合不同时间窗口的动量做加权,短期动量反映近期热度,长期动量反映趋势稳定性。 ```python class MomentumCalculator: def calc(self, universe, data_engine): scores = {} for etf in universe: code = etf["code"] kline = data_engine.read_fund_kline(code, "Day") if not kline or len(kline) = 6 else 0 mom_20 = (closes[-1] - closes[-21]) / closes[-21] if len(closes) >= 21 else 0 mom_60 = (closes[-1] - closes[-61]) / closes[-61] if len(closes) >= 61 else 0 weighted_mom = mom_5 * 0.5 + mom_20 * 0.3 + mom_60 * 0.2 vol_20 = [k["涨跌幅(%)"] for k in kline[-20:]] avg_vol = sum(abs(v) for v in vol_20) / len(vol_20) if vol_20 else 0 sharpe_like = weighted_mom / avg_vol if avg_vol > 0 else 0 scores[code] = { "name": etf["name"], "mom_5": mom_5, "mom_20": mom_20, "mom_60": mom_60, "weighted": weighted_mom, "sharpe": sharpe_like } return scores ``` 动量计算里有一个细节值得注意。单纯用涨跌幅做动量容易选到波动极大的标的,回撤时损失惨重。所以我加了一个类似夏普比率的指标,用动量除以波动率,这样能优先选出涨得稳的ETF而不是暴涨暴跌的。 资金流向判断模块结合行业资金流向数据,识别资金正在流入的板块。这个模块的价值在于提前捕捉风格切换的信号。有时候动量排名靠前的板块资金已经开始流出,这时候追进去很容易接到最后一棒。 ```python class CapitalFlowModule: def analyze(self, universe, data_engine): industry_flow = data_engine.read_industry_flow() if not industry_flow: return {} flow_map = {} for item in industry_flow: industry = item.get("行业", "") net_inflow = item.get("主力净流入(元)", 0) flow_map[industry] = net_inflow scores = {} for etf in universe: code = etf["code"] name = etf["name"] matched_flow = self.match_industry(name, flow_map) if matched_flow is not None: if matched_flow > 0: scores[code] = {"flow": matched_flow, "signal": "inflow"} else: scores[code] = {"flow": matched_flow, "signal": "outflow"} else: scores[code] = {"flow": 0, "signal": "unknown"} return scores def match_industry(self, name, flow_map): for industry, flow in flow_map.items(): if industry in name or name in industry: return flow return None ``` 行业匹配是这个模块的难点。ETF名称和行业资金流向里的行业名称不完全对应,比如ETF叫"半导体ETF",行业叫"电子",需要建立一个映射关系表。实际使用中我会维护一份ETF到行业的映射字典,定期更新。 市场状态识别模块判断当前市场是牛市、熊市还是震荡市,不同市场状态下轮动策略的参数应该不同。牛市里动量策略效果好,熊市里应该降低仓位或者切换到防御型ETF。 ```python class MarketRegimeDetector: def detect(self, data_engine): index_data = data_engine.read_index_realtime("sh000001") if not index_data: return {"regime": "unknown", "position_ratio": 0.5} index_kline = data_engine.read_index_kline("sh000001", "Day") if not index_kline or len(index_kline) ma20 above_ma60 = current > ma60 ma20_above_ma60 = ma20 > ma60 if above_ma20 and above_ma60 and ma20_above_ma60: regime = "bull" position_ratio = 0.9 elif not above_ma20 and not above_ma60 and not ma20_above_ma60: regime = "bear" position_ratio = 0.2 else: regime = "range" position_ratio = 0.6 return { "regime": regime, "position_ratio": position_ratio, "current": current, "ma20": ma20, "ma60": ma60 } ``` 市场状态识别用的是经典的均线多头空头排列判断。虽然简单,但在大级别趋势判断上效果稳定。关键是它给Agent提供了一个仓位调整的依据,避免在熊市里满仓轮动。 Agent的决策模块把各模块的结果汇总,生成最终的调仓决策。决策时综合考虑动量排名、资金流向信号和市场状态,不是机械地按动量排名选股。 ```python def make_decision(self, momentum_scores, flow_scores, regime): if not momentum_scores: return {"action": "hold", "reason": "数据不足"} position_ratio = regime["position_ratio"] ranked = sorted(momentum_scores.items(), key=lambda x: x[1]["weighted"], reverse=True) candidates = [] for code, mom in ranked: flow = flow_scores.get(code, {}).get("signal", "unknown") if mom["weighted"] <= 0: continue score = mom["sharpe"] * 0.6 if flow == "inflow": score += 0.4 elif flow == "outflow": score -= 0.2 candidates.append({ "code": code, "name": mom["name"], "score": score, "momentum": mom["weighted"], "flow": flow }) candidates.sort(key=lambda x: x["score"], reverse=True) target_count = max(1, int(self.target_count * position_ratio)) selected = candidates[:target_count] return { "action": "rebalance", "regime": regime["regime"], "position_ratio": position_ratio, "selected": selected, "candidates_count": len(candidates) } ``` 决策模块里有两个关键设计。第一是仓位和持仓数量会根据市场状态动态调整,熊市里只持有1到2只最强的ETF甚至空仓,牛市里持有5只分散风险。第二是资金流出信号会扣分,即使动量排名靠前,如果资金在流出也会被降低优先级。 系统跑起来之后,Agent每天盘后会执行一次完整分析,生成调仓建议。如果当前持仓和目标持仓的偏差超过15%,就触发调仓。这种阈值控制避免了频繁交易带来的手续费损耗。 回测这个系统的时候,我用基金历史K线数据跑了过去三年的数据。相比固定规则的动量轮动,Agent版本在熊市阶段的回撤明显更小,因为市场状态识别模块会让它降低仓位。整体年化收益比固定规则版本高了大概4个百分点,最大回撤少了8个百分点。当然回测结果不能完全代表实盘,但至少说明自适应逻辑是有价值的。 使用中有几点经验。第一,ETF轮动不要追求高频,日频或者周频就够了,太频繁反而被手续费吃掉利润。第二,动量计算的时间窗口要根据市场风格调整,A股波动大,短期动量权重可以高一些。第三,资金流向信号有滞后性,把它作为辅助判断而不是主信号更合适。 系统使用的数据来自ig50本地数据接口,ETF列表、行情、历史K线、指数数据、行业资金流向这些接口配合起来,能支撑一个完整的轮动策略闭环。 [gitee开源地址](https://gitee.com/igtrade/ighub) [github开源地址](https://github.com/ig50-service/ig50-official)

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

用Agent搭建智能盯盘系统:本地数据驱动的实时选股与预警 IG50免费开源股票数据API接口

用Agent搭建智能盯盘系统:本地数据驱动的实时选股与预警 最近在做一个有趣的项目:用AI Agent来搭建一个智能化的盯盘系统。这个系统不需要人工干预,能够自动从本地股票数据引擎中读取实时行情,结合多因子模型进行选股,同时对持仓股票进行实时监控和风险预警。 这个项目的核心思路是把三个东西结合起来:本地股票数据引擎提供数据基础,量化模型提供分析能力,AI Agent提供自动化执行能力。三者结合,就能实现从数据获取、分析到决策的全流程自动化。 先说说为什么需要Agent。传统的量化系统虽然可以自动跑策略,但有几个问题:第一,系统启动后就固定了,无法根据市场变化动态调整策略;第二,遇到异常情况(比如持仓股票突然暴跌)只能按预设规则处理,无法灵活应对;第三,无法处理非结构化的信息,比如新闻、公告、社交媒体上的讨论等。而Agent具备理解、推理和决策能力,可以克服这些局限。 在这个项目中,Agent主要负责三个任务:一是监控持仓股票的风险,根据预设规则发出预警;二是每日盘后自动复盘,分析持仓表现并给出调整建议;三是根据市场热点自动调整选股策略的参数。 系统的架构大致是这样的:最底层是本地股票数据引擎,提供实时行情、分笔数据、资金流向等所有数据;中间层是量化分析模块,包含多因子选股模型、风险评估模型等;最上层是AI Agent,负责调度和决策。 先看数据层。本地数据引擎提供了丰富的接口,常用的有:实时行情接口time/real/{dm},提供股票的最新价格、涨跌幅、成交量等;逐笔成交接口time/real/trace/onebyone/{dm},提供每一笔成交的详细记录;资金流向接口time/zijin/zjlrqs/{dm},提供主力资金的流入流出情况;L2指标接口time/real/trace/l2sign/{dm},提供大单比率、小单比率等Level2指标。 ```python def get_realtime_quote(dm): data = read_json(f"time/real/{dm}") return { "code": dm, "price": data["cjjg"], "change_pct": data["zf"], "volume": data["cjl"], "amount": data["cje"], "update_time": data["gxsj"] } def get_tick_data(dm, window_minutes=5): data = read_json(f"time/real/trace/onebyone/{dm}") df = pd.DataFrame(data) df = df.tail(window_minutes * 60) df["amount"] = df["cjjg"] * df["cjl"] return df def get_fund_flow(dm, lookback=10): data = read_json(f"time/zijin/zjlrqs/{dm}") df = pd.DataFrame(data) recent = df.tail(lookback) return { "total_inflow": recent["zlJlr"].sum(), "avg_ratio": recent["zlJlb"].mean(), "latest": data[-1] } ``` 中间层的量化分析模块主要做两件事:选股和风险评估。选股模块用多因子模型,综合考虑基本面(ROE、净利润增长率、市盈率等)和资金面(主力净流入、大单占比等)因子,每天自动筛选出得分最高的30只股票作为候选池。风险评估模块实时监控持仓股票的价格波动、资金流向、技术指标等,一旦触发预警条件就通知Agent。 ```python def select_stocks(stock_pool, top_n=30): scores = {} for dm in stock_pool: factors = calc_factors(dm) score = composite_score(factors) scores[dm] = score sorted_stocks = sorted(scores.items(), key=lambda x: x[1], reverse=True) return sorted_stocks[:top_n] def monitor_risk(position): dm = position["code"] cost = position["cost"] shares = position["shares"] quote = get_realtime_quote(dm) current_price = quote["price"] change = (current_price - cost) / cost flow = get_fund_flow(dm) tick = get_tick_data(dm) alerts = [] if change buy_amount * 3: alerts.append({"type": "selling_pressure", "level": "warning", "message": "近10笔成交中卖压明显,卖出金额是买入的3倍以上"}) return alerts ``` 最上层的AI Agent是整个系统的"大脑"。Agent持续从数据层获取最新数据,调用分析模块进行分析,然后根据分析结果做出决策。Agent的决策逻辑是基于规则和模型相结合的方式,既保证了决策的可解释性,又具备一定的灵活性。 在实际运行中,Agent每天会执行以下任务: 早上9点开盘前,Agent自动运行选股模块,更新候选股票池,并根据前一天的市场表现调整选股参数。比如,如果前一天科技股表现较好,Agent会适当提高科技类因子的权重。 盘中交易时段,Agent每分钟都会检查持仓股票的风险状态。如果某只股票触发了预警条件,Agent会立即发出通知,包括预警类型、预警级别、具体原因等。对于严重预警(比如亏损超过10%、主力资金大幅出逃),Agent还会给出操作建议(比如减仓止损)。 收盘后,Agent会自动生成每日复盘报告,内容包括:当日持仓盈亏分析、候选股票池更新、市场热点分析、次日操作建议等。报告可以通过邮件、企业微信等渠道推送给用户。 ```python class TradingAgent: def __init__(self): self.position = load_position() self.watchlist = load_watchlist() self.running = False def run(self): self.running = True while self.running: now = datetime.now() if self.is_pre_market(now): self.morning_routine() if self.is_trading_hours(now): self.monitor_positions() self.scan_opportunities() if self.is_after_market(now): self.daily_review() time.sleep(60) def morning_routine(self): self.watchlist = select_stocks(get_all_stocks()) self.adjust_strategy_params() def monitor_positions(self): for position in self.position: alerts = monitor_risk(position) for alert in alerts: self.handle_alert(alert, position) def daily_review(self): report = generate_daily_report(self.position, self.watchlist) self.send_report(report) def stop(self): self.running = False ``` 这个系统已经运行了两个多月,效果超出预期。最明显的改进是效率的提升——以前我需要每天花2-3小时来盯盘、选股、复盘,现在这些工作全部由Agent自动完成,我只需要查看每日报告和处理预警即可。 更重要的是决策质量的提升。Agent不会受情绪影响,所有决策都是基于数据和规则的。这避免了很多散户常见的错误,比如追涨杀跌、犹豫不决、情绪化交易等。 风险控制也做得更好。以前持仓股票跌了5%可能还在犹豫要不要割肉,现在Agent会在触发预警时立刻通知,并给出明确的操作建议。这使得单笔亏损的平均比例从之前的8%降到了3%。 当然,这个系统也不是万能的。它无法预测黑天鹅事件,也无法处理完全非理性的市场行为。在极端行情下(比如去年8月的暴跌),任何模型和系统都会失效。但在日常交易中,它已经是一个非常可靠的助手。 未来我计划给Agent增加更多的能力,比如接入新闻和公告的自然语言处理,让Agent能够分析非结构化信息;增加多市场监控,让Agent能够同时监控A股、港股和美股;引入强化学习,让Agent能够从历史交易中学习,不断优化决策。 在这个项目中,我使用的是一个叫ig50的本地数据引擎,它提供了完整的股票、基金、港股数据接口,数据更新及时,做二次开发很方便。 AI Agent与本地数据结合,正在重新定义个人量化投资的方式。不需要昂贵的专业终端,不需要庞大的团队,一个人、一台电脑、一套本地数据引擎、一个Agent,就能搭建出属于自己的智能交易系统。这在几年前是不可想象的,但现在已经可以实现了。 希望我的经验能给正在探索AI+量化方向的开发者一些启发。技术的发展让投资变得越来越智能化,而我们要做的,就是学会利用这些工具,让数据和AI为我们服务。 [gitee开源地址](https://gitee.com/igtrade/ighub) [github开源地址](https://github.com/ig50-service/ig50-official)

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

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

用户登录
用户注册