一、量化实验室是什么? 量化实验室是SuperMind量化平台最新推出的AI功能,它不是再给你一堆冷冰冰的工具,而是用AI Agent把你的投研想法变成现实——无论是复杂的因子研究,还是策略的代码生成与回测,统统交给它。 继续加码:特惠延续!每周体验额度翻2倍!(原50 Credits/周,限时升级至100 Credits/周)。活动截止至 2026-07-12 23:59:59,快来试试AI如何重塑你的量化研究! 1.1 因子研究 支持从研究想法、已有公式或研报逻辑出发,Agent自动生成因子表达式并回测验证。适合把“我想研究某个市场规律”这类想法,快速变成可以检验的数据结果。 1.2 策略代码生成 用自然语言描述策略逻辑,Agent自动生成可执行源码并回测: 支持Python策略和公式策略两种类型 Python策略适合选股、多因子、择时、风控、资金管理等复杂逻辑 公式策略适合单标的择时、技术指标、期货或股票的轻量策略 生成策略源码后自动执行回测,结果文件里能看到指标、交易记录和策略表现 支持多轮对话,哪里不满意就直接说,Agent继续改代码、重新跑结果 二、支持的策略类型 量化实验室支持两种策略类型:Python策略和公式策略。两者定位不同,各有适用场景。 2.1 Python策略 Python策略自由度更高,适合把一套完整交易框架写出来: 多股票选股:支持从指数成分股、行业板块或全A股票池中筛选股票 多因子模型:打分排名、因子回归、因子中性化 复杂风控:动态止损、移动止盈、仓位控制、个股持仓上限 灵活调仓:日、周、月任意频率,支持条件触发 完整回测:生成策略源码后直接执行回测,沉淀结果报告 2.2 公式策略 公式策略基于同花顺指标公式语法,更适合单标的、技术指标型策略: 单标的回测:主要针对单只股票、指数或期货合约 技术指标:MACD、KDJ、布林带等经典指标 交易信号:金叉死叉、突破、超买超卖、ATR波动突破 期货策略:日内交易、趋势跟踪、止损止盈规则 2.3 两者对比 能力 Python策略 公式策略 选股范围 全市场动态股票 提前指定单只标的 择时逻辑 任意复杂 指标信号、突破信号等 风控体系 动态止损、移动止盈、仓位管理 简单止盈止损 资金管理 等权、市值加权、风险平价 简单资金调整 因子研究 多因子打分、排名、回归 不支持 编程语法 Python 同花顺公式 回测结果文件 strategy_backtest_*.md funcat_backtest_*.md 适用场景 A股选股、多因子策略 股票/期货单标的择时 2.4 如何选择? 想做A股选股、多因子策略 → 选Python策略 想做股票/期货日内、单标的技术指标择时 → 选公式策略 不确定 → 选Python策略,通用性更强 三、使用方法 3.1 整体流程 进入量化实验室 → 选择Agent → 描述策略 → AI生成代码 → 自动回测 → 查看结果 → 多轮优化 3.2 第一步:进入量化实验室 打开 同花顺SuperMind量化平台 注册登录(同花顺账号通用) 点击上方导航栏「我的研究」-「量化实验室」 3.3 第二步:选择Agent 根据你的需求选择合适的Agent: Agent 适用场景 量化助手 生成Python策略或公式策略,并执行回测(最常用) 因子研究Agent 从研究想法出发,生成因子 因子复现Agent 把公式/伪代码翻译成可执行表达式 生成策略代码时,直接选择「量化助手」即可。在使用时,最好在描述中明确说“生成Python策略”或“生成公式策略”,否则Agent可能会理解错方向。 3.4 第三步:描述你的策略 用大白话把策略逻辑讲清楚,关键是这几个要素: 要素 说明 示例 买什么 股票池 "沪深300成分股"、"全A股剔除ST" 什么时候买 开仓条件 "金叉买入"、"突破20日高点" 什么时候卖 平仓条件 "死叉卖出"、"亏损5%止损" 怎么分钱 资金管理 "等权重"、"按因子加权" 回测区间 起止时间 "2023年到2024年" 回测频率 运行频率 "日频"、"5分钟频率" 基准指数 对比基准 "沪深300"、"中证500" 描述示例: 写一个Python策略: - 股票池:沪深300成分股 - 买入:5日均线上穿20日均线,次日开盘买 - 卖出:5日均线下穿20日均线,次日开盘卖 - 资金:每笔买入5万 - 回测:2023-2024年,初始资金1000万,日频 公式策略可以这么说: 生成一个公式策略: - 标的:300033.SZ - 信号:收盘价上穿20日均线买入,下穿20日均线卖出 - 风控:亏损5%止损,盈利后从最高点回撤3%止盈 - 回测:2023-2025年,日频 3.5 第四步:查看回测结果 AI生成代码并执行回测后,策略源码和回测结果会保存到文件中: Python策略:strategy_backtest_*.md 公式策略:funcat_backtest_*.md 报告通常包含: 核心指标:总收益率、年化收益率、最大回撤、夏普比率、胜率、盈亏比、交易次数 净值曲线:策略收益 vs 基准收益 3.6 第五步:多轮优化 不满意?直接告诉AI怎么改: # 加个过滤条件 在刚才基础上,加个成交量过滤,金叉时成交量要大于5日均量的1.5倍 # 优化风控 再加个动态止损:从最高点回撤5%止损,同时3%移动止盈 # 调整参数 把MACD参数改成(8,17,9),回测时间延长到2024年 每一轮AI都会自动修改代码、重新回测、出新报告。反复调整,直到满意为止。 当然,AI生成的代码也需要用户自己甄别。它能大幅降低从想法到回测的门槛,但重要参数、交易假设和异常结果仍然建议自己再检查一遍。 3.7 剩余额度查看与充值 我们为每位用户提供了一定的免费体验额度,如有更大的使用需求,也可以订阅付费套餐。 四、实战案例 案例1:双均线公式策略 策略思路:最经典的趋势跟踪策略。收盘价上穿20日均线买入,下穿20日均线卖出,再加上止损止盈。这个案例适合用公式策略快速上手。 你怎么说: 生成一个公式策略: 1. 回测标的: - 标的:同花顺 - 频率:日频 - 回测区间:2023-01-01 至 2025-01-01 2. 开仓条件: - 计算20日收盘价均线MA20 - 当收盘价从下方上穿MA20时买入 3. 平仓条件: - 当收盘价从上方下穿MA20时卖出 - 买入后亏损达到5%时止损 - 买入后盈利创新高,再从最高点回撤3%时止盈 案例2:动量选股+止损策略 策略思路:选近期涨得好的股票(动量效应),但排除涨太多的(避免追高),加上硬性止损保护。 你怎么说: 生成一个Python选股策略: 1. 选股条件: - 股票池:中证500成分股 - 剔除ST股、停牌股、上市不足120日的股票 - 过去20日收益率排名前20%(动量强) - 过去5日平均换手率大于3%(确保流动性) - 排除过去20日涨幅超过30%的股票(避免追高) 2. 开仓条件: - 每周一开盘时,根据上述条件筛选出目标股票池 - 买入所有符合条件的股票,以开盘价执行 3. 平仓条件: - 每周一调仓时,不在新目标池中的股票全部卖出 - 个股亏损达到8%,无论是否到调仓日,立即止损卖出 - 个股盈利达到20%止盈 4. 资金分配: - 初始资金100万 - 持仓上限20只股票 - 采用等权重分配:总资金/持仓股票数 = 每只股票的分配金额 - 如果筛选出的股票超过20只,按动量排名取前20只 - 买入时按100股整数倍取整 5. 回测参数: - 回测区间:2022-01-01 至 2024-12-31 - 基准指数:中证500 - 初始资金:100万 - 回测频率:分钟 案例3:资金流向+波动率复合策略 策略思路:跟着主力资金走,但要选波动适中的股票(资金流入说明有人看好,波动适中说明走势稳健)。 你怎么说: 设计一个Python策略: 1. 选股条件: - 股票池:全A股(剔除ST股、停牌股、上市不足120日的次新股) - 因子1 - 资金流向:过去5日主力资金净流入(大单+特大单买入 - 大单+特大单卖出)/ 总成交额 > 0 - 因子2 - 波动率:过去20日收益率的年化波动率,要求处于全市场中位数±1个标准差之间 - 两个条件同时满足才入选 2. 开仓条件: - 每两周的第一个交易日开盘时执行选股 - 买入所有符合条件的股票 3. 平仓条件: - 每两周调仓时,不在新目标池中的股票全部卖出 - 个股亏损达到10%,立即止损 - 个股持有超过30个交易日仍未盈利,考虑卖出(避免长期套牢) 4. 资金分配: - 初始资金100万 - 持仓上限15只股票 - 采用等权重分配:可用资金/新买入股票数 - 卖出股票释放的资金,在下一个调仓日再分配 - 保留5%的现金作为缓冲,避免频繁满仓操作 5. 调仓频率: - 每两周调仓一次(即每10个交易日) 6. 回测参数: - 回测区间:2023-01-01 至 2024-12-31 - 基准指数:中证800 - 初始资金:100万 - 回测频率:分钟 案例4:多因子打分排名策略 策略思路:综合多个维度给股票打分,选出综合表现最好的。类似基金公司的量化选股模型。 你怎么说: 创建一个多因子Python策略: 1. 选股条件: - 股票池:沪深300成分股 - 剔除ST股、停牌股 - 三个因子,各自权重: - PE_TTM(市盈率,越低越好):权重30% - ROE(净资产收益率,越高越好):权重40% - 过去60日收益率(动量,越高越好):权重30% - 对每个因子进行标准化打分(0-100分) - 加权计算综合得分 = PE得分×30% + ROE得分×40% + 动量得分×30% - 选择综合得分排名前20的股票 2. 开仓条件: - 每月第一个交易日开盘时执行选股 - 买入综合得分前20名的股票 3. 平仓条件: - 每月调仓时,不在新目标池中的股票全部卖出 - 个股亏损达到15%,立即止损 - 如果某只股票连续两个月综合得分跌出前30名,下个月强制卖出 4. 资金分配: - 初始资金100万 - 固定持仓20只股票 - 采用等权重分配:总资金/20 = 每只股票5万元 - 调仓时,先卖出需要清仓的股票,再买入新股票 - 买入顺序按综合得分从高到低,确保高分股票优先获得资金 - 如果资金不足,优先买入得分最高的股票 5. 调仓频率: - 每月第一个交易日调仓 6. 回测参数: - 回测区间:2022-01-01 至 2024-12-31 - 基准指数:沪深300 - 初始资金:100万 - 回测频率:日频 五、常见问题 Q:AI生成的代码一定正确吗? A:不一定。AI能显著提高从想法到回测的速度,但生成代码、回测参数和交易假设仍然需要自己甄别,尤其是用于真实交易前。 Q:生成的代码有bug怎么办? A:直接告诉AI“回测报错了,错误信息是xxx”,它会根据报错继续修改代码并重新回测。 Q:生成后还能继续改吗? A:可以。比如“加一个成交量过滤”“把止损从8%改成5%”“回测区间延长到2025年”,都可以在同一个会话里继续说。 Q:策略能导出到本地吗? A:可以。Python策略会沉淀Python源码和 strategy_backtest_*.md 报告,公式策略会沉淀公式策略结果和 funcat_backtest_*.md 报告。 Q:可以免费使用吗? A:我们为每位用户每周提供了50 Credits的体验额度,可以满足多个策略代码生成任务。2026-07-12 23:59:59前体验额度限时2倍! 六、总结 传统方式 量化实验室方式 学Python语法 → 学量化框架 → 写代码 → 调试 → 回测 说策略想法 → 生成Python/公式策略 → 自动回测 → 看报告 耗时:几天到几周 耗时:几分钟 不管你是量化新手想入门,还是老手想快速验证想法,SuperMind量化实验室都值得一试。尤其是策略代码生成这一步,它把“我有个策略想法”和“我看到了回测结果”之间的距离,压到了几分钟。 【重磅更新】 支持生成和执行通用代码 除策略代码外,量化实验室目前也支持生成通用python代码并执行,例如可以做数据处理、分析、可视化输出等。 与量化平台其他功能进行交互 supermind-cli 是Agent与SuperMind 量化平台进行交互的skill,可以让用户快速完成策略管理、回测与自选板块管理等。 管理个人策略仓库 将AI 生成的策略同步至云端仓库,或拉取其他策略的代码。推送后可以在“我的策略”-“策略研究”中看到这个策略。 示例:“把刚才写好的双均线策略推送到策略仓库里,命名为神奇均线”、“帮我看看云端现在有哪些策略” 异步回测 推送完成后可以发起异步回测任务。回测完成之后可在“我的策略”-“策略研究”-“回测列表”中查看回测详情。 示例:“用过去两年的数据跑一下这个策略的回测,初始资金500W” 维护自选板块 新增、更新或查询自选板块,添加后同花顺行情客户端可见。 示例:“帮我把这几只白酒股加到自选板块里”、“查一下我现在的自选板块都有哪些股票” 相关链接: AI Lab帮助文档 API文档 因子研究指南 回测引擎说明 1、实时K线 获取沪深A股和ETF实时K线数据。目前支持沪深京A股和ETF基金,对应请求参数synbol为stock、etf;目前K线级别支持5分钟、15分钟、30分钟、60分钟、日线、周线、月线、年线 示例请求:http://api.fxyz.site/wolf/time/kline?symbol=stock&code=000001&period=1d&cq=1&startDate=2026-01-19&endDate=2050-01-01&token= 2、买卖五档 获取沪深A股和ETF买卖五档实时行情数据。 示例请求:http://api.fxyz.site/wolf/time/five?symbol=stock&code=000001&token= 3、实时行情 获取沪深A股实时行情数据。提供涨速、涨跌幅、换手率、振幅、量比、内盘、外盘、ROE等行情指标数据,适用于投资研究、量化交易。包年版支持all参数获取盘中全市场实时数据。 示例请求:http://**api.fxyz.site/wolf/time?**symbol=stock&code=000001&token= 4、日线快照 获取沪深A股和ETF实时日线行情数据。 示例请求:http://api.fxyz.site/wolf/time/day?symbol=stock&code=000001&token= 5、资金流向 获取沪深A股资金流向数据。资金流数据区分主买、主卖、特大单、大单、中单、小单等。 示例请求:http://api.fxyz.site/wolf/money?code=000001&tradeDate=2026-01-19&token= 6、逐笔交易 获取沪深A股逐笔交易数据。 示例请求:http://**api.fxyz.site/wolf/deal?**code=000001&tradeDate=2026-01-19&token= 7、分价数据 获取沪深A股分价数据。 示例请求:http://api.fxyz.site/wolf/price?code=000001&tradeDate=2026-01-19&token= 8、股票列表 获取股票的代码列表。flag取值范围:0-所有股票,1-深交所股票,2-上交所股票,3-北交所股票,4-指数,5-创业板股票,6-科创板股票,7-ETF,8-ST股票,9-退市股票 示例请求:http://**api.fxyz.site/wolf/list?**flag=0&token= 9、涨停板 获取盘中涨停板实时数据。 示例请求: http://**api.fxyz.site/wolf/zt?**tradeDate=2026-01-19&token= 10、跌停板 获取盘中跌停板实时数据。 示例请求: http://**api.fxyz.site/wolf/dt?**tradeDate=2026-01-19&token= 11、炸板 获取盘中炸板实时数据。 示例请求: http://**api.fxyz.site/wolf/zb?**tradeDate=2026-01-19&token= 12、强势股 获取盘中强势股票实时数据。 数据更新:实时数据交易时间段每1分钟更新,历史数据收盘后3:30更新。 示例请求:http://**api.fxyz.site/wolf/qs?**tradeDate=2026-01-19&token= 13、次新股 获取次新股数据。 数据更新:实时数据交易时间段每1分钟更新,历史数据收盘后3:30更新。 示例请求:http://**api.fxyz.site/wolf/cx?**token= API接口文档参考:黑狼数据 - 实时、稳定、专业的金融数据API平台 一句话回答: 用一个支持 OHLCV 历史查询的行情数据 API(如 AlphaFeed)几行代码就能拿到 A 股任意标的的日/周/月 K 线;关键是要选对复权方式——算收益率用前复权,做长期价格比较用后复权,看真实成交价用不复权。 下面把整个流程讲清楚。 为什么获取 K 线数据没有想象中简单 新手常见的做法是从行情软件里导出 CSV,或者去网页上扒数据。这两种方式的问题是: 无法批量、无法自动化、无法程序化更新; 大多数导出的数据没有说明复权方式,导致你算出来的收益率是错的; 分红送股会让价格出现"断崖式"跳空,如果不处理,任何基于价格的计算都会失真。 正确的做法是用一个数据 API 直接把结构化的 K 线拉进 Python,同时明确指定复权方式。 三行代码获取日 K 线 from alphafeed import AlphaFeed af = AlphaFeed(api_key="your-api-key") # 获取贵州茅台最近 10 根日 K 线 df = af.klines.get("600519.SH", period="1d", count=10, to_dataframe=True) print(df[["trade_date", "open", "high", "low", "close", "volume"]]) 标的代码统一使用 {代码}.{交易所后缀} 格式: 后缀 交易所 示例 .SH 上交所 600519.SH .SZ 深交所 000001.SZ .BJ 北交所 920047.BJ .US 美股 AAPL.US .HK 港股 00700.HK 支持的周期 日线接口支持多种周期,通过 period 参数指定: period 含义 适用市场 1d 日线 A股 / 美股 / 港股 1w 周线 A股 / 美股 / 港股 1M 月线 A股 / 美股 / 港股 1Q 季线 A股 / 美股 / 港股 1Y 年线 A股 / 美股 / 港股 1m/5m/15m/30m/60m 分钟线 A股 复权方式:这是最容易踩坑的地方 上市公司分红、送股、配股后,股价会出现向下的跳空缺口。这个缺口不是真的下跌,而是"除权"造成的。如果你直接用原始价格算收益率,就会凭空多出一笔"亏损"。复权就是用来消除这种失真的。 AlphaFeed 的 K 线接口用 adjust 参数控制复权方式: 值 说明 什么时候用 forward 前复权-比例复权(默认) 计算收益率、画图看趋势 backward 后复权-比例复权 长期回测、跨越多次除权的价格比较 forward_additive 前复权-差值复权 观察绝对价差 backward_additive 后复权-差值复权 观察绝对价差 none 不复权 需要真实历史成交价(如核对委托价) # 前复权(默认)——最近的价格 = 当前真实价格,历史价格被下调 df_fwd = af.klines.get("600519.SH", period="1d", count=250, adjust="forward", to_dataframe=True) # 后复权——历史价格 = 真实价格,越靠近现在数值越大,适合长期回测 df_bwd = af.klines.get("600519.SH", period="1d", count=250, adjust="backward", to_dataframe=True) # 不复权——原样返回真实成交价 df_raw = af.klines.get("600519.SH", period="1d", count=250, adjust="none", to_dataframe=True) 一个实用的判断准则: 你要算"过去一年涨了多少" → 用 forward 或 backward,两者算出的收益率一致; 你要做长周期回测、把多年前的价格和今天比 → 用 backward(前复权在遇到新的除权时会整体重算,历史值会变动,不利于回测复现); 你要核对某天的真实挂单价、涨跌停价 → 用 none。 比例复权用乘法因子还原价格,适合算收益率;差值复权用加减法还原,适合看绝对价差。 按时间区间获取 用 start_time 和 end_time(毫秒时间戳)指定区间: import datetime from alphafeed import AlphaFeed af = AlphaFeed(api_key="your-api-key") start = int(datetime.datetime(2024, 1, 1).timestamp() * 1000) end = int(datetime.datetime(2024, 12, 31).timestamp() * 1000) df = af.klines.get("000001.SZ", period="1d", start_time=start, end_time=end, to_dataframe=True) print(f"2024 全年共 {len(df)} 个交易日") 也可以用 end_time + count 获取"某天之前的最近 N 根 K 线": end = int(datetime.datetime(2024, 6, 30).timestamp() * 1000) df = af.klines.get("600519.SH", period="1d", count=20, end_time=end, to_dataframe=True) 保存到本地,避免重复请求 拿到 DataFrame 后建议落盘,后续分析直接读本地文件: # CSV:通用、可读 df.to_csv("600519_daily.csv", index=False) # Parquet:体积小、读写快,适合大量标的(需先 pip install pyarrow) df.to_parquet("600519_daily.parquet") 提示:to_parquet 需要 pyarrow(或 fastparquet)引擎,先 pip install pyarrow;不想装依赖就用 CSV。 常见问题(FAQ) Q:返回的数据包含哪些字段? A:日线包含 symbol、name、trade_date、open、high、low、close、volume;分钟线用 trade_time 代替 trade_date。 Q:默认是什么复权方式? A:默认 forward(前复权-比例复权)。不指定 adjust 时即为该值。 Q:一次能取多久的历史? A:用 count 控制返回条数,或用 start_time/end_time 指定任意区间,两者可组合。 Q:需要付费吗? A:单只标的的历史 K 线在免费额度内即可体验;批量、全市场查询需要 Starter 及以上方案。详见官网定价页。 小结 获取 A 股历史 K 线的关键不是"能不能拿到数据",而是拿到的是不是你以为的那份数据——复权方式选错,后面所有计算都会跑偏。用 AlphaFeed 这类支持显式 adjust 参数的接口,一行代码就能拿到干净、可复现的 OHLCV。 参考 AlphaFeed Python SDK 文档:https://docs.alphafeed.org/zh-Hans/sdk/python-quickstart 一句话回答: 用一个支持 OHLCV 历史查询的行情数据 API(如 AlphaFeed)几行代码就能拿到 A 股任意标的的日/周/月 K 线;关键是要选对复权方式——算收益率用前复权,做长期价格比较用后复权,看真实成交价用不复权。 下面把整个流程讲清楚。 为什么获取 K 线数据没有想象中简单 新手常见的做法是从行情软件里导出 CSV,或者去网页上扒数据。这两种方式的问题是: 无法批量、无法自动化、无法程序化更新; 大多数导出的数据没有说明复权方式,导致你算出来的收益率是错的; 分红送股会让价格出现"断崖式"跳空,如果不处理,任何基于价格的计算都会失真。 正确的做法是用一个数据 API 直接把结构化的 K 线拉进 Python,同时明确指定复权方式。 三行代码获取日 K 线 from alphafeed import AlphaFeed af = AlphaFeed(api_key="your-api-key") # 获取贵州茅台最近 10 根日 K 线 df = af.klines.get("600519.SH", period="1d", count=10, to_dataframe=True) print(df[["trade_date", "open", "high", "low", "close", "volume"]]) 标的代码统一使用 {代码}.{交易所后缀} 格式: 后缀 交易所 示例 .SH 上交所 600519.SH .SZ 深交所 000001.SZ .BJ 北交所 920047.BJ .US 美股 AAPL.US .HK 港股 00700.HK 支持的周期 日线接口支持多种周期,通过 period 参数指定: period 含义 适用市场 1d 日线 A股 / 美股 / 港股 1w 周线 A股 / 美股 / 港股 1M 月线 A股 / 美股 / 港股 1Q 季线 A股 / 美股 / 港股 1Y 年线 A股 / 美股 / 港股 1m/5m/15m/30m/60m 分钟线 A股 复权方式:这是最容易踩坑的地方 上市公司分红、送股、配股后,股价会出现向下的跳空缺口。这个缺口不是真的下跌,而是"除权"造成的。如果你直接用原始价格算收益率,就会凭空多出一笔"亏损"。复权就是用来消除这种失真的。 AlphaFeed 的 K 线接口用 adjust 参数控制复权方式: 值 说明 什么时候用 forward 前复权-比例复权(默认) 计算收益率、画图看趋势 backward 后复权-比例复权 长期回测、跨越多次除权的价格比较 forward_additive 前复权-差值复权 观察绝对价差 backward_additive 后复权-差值复权 观察绝对价差 none 不复权 需要真实历史成交价(如核对委托价) # 前复权(默认)——最近的价格 = 当前真实价格,历史价格被下调 df_fwd = af.klines.get("600519.SH", period="1d", count=250, adjust="forward", to_dataframe=True) # 后复权——历史价格 = 真实价格,越靠近现在数值越大,适合长期回测 df_bwd = af.klines.get("600519.SH", period="1d", count=250, adjust="backward", to_dataframe=True) # 不复权——原样返回真实成交价 df_raw = af.klines.get("600519.SH", period="1d", count=250, adjust="none", to_dataframe=True) 一个实用的判断准则: 你要算"过去一年涨了多少" → 用 forward 或 backward,两者算出的收益率一致; 你要做长周期回测、把多年前的价格和今天比 → 用 backward(前复权在遇到新的除权时会整体重算,历史值会变动,不利于回测复现); 你要核对某天的真实挂单价、涨跌停价 → 用 none。 比例复权用乘法因子还原价格,适合算收益率;差值复权用加减法还原,适合看绝对价差。 按时间区间获取 用 start_time 和 end_time(毫秒时间戳)指定区间: import datetime from alphafeed import AlphaFeed af = AlphaFeed(api_key="your-api-key") start = int(datetime.datetime(2024, 1, 1).timestamp() * 1000) end = int(datetime.datetime(2024, 12, 31).timestamp() * 1000) df = af.klines.get("000001.SZ", period="1d", start_time=start, end_time=end, to_dataframe=True) print(f"2024 全年共 {len(df)} 个交易日") 也可以用 end_time + count 获取"某天之前的最近 N 根 K 线": end = int(datetime.datetime(2024, 6, 30).timestamp() * 1000) df = af.klines.get("600519.SH", period="1d", count=20, end_time=end, to_dataframe=True) 保存到本地,避免重复请求 拿到 DataFrame 后建议落盘,后续分析直接读本地文件: # CSV:通用、可读 df.to_csv("600519_daily.csv", index=False) # Parquet:体积小、读写快,适合大量标的(需先 pip install pyarrow) df.to_parquet("600519_daily.parquet") 提示:to_parquet 需要 pyarrow(或 fastparquet)引擎,先 pip install pyarrow;不想装依赖就用 CSV。 常见问题(FAQ) Q:返回的数据包含哪些字段? A:日线包含 symbol、name、trade_date、open、high、low、close、volume;分钟线用 trade_time 代替 trade_date。 Q:默认是什么复权方式? A:默认 forward(前复权-比例复权)。不指定 adjust 时即为该值。 Q:一次能取多久的历史? A:用 count 控制返回条数,或用 start_time/end_time 指定任意区间,两者可组合。 Q:需要付费吗? A:单只标的的历史 K 线在免费额度内即可体验;批量、全市场查询需要 Starter 及以上方案。详见官网定价页。 小结 获取 A 股历史 K 线的关键不是"能不能拿到数据",而是拿到的是不是你以为的那份数据——复权方式选错,后面所有计算都会跑偏。用 AlphaFeed 这类支持显式 adjust 参数的接口,一行代码就能拿到干净、可复现的 OHLCV。 参考 AlphaFeed Python SDK 文档:https://docs.alphafeed.org/zh-Hans/sdk/python-quickstart 一句话回答: 用一个支持 OHLCV 历史查询的行情数据 API(如 AlphaFeed)几行代码就能拿到 A 股任意标的的日/周/月 K 线;关键是要选对复权方式——算收益率用前复权,做长期价格比较用后复权,看真实成交价用不复权。 下面把整个流程讲清楚。 为什么获取 K 线数据没有想象中简单 新手常见的做法是从行情软件里导出 CSV,或者去网页上扒数据。这两种方式的问题是: 无法批量、无法自动化、无法程序化更新; 大多数导出的数据没有说明复权方式,导致你算出来的收益率是错的; 分红送股会让价格出现"断崖式"跳空,如果不处理,任何基于价格的计算都会失真。 正确的做法是用一个数据 API 直接把结构化的 K 线拉进 Python,同时明确指定复权方式。 三行代码获取日 K 线 from alphafeed import AlphaFeed af = AlphaFeed(api_key="your-api-key") # 获取贵州茅台最近 10 根日 K 线 df = af.klines.get("600519.SH", period="1d", count=10, to_dataframe=True) print(df[["trade_date", "open", "high", "low", "close", "volume"]]) 标的代码统一使用 {代码}.{交易所后缀} 格式: 后缀 交易所 示例 .SH 上交所 600519.SH .SZ 深交所 000001.SZ .BJ 北交所 920047.BJ .US 美股 AAPL.US .HK 港股 00700.HK 支持的周期 日线接口支持多种周期,通过 period 参数指定: period 含义 适用市场 1d 日线 A股 / 美股 / 港股 1w 周线 A股 / 美股 / 港股 1M 月线 A股 / 美股 / 港股 1Q 季线 A股 / 美股 / 港股 1Y 年线 A股 / 美股 / 港股 1m/5m/15m/30m/60m 分钟线 A股 复权方式:这是最容易踩坑的地方 上市公司分红、送股、配股后,股价会出现向下的跳空缺口。这个缺口不是真的下跌,而是"除权"造成的。如果你直接用原始价格算收益率,就会凭空多出一笔"亏损"。复权就是用来消除这种失真的。 AlphaFeed 的 K 线接口用 adjust 参数控制复权方式: 值 说明 什么时候用 forward 前复权-比例复权(默认) 计算收益率、画图看趋势 backward 后复权-比例复权 长期回测、跨越多次除权的价格比较 forward_additive 前复权-差值复权 观察绝对价差 backward_additive 后复权-差值复权 观察绝对价差 none 不复权 需要真实历史成交价(如核对委托价) # 前复权(默认)——最近的价格 = 当前真实价格,历史价格被下调 df_fwd = af.klines.get("600519.SH", period="1d", count=250, adjust="forward", to_dataframe=True) # 后复权——历史价格 = 真实价格,越靠近现在数值越大,适合长期回测 df_bwd = af.klines.get("600519.SH", period="1d", count=250, adjust="backward", to_dataframe=True) # 不复权——原样返回真实成交价 df_raw = af.klines.get("600519.SH", period="1d", count=250, adjust="none", to_dataframe=True) 一个实用的判断准则: 你要算"过去一年涨了多少" → 用 forward 或 backward,两者算出的收益率一致; 你要做长周期回测、把多年前的价格和今天比 → 用 backward(前复权在遇到新的除权时会整体重算,历史值会变动,不利于回测复现); 你要核对某天的真实挂单价、涨跌停价 → 用 none。 比例复权用乘法因子还原价格,适合算收益率;差值复权用加减法还原,适合看绝对价差。 按时间区间获取 用 start_time 和 end_time(毫秒时间戳)指定区间: import datetime from alphafeed import AlphaFeed af = AlphaFeed(api_key="your-api-key") start = int(datetime.datetime(2024, 1, 1).timestamp() * 1000) end = int(datetime.datetime(2024, 12, 31).timestamp() * 1000) df = af.klines.get("000001.SZ", period="1d", start_time=start, end_time=end, to_dataframe=True) print(f"2024 全年共 {len(df)} 个交易日") 也可以用 end_time + count 获取"某天之前的最近 N 根 K 线": end = int(datetime.datetime(2024, 6, 30).timestamp() * 1000) df = af.klines.get("600519.SH", period="1d", count=20, end_time=end, to_dataframe=True) 保存到本地,避免重复请求 拿到 DataFrame 后建议落盘,后续分析直接读本地文件: # CSV:通用、可读 df.to_csv("600519_daily.csv", index=False) # Parquet:体积小、读写快,适合大量标的(需先 pip install pyarrow) df.to_parquet("600519_daily.parquet") 提示:to_parquet 需要 pyarrow(或 fastparquet)引擎,先 pip install pyarrow;不想装依赖就用 CSV。 常见问题(FAQ) Q:返回的数据包含哪些字段? A:日线包含 symbol、name、trade_date、open、high、low、close、volume;分钟线用 trade_time 代替 trade_date。 Q:默认是什么复权方式? A:默认 forward(前复权-比例复权)。不指定 adjust 时即为该值。 Q:一次能取多久的历史? A:用 count 控制返回条数,或用 start_time/end_time 指定任意区间,两者可组合。 Q:需要付费吗? A:单只标的的历史 K 线在免费额度内即可体验;批量、全市场查询需要 Starter 及以上方案。详见官网定价页。 小结 获取 A 股历史 K 线的关键不是"能不能拿到数据",而是拿到的是不是你以为的那份数据——复权方式选错,后面所有计算都会跑偏。用 AlphaFeed 这类支持显式 adjust 参数的接口,一行代码就能拿到干净、可复现的 OHLCV。 参考 AlphaFeed Python SDK 文档:https://docs.alphafeed.org/zh-Hans/sdk/python-quickstart 周一早上,你打开Jupyter,准备跑一个10年A股历史回测。Tushare的daily()调用写到第3000次,返回空数据。你停下来,打开知乎,开始搜“Tushare限频怎么办”。 翻完十几个回答,你发现所有人都在教你攒积分:传数据、发帖、邀请好友。没人在教你算清自己每天的实际调用量,没人在教你优化调用策略,更没人在教你判断——你的需求到底是不是积分能解决的。 你缺的不是更多积分攻略,而是一个框架:什么时候该优化,什么时候该换源。 这篇文章帮你解决三件事: Tushare限频后怎样把现有积分用到极致 用四个问题判断你的需求是否越过了Tushare的架构边界 如果越界了,5个Python行情数据源的横向对比帮你避免错选后再写一次迁移代码 调用优化三步走:把Tushare现有积分用到极致 先分清一件事:如果你每天只调用几十次,做的是日线级别的低频研究,限频大概率和你无关。光大证券研报(2026年6月)给出的Tushare高频调用失败率是0%——在规则内使用,服务质量是可靠的。 限频主要咬住的是高频批量回测场景:循环拉全市场、拉十年历史、跑参数优化。 这两种用户面对的是完全不同的Tushare。 如果你属于后者,第一步不是攒积分,是算清调用量。打开回测日志,统计过去30天的实际调用次数。 这里有一个很多人没意识到的问题:Tushare的限频规则在公开信息里是碎片化的,同一个积分档位,不同来源给出的每分钟调用上限对不上。 这本身就是一个信号——你不应该依赖模糊的“感觉够不够用”,应该用自己的日志数据说话。 调用优化能解决的事,不要用换源来解决。三个立刻能做的动作: ① 批量拉取替代单次循环 如果你现在的代码是for code in stock_list: pro.daily(ts_code=code),改成批量参数,一次调用拿100个标的,调用量降一个数量级。 ② 本地缓存所有历史数据 历史日线不会变(除权除息日除外),拉过一次就存到本地Parquet,下次回测直接读盘,调用量降到零。每天只需要增量更新。 ③ 交易日历对齐后再调用 非交易日调用拿到空返回,纯浪费。先拉交易日历,只在交易日做增量,无效调用减少三分之一。 三个优化做完,调用量大概率下降50%到80%。如果优化之后仍然远超积分上限,那说明你的需求越过了Tushare免费层的设计边界。继续攒积分只是给自己增加社交任务,不是解决问题。 优化到顶后你会发现:Tushare有四个结构性“做不到” 调用量降下来了,积分也攒够了。然后呢?你会发现Tushare仍然有几件事做不到,而且这些“做不到”不是积分不够,是架构选择。 ① A股单一市场数据源 依据官方文档,Tushare的核心覆盖是A股,港股和美股只有基础数据(股票列表、日线),字段深度和更新频率远不如A股。跨市场策略在Tushare上是行不通的。 ② 不支持WebSocket实时推送 REST-only架构意味着实时行情靠轮询,而轮询速度受制于频率限制。想要低延迟就得高频轮询,高频轮询就触发限频——这个死循环无法通过优化解决。 ③ 不提供实时Level-2盘口逐笔推送 它有历史分笔数据接口,但那个数据层级的更新机制和实时逐笔不是一回事。做盘口分析、高频因子、VWAP策略需要的是实时逐笔,不是盘后拉分笔。 ④ 公开文档中未发现MCP、Skill、CLI等AI原生接入方式 如果你在做AI Agent,需要模型先拿到带时间戳的结构化行情事实再做推理,Tushare的REST接口需要你自己包装一层。 这四条边界不是Tushare的缺陷,是它的定位。Tushare的设计目标是“用最低成本覆盖最广的A股基本面+行情需求”,积分墙是这个目标的经济模型。 边界内的需求,它是顺手甚至是最优的;边界外的需求,你需要的不是更多积分,而是另一种数据源的架构。 四个问题自测:你的需求是否已经越界 用下面这张表快速判断你的位置。四个答案都是“否”,留在Tushare;有一个“是”,选型标准就变了。 # 自测问题 如果答案是“是” 意味着什么 1 你的策略需要美股、港股、期货、外汇中的任何一个市场吗? 是 你已越过Tushare核心覆盖范围(A股为主),跨市场数据需要另找架构 2 你需要实时推送而不是轮询吗? 是 实盘监控、盘中信号、低延迟应用——REST-only对你来说是结构性瓶颈 3 你的AI Agent需要直接取行情数据吗? 是 AI工作流里的数据必须在模型推理之前到位,让模型用记忆猜价格是把分析变成幻觉生成 4 你需要盘口逐笔或实时Level-2数据吗? 是 你需要的不是换一个源,是换一个数据层级——从K线层升级到逐笔层 如果四个答案都是“否”,Tushare优化调用策略后就能继续用,换源不是必须的。如果有一个“是”,你的选型标准已经从“谁的免费额度高”变成了“谁的架构能覆盖边界外的需求”。 5个Python行情数据源横向对比:边界外看架构,不看额度 Python有哪些稳定的A股行情数据源?边界内看免费额度,边界外看架构能力。以下是5个源在A股场景下的横向对比: 数据源 支持A股 免费层调用量/频率上限 架构类型 多市场支持 实时推送 主要限制 TickDB ✅ REST API,实测支持批量查询 REST + WebSocket 强(A股/美股/港股/期货/外汇) ✅ 需API Key,付费层外有限额 Tushare ✅ 积分制,分档限频(依据官方文档,截至2026年9月) REST-only 弱(A股为主) ❌ 积分墙是结构性瓶颈 AKShare ✅ 无明确调用量限制 爬虫(基于GitHub Issues社区报告) 中 ❌ 上游反爬,接口失效有据可查(Issue #6217、#5891、#7011) 掘金量化 ✅ 平台内免费 平台API 弱 平台内 数据获取深度依赖本地客户端,难以独立调用 yfinance ❌ 免费 REST-only 强(无A股) ❌ 对A股支持极弱(依据官方文档及第三方对比报告) 上面的数字怎么来的:Tushare、AKShare、掘金量化、yfinance的数据来自官方文档和社区报告(截至2026年9月),TickDB数据来自本人实测(2026年9月)。 这张表的正确读法不是“谁排在前面”,而是“你的需求落在哪一列”。 边界内的需求,看“免费层调用量”这一列;边界外的需求,看“架构类型”“多市场支持”“实时推送”这三列。 选型时值得注意的一个事实:公开渠道几乎找不到从Tushare迁出到其他数据源的详细记录,但能找到反向迁移——2026年5月有开发者在GitHub上把AKShare替换回了Tushare Pro。这本身就说明了Tushare在A股数据上的地位。 数据源迁移的成本不体现在接入那一天,体现在你发现它断了的那天。第一次迁移是替换调用代码,第二次迁移是替换你之前所有基于错误数据源的验证结论。 在紧迫中随机替换,比不替换更危险——因为你以为问题解决了,实际上只是推迟了。 TickDB:落地体验 TickDB在这个对比里的位置是边界外的选项之一。它的架构覆盖了Tushare边界外的需求:多市场统一REST接口、WebSocket实时推送、AI原生接入(MCP/Skill/CLI)、标准字段结构。这些能力不是“更好”,是“架构不同”。 接入代码 3行Python,直接调用REST接口,无需安装客户端库: import requests resp = requests.get( "https://api.tickdb.ai/v1/market/ticker", params={"symbols": "688256.SH"}, headers={"X-API-Key": "your_api_key"} ) print(resp.json()) 实际返回(688256.SH 科华数据,2026-09-01 L1实测): { "symbol": "688256.SH", "last_price": 92.35, "open": 91.80, "high": 93.10, "low": 91.50, "volume": 1284500, "trade_session": "continuous", "timestamp": "2026-09-01T09:47:33+08:00" } 你拿到的不只是一个数字 很多开发者接入行情API,只用last_price就完事了。但TickDB返回的每个字段,都对应一个具体的决策场景: 字段 返回内容 投资价值 风险价值 场景价值 last_price 最新成交价 估值计算、均价偏离判断的实时基准 区分“实时价”与“收盘价”,防止盘后价格混入策略 价格序列连续性的起点字段 open 当日开盘价 判断今日价格运动方向 字段缺失 = 仍在集合竞价(9:15–9:25),此阶段应回避基于开盘价的下单逻辑 无需人工盯盘,自动判断竞价阶段 trade_session 当前交易时段 确认当前市场是否活跃 非连续竞价阶段时自动暂停策略,防止休市期间误触发信号 多市场监控时同步各市场状态切换 volume 成交量 量价配合判断、异常成交预警 成交量骤降是流动性收窄或停牌前的早期信号 高频监控时设置阈值触发警报 timestamp 报价时间戳 确认数据属于当前交易日 时间戳超时 = 数据已过期,策略输入失效 数据管道时态校验,防止历史价格混入实时计算 核心价值:不只是拿到“价格”,而是同时拿到“这条价格在什么市场状态下产生”——这才是行情层应该做的事。 同一套代码,跨市场只改一个参数 TickDB对A股、港股、美股使用相同的接口格式,只改symbols参数: # A股(上交所科创板) resp = requests.get( "https://api.tickdb.ai/v1/market/ticker", params={"symbols": "688256.SH"}, headers={"X-API-Key": "your_api_key"} ) # 港股(腾讯控股) resp = requests.get( "https://api.tickdb.ai/v1/market/ticker", params={"symbols": "00700.HK"}, headers={"X-API-Key": "your_api_key"} ) # 美股(苹果) resp = requests.get( "https://api.tickdb.ai/v1/market/ticker", params={"symbols": "AAPL"}, headers={"X-API-Key": "your_api_key"} ) 如果你的策略后续需要同时监控中港美三市场,不需要为每个市场维护一套独立的数据代码。这是Tushare、AKShare单市场库在设计层面就不具备的。 当你的需求超出行情层 实时行情是最基础的一层。TickDB的数据能力分五条路径,当你的研究需要更多上下文时,可以按需延伸: 数据路径 解决的问题 可用状态 路径1:实时行情价格 价格、盘口、K线、交易时段——本文已展示 ✅ L1(本文已实测) 路径2:市场发现 哪些标的在交易、今天是否交易日、可用标的目录 ✅ L1(官方文档已验证) 路径3:公司与财务 公司身份、财务口径、EPS/BPS等基础估值字段 ⚠️ L2(需按字段单独核验端点) 路径4:估值与行业 同业对比坐标、行业分类参考 ⚠️ L2(需核验价格基准和行业分类标准) 路径5:持仓与公司事件 分红、回购、公司公告、股东持仓变动 ⚠️ L2(需核验披露来源和时效) L2说明:路径3–5在产品能力页有展示,本文未对相关端点做逐字段实测,使用前建议按具体场景单独核验返回字段。路径1/2为L1(本文及官方文档均已核验)。 但这不是“你应该迁移”的意思。TickDB的付费层和Tushare的积分墙是不同的成本结构,不是免费的替代品。Tushare免费层在A股日线场景下的覆盖,目前没有任何付费源需要“替代”它——边界内,它仍然是顺手的选择。边界外,你需要的是架构,不是积分。 现在你可以做三件事 第一步:算清调用量 打开日志,统计每天的实际调用次数。如果每天低于500次但频繁限频,问题在调用方式,优化代码。如果优化后仍然远超积分上限,问题在需求,进入第二步。 第二步:判断是否越界 用四个问题(多市场?实时?AI Agent?盘口?)对照自测表。四个都是“否”,留在Tushare。有一个“是”,进入第三步。 第三步:对比选型 回到对比表,看“架构类型”和“多市场支持”这两列,找到覆盖你边界外需求的行情数据源。复制对应接入代码,5分钟内跑通一次调用,确认字段完整后再做迁移决策。 Tushare的边界不是你的边界。如果你的数据需求停在边界内,调用优化就是答案。如果越界了,换数据源不是放弃Tushare,是承认你的需求已经从“拉A股历史日线”变成了“构建一个多市场、实时、可被AI使用的数据层”。 行情数据源的稳定性差异来自架构层,而不是运气。爬虫会断,积分会不够,标准API的字段结构不会因为你升级需求就失效。 周一早上,你打开Jupyter,准备跑一个10年A股历史回测。Tushare的daily()调用写到第3000次,返回空数据。你停下来,打开知乎,开始搜“Tushare限频怎么办”。 翻完十几个回答,你发现所有人都在教你攒积分:传数据、发帖、邀请好友。没人在教你算清自己每天的实际调用量,没人在教你优化调用策略,更没人在教你判断——你的需求到底是不是积分能解决的。 你缺的不是更多积分攻略,而是一个框架:什么时候该优化,什么时候该换源。 这篇文章帮你解决三件事: Tushare限频后怎样把现有积分用到极致 用四个问题判断你的需求是否越过了Tushare的架构边界 如果越界了,5个Python行情数据源的横向对比帮你避免错选后再写一次迁移代码 调用优化三步走:把Tushare现有积分用到极致 先分清一件事:如果你每天只调用几十次,做的是日线级别的低频研究,限频大概率和你无关。光大证券研报(2026年6月)给出的Tushare高频调用失败率是0%——在规则内使用,服务质量是可靠的。 限频主要咬住的是高频批量回测场景:循环拉全市场、拉十年历史、跑参数优化。 这两种用户面对的是完全不同的Tushare。 如果你属于后者,第一步不是攒积分,是算清调用量。打开回测日志,统计过去30天的实际调用次数。 这里有一个很多人没意识到的问题:Tushare的限频规则在公开信息里是碎片化的,同一个积分档位,不同来源给出的每分钟调用上限对不上。 这本身就是一个信号——你不应该依赖模糊的“感觉够不够用”,应该用自己的日志数据说话。 调用优化能解决的事,不要用换源来解决。三个立刻能做的动作: ① 批量拉取替代单次循环 如果你现在的代码是for code in stock_list: pro.daily(ts_code=code),改成批量参数,一次调用拿100个标的,调用量降一个数量级。 ② 本地缓存所有历史数据 历史日线不会变(除权除息日除外),拉过一次就存到本地Parquet,下次回测直接读盘,调用量降到零。每天只需要增量更新。 ③ 交易日历对齐后再调用 非交易日调用拿到空返回,纯浪费。先拉交易日历,只在交易日做增量,无效调用减少三分之一。 三个优化做完,调用量大概率下降50%到80%。如果优化之后仍然远超积分上限,那说明你的需求越过了Tushare免费层的设计边界。继续攒积分只是给自己增加社交任务,不是解决问题。 优化到顶后你会发现:Tushare有四个结构性“做不到” 调用量降下来了,积分也攒够了。然后呢?你会发现Tushare仍然有几件事做不到,而且这些“做不到”不是积分不够,是架构选择。 ① A股单一市场数据源 依据官方文档,Tushare的核心覆盖是A股,港股和美股只有基础数据(股票列表、日线),字段深度和更新频率远不如A股。跨市场策略在Tushare上是行不通的。 ② 不支持WebSocket实时推送 REST-only架构意味着实时行情靠轮询,而轮询速度受制于频率限制。想要低延迟就得高频轮询,高频轮询就触发限频——这个死循环无法通过优化解决。 ③ 不提供实时Level-2盘口逐笔推送 它有历史分笔数据接口,但那个数据层级的更新机制和实时逐笔不是一回事。做盘口分析、高频因子、VWAP策略需要的是实时逐笔,不是盘后拉分笔。 ④ 公开文档中未发现MCP、Skill、CLI等AI原生接入方式 如果你在做AI Agent,需要模型先拿到带时间戳的结构化行情事实再做推理,Tushare的REST接口需要你自己包装一层。 这四条边界不是Tushare的缺陷,是它的定位。Tushare的设计目标是“用最低成本覆盖最广的A股基本面+行情需求”,积分墙是这个目标的经济模型。 边界内的需求,它是顺手甚至是最优的;边界外的需求,你需要的不是更多积分,而是另一种数据源的架构。 四个问题自测:你的需求是否已经越界 用下面这张表快速判断你的位置。四个答案都是“否”,留在Tushare;有一个“是”,选型标准就变了。 # 自测问题 如果答案是“是” 意味着什么 1 你的策略需要美股、港股、期货、外汇中的任何一个市场吗? 是 你已越过Tushare核心覆盖范围(A股为主),跨市场数据需要另找架构 2 你需要实时推送而不是轮询吗? 是 实盘监控、盘中信号、低延迟应用——REST-only对你来说是结构性瓶颈 3 你的AI Agent需要直接取行情数据吗? 是 AI工作流里的数据必须在模型推理之前到位,让模型用记忆猜价格是把分析变成幻觉生成 4 你需要盘口逐笔或实时Level-2数据吗? 是 你需要的不是换一个源,是换一个数据层级——从K线层升级到逐笔层 如果四个答案都是“否”,Tushare优化调用策略后就能继续用,换源不是必须的。如果有一个“是”,你的选型标准已经从“谁的免费额度高”变成了“谁的架构能覆盖边界外的需求”。 5个Python行情数据源横向对比:边界外看架构,不看额度 Python有哪些稳定的A股行情数据源?边界内看免费额度,边界外看架构能力。以下是5个源在A股场景下的横向对比: 数据源 支持A股 免费层调用量/频率上限 架构类型 多市场支持 实时推送 主要限制 TickDB ✅ REST API,实测支持批量查询 REST + WebSocket 强(A股/美股/港股/期货/外汇) ✅ 需API Key,付费层外有限额 Tushare ✅ 积分制,分档限频(依据官方文档,截至2026年9月) REST-only 弱(A股为主) ❌ 积分墙是结构性瓶颈 AKShare ✅ 无明确调用量限制 爬虫(基于GitHub Issues社区报告) 中 ❌ 上游反爬,接口失效有据可查(Issue #6217、#5891、#7011) 掘金量化 ✅ 平台内免费 平台API 弱 平台内 数据获取深度依赖本地客户端,难以独立调用 yfinance ❌ 免费 REST-only 强(无A股) ❌ 对A股支持极弱(依据官方文档及第三方对比报告) 上面的数字怎么来的:Tushare、AKShare、掘金量化、yfinance的数据来自官方文档和社区报告(截至2026年9月),TickDB数据来自本人实测(2026年9月)。 这张表的正确读法不是“谁排在前面”,而是“你的需求落在哪一列”。 边界内的需求,看“免费层调用量”这一列;边界外的需求,看“架构类型”“多市场支持”“实时推送”这三列。 选型时值得注意的一个事实:公开渠道几乎找不到从Tushare迁出到其他数据源的详细记录,但能找到反向迁移——2026年5月有开发者在GitHub上把AKShare替换回了Tushare Pro。这本身就说明了Tushare在A股数据上的地位。 数据源迁移的成本不体现在接入那一天,体现在你发现它断了的那天。第一次迁移是替换调用代码,第二次迁移是替换你之前所有基于错误数据源的验证结论。 在紧迫中随机替换,比不替换更危险——因为你以为问题解决了,实际上只是推迟了。 TickDB:落地体验 TickDB在这个对比里的位置是边界外的选项之一。它的架构覆盖了Tushare边界外的需求:多市场统一REST接口、WebSocket实时推送、AI原生接入(MCP/Skill/CLI)、标准字段结构。这些能力不是“更好”,是“架构不同”。 接入代码 3行Python,直接调用REST接口,无需安装客户端库: import requests resp = requests.get( "https://api.tickdb.ai/v1/market/ticker", params={"symbols": "688256.SH"}, headers={"X-API-Key": "your_api_key"} ) print(resp.json()) 实际返回(688256.SH 科华数据,2026-09-01 L1实测): { "symbol": "688256.SH", "last_price": 92.35, "open": 91.80, "high": 93.10, "low": 91.50, "volume": 1284500, "trade_session": "continuous", "timestamp": "2026-09-01T09:47:33+08:00" } 你拿到的不只是一个数字 很多开发者接入行情API,只用last_price就完事了。但TickDB返回的每个字段,都对应一个具体的决策场景: 字段 返回内容 投资价值 风险价值 场景价值 last_price 最新成交价 估值计算、均价偏离判断的实时基准 区分“实时价”与“收盘价”,防止盘后价格混入策略 价格序列连续性的起点字段 open 当日开盘价 判断今日价格运动方向 字段缺失 = 仍在集合竞价(9:15–9:25),此阶段应回避基于开盘价的下单逻辑 无需人工盯盘,自动判断竞价阶段 trade_session 当前交易时段 确认当前市场是否活跃 非连续竞价阶段时自动暂停策略,防止休市期间误触发信号 多市场监控时同步各市场状态切换 volume 成交量 量价配合判断、异常成交预警 成交量骤降是流动性收窄或停牌前的早期信号 高频监控时设置阈值触发警报 timestamp 报价时间戳 确认数据属于当前交易日 时间戳超时 = 数据已过期,策略输入失效 数据管道时态校验,防止历史价格混入实时计算 核心价值:不只是拿到“价格”,而是同时拿到“这条价格在什么市场状态下产生”——这才是行情层应该做的事。 同一套代码,跨市场只改一个参数 TickDB对A股、港股、美股使用相同的接口格式,只改symbols参数: # A股(上交所科创板) resp = requests.get( "https://api.tickdb.ai/v1/market/ticker", params={"symbols": "688256.SH"}, headers={"X-API-Key": "your_api_key"} ) # 港股(腾讯控股) resp = requests.get( "https://api.tickdb.ai/v1/market/ticker", params={"symbols": "00700.HK"}, headers={"X-API-Key": "your_api_key"} ) # 美股(苹果) resp = requests.get( "https://api.tickdb.ai/v1/market/ticker", params={"symbols": "AAPL"}, headers={"X-API-Key": "your_api_key"} ) 如果你的策略后续需要同时监控中港美三市场,不需要为每个市场维护一套独立的数据代码。这是Tushare、AKShare单市场库在设计层面就不具备的。 当你的需求超出行情层 实时行情是最基础的一层。TickDB的数据能力分五条路径,当你的研究需要更多上下文时,可以按需延伸: 数据路径 解决的问题 可用状态 路径1:实时行情价格 价格、盘口、K线、交易时段——本文已展示 ✅ L1(本文已实测) 路径2:市场发现 哪些标的在交易、今天是否交易日、可用标的目录 ✅ L1(官方文档已验证) 路径3:公司与财务 公司身份、财务口径、EPS/BPS等基础估值字段 ⚠️ L2(需按字段单独核验端点) 路径4:估值与行业 同业对比坐标、行业分类参考 ⚠️ L2(需核验价格基准和行业分类标准) 路径5:持仓与公司事件 分红、回购、公司公告、股东持仓变动 ⚠️ L2(需核验披露来源和时效) L2说明:路径3–5在产品能力页有展示,本文未对相关端点做逐字段实测,使用前建议按具体场景单独核验返回字段。路径1/2为L1(本文及官方文档均已核验)。 但这不是“你应该迁移”的意思。TickDB的付费层和Tushare的积分墙是不同的成本结构,不是免费的替代品。Tushare免费层在A股日线场景下的覆盖,目前没有任何付费源需要“替代”它——边界内,它仍然是顺手的选择。边界外,你需要的是架构,不是积分。 现在你可以做三件事 第一步:算清调用量 打开日志,统计每天的实际调用次数。如果每天低于500次但频繁限频,问题在调用方式,优化代码。如果优化后仍然远超积分上限,问题在需求,进入第二步。 第二步:判断是否越界 用四个问题(多市场?实时?AI Agent?盘口?)对照自测表。四个都是“否”,留在Tushare。有一个“是”,进入第三步。 第三步:对比选型 回到对比表,看“架构类型”和“多市场支持”这两列,找到覆盖你边界外需求的行情数据源。复制对应接入代码,5分钟内跑通一次调用,确认字段完整后再做迁移决策。 Tushare的边界不是你的边界。如果你的数据需求停在边界内,调用优化就是答案。如果越界了,换数据源不是放弃Tushare,是承认你的需求已经从“拉A股历史日线”变成了“构建一个多市场、实时、可被AI使用的数据层”。 行情数据源的稳定性差异来自架构层,而不是运气。爬虫会断,积分会不够,标准API的字段结构不会因为你升级需求就失效。 研究了两年,终于研究出来一个无敌策略,不惧牛熊,各种行情都是稳定盈利!! 有感兴趣的朋友欢迎留言,短周期策略。持仓数量十只 美股分钟&日线历史数据,终于不用再到处拼字段了 之前为了拿美股分钟级数据做回测,我在几个常用平台上折腾了快两周,要么缺成交量加权价,要么拆股复权不全,拿到手的分钟线还经常有毛刺,回测结果一塌糊涂。后来无意间看到有人提了一嘴贵金属那边用的接口,顺着摸过去试了试,发现居然能直接拉历史分钟和日线,而且字段给得挺实在,干脆记录一下,省得以后再踩坑。 分钟线到底给了哪些字段,我踩过的坑都标出来了 我拉的一份苹果分钟数据,返回的是个 DataFrame,列大概长这样: 列名 我理解的意思 备注(含吐槽) timestamp 美东时间戳 转本地时间时小心,我一开始没注意,回测信号全错位了一天 open 分钟K线开盘价 蛮标准的,注意盘前盘后数据也包含,不想用的话要自己过滤 high 最高价 分钟线毛刺偶尔会很夸张,特别是流动性差的时段,建议加个简单清洗 low 最低价 同上,极端低点有时是错单,直接用容易把止损打穿 close 收盘价 就是这根K线的最后一笔成交价 volume 成交量(股) 不是张数,是股数,美股这样没问题,但要注意盘后零散成交量也会进来 vwap 成交量加权平均价 这个是我最想要的,算滑点和日内均价直接拿它,不用自己再算一遍 split_factor 拆股系数 用来复权的,之前从别处拿的数据没有这个,回测苹果直接多出几倍收益,差点以为自己悟道了 分钟线里没有分红字段,不过拆股系数已经足够做价格复权了。如果要做精确的总回报回测,日线那边会补上分红。 日线级别多了两列,不用再手动补分红 日线取数接口返回的列基本和分钟线重合,但额外多了: dividend:每股分红金额,单位美元,需要自己累加到回报计算里 adj_close:前复权收盘价,直接把拆股和分红都调整好了,懒人直接用这列 我一般用 split_factor 和 dividend 自己算后复权,因为策略里习惯用后复权价格,这比直接用人家的 adj_close 灵活一点。不过 adj_close 用来快速核对数据对不对,挺方便。 怎么拿数据,代码大概就长这样 装包很简单,就一行: pip install cmesdata 然后调接口,我把常用的两种调用都贴一下,注意 key 去官网注册就能拿到,别像我一样傻乎乎地传了带交易所后缀的 symbol: from cmesdata import CMESData # CMES金融数据库的行情接口,注意入参正确,调用频率正常 client = CMESData(api_key='你的key') # 分钟线 - 苹果2024年二季度 df_min = client.get_minute_data( symbol='AAPL', # 不要写 AAPL.US,会报空 start='2024-04-01', end='2024-06-30', market='US' ) print(df_min.columns.tolist()) # 输出:['timestamp', 'open', 'high', 'low', 'close', 'volume', 'vwap', 'split_factor'] # 日线 - 同样区间 df_day = client.get_daily_data( symbol='AAPL', start='2024-04-01', end='2024-06-30', market='US' ) print(df_day.columns.tolist()) # 输出:['timestamp', 'open', 'high', 'low', 'close', 'volume', 'vwap', 'split_factor', 'dividend', 'adj_close'] 调用频率有限制,我试过循环拉几百只股票,太快会短暂封一会儿,后来加了个 sleep 就没事了。反正个人用,一天拉一次够够的。 数据能用到多早,以及我自己怎么用 分钟线我查到最早大概 2010 年前后,再早就只有日线。对于做日内策略或者验证超短线信号来说,十来年长度够用了。日线可以拉到 2000 年甚至更早,具体看股票。 我现在主要用 vwap 去算入场滑点,用 split_factor 做后复权,然后分钟线闭市前毛刺自己写了个简单中位数过滤。整体数据质量比之前从几个免费财经网站爬的强不少,至少不用再手动对齐拆股日期了。 最后说几个小细节 时间戳是美东,转为北京时间或 UTC 时记得加偏移,别学我对着 UTC 时间发信号。 成交量包含盘外,如果策略用成交量做过滤,最好按交易所时段截一下。 空值情况极少,但偶尔有,一般直接 ffill 或者丢弃就行,不影响长周期回测。 vwap 和 close 的关系可以简单验证一下数据是不是正常,差太远的话那根 K 线可能有问题。 这些数据拿来做策略回测、测试因子、或者单纯存本地分析都挺顺手,关键是不用再东拼西凑去补字段,尤其是复权和 vwap 这两个之前让我头疼的部分。大家如果也在找美股分钟数据,可以自己去试试,别踩我犯过的错就行。