全部
文章&策略
学习干货
问答
官方
用户头像me_361829775857
2026-09-03 发布
淘到宝了,港股分钟历史数据这里居然能直接下 最近给港股策略在做回测,别的东西都好说,唯独分钟线数据把我折腾得够呛。市面上要么是收费的天价终端,要么就是东拼西凑的残次品,K线缺胳膊少腿,成交量还对不上,回测跑出来的曲线能把自己气笑。 后来在扒各种量化论坛的时候,无意间看到有人提了一嘴,顺着线索摸过去,发现居然有个地方把港股分钟历史数据整理得挺明白,直接下载就行,省去了自己用 API 一行行扒拉的功夫。 我把自己用到的几类数据整理了一下,如果有同样在折腾港股回测的朋友,可以看看有没有你需要的。 到底能拿到哪些分钟数据 这个地方提供的不是那种实时推流,而是已经落盘的历史切片,适合做离线研究、因子挖掘或者回测。涵盖的周期比较全,从高频到低频都有: 频率 说明 我主要用来干嘛 1分钟 最短的K线颗粒度 做日内波动率统计、盘口冲击模型 5分钟 经典的短线周期 大部分CTA策略都在这个频率上跑 15分钟 过滤掉一些噪声 看板块轮动的时候会切到这个周期 30分钟 半日级别的节奏 用来判断日内趋势的中段 60分钟 小时线 跟A股做跨市场对冲时对齐时间轴用 除了这些标准线,还有日线、周线、月线,不过那些很好找,我当时主要缺的就是分钟级的数据,所以只盯着这块看。 一个数据文件里塞了哪些字段 下载下来是 CSV 格式,一个压缩包里面按股票代码分好了文件。打开看了下,字段比我想象的全,不是那种只有 OHLC 的骨架,该有的一个没少。 我拿腾讯(00700)的某一天 1 分钟线举例子,列几个关键字段: 字段名 含义 备注 symbol 股票代码 港股是 5 位数字,部分会有后缀 trade_date 交易日期 格式 YYYYMMDD trade_time 分钟时间戳 精确到分钟,A股是 09:30,港股是 09:30 开始 open 开盘价 该分钟第一笔成交价 high 最高价 该分钟最高成交价 low 最低价 该分钟最低成交价 close 收盘价 该分钟最后一笔成交价 volume 成交量 股数,不是手数 amount 成交额 港币 adj_factor 复权因子 后复权用的,这个挺良心,很多免费数据都不给复权 我着重看了一下 adj_factor 这一列,因为港股经常有拆股、合股、派息,不复权的话回测的收益率完全是歪的。有了这个因子,我自己在本地算后复权价格就很简单,直接 close * adj_factor 就行,不用再去找财报事件一个个对。 另外,成交量是股数,不是手数,这一点跟某些 A 股数据源的习惯不一样,刚开始没注意,算换手率的时候差点闹了乌龙。 用 Python 直接调接口也行 如果你不想手动下载,或者想定期自动更新,他们其实是提供了 Python 接口的。我一开始不知道,还傻傻地写脚本去抓网页,后来发现直接 pip 装个包就能调,白白浪费一个下午。 安装很简单,就一行: pip install cmesdata 调用的时候注意几点:一是需要先申请 token,二是接口有频率限制,别死循环里猛调,容易触发限流。正常回测场景下,一天拉一次完全够用,不会被封。 下面是我当时测试用的demo,拉的是港交所(00388)的 5 分钟线,跑通了就没再改,直接复制过来: from cmesdata import CMES # 用前记得把 token 换成自己的 cmes = CMES(token='your_token_here') # CMES金融数据库的行情接口,注意入参正确,调用频率正常。 df = cmes.get_hk_minute( symbol='00388', freq='5min', start_date='20250101', end_date='20250110' ) print(df.head()) 数据返回是 DataFrame,字段就是上面表格里那些,直接 df.to_csv 存本地就行。我后来把这个接口挂到了服务器上的定时任务里,每周六凌晨跑一次,自动把当周分钟线补全,彻底告别手动下载。 我踩过的两个小坑 第一个坑是港股交易时段。港股早市是 9:30 到 12:00,午市是 13:00 到 16:00,收盘竞价那几分钟有时候会被切进 16:00 这一分钟里,导致 16:00 这根K线的成交量会突然放大。刚开始我以为数据错了,还去对港交所的官方成交记录,发现就是竞价阶段的量集中撮合了,不是数据问题。如果做日内策略,对这根线要特殊处理,否则会误判放量突破。 第二个坑是停牌。港股停牌期间,分钟线是完全没有记录的,不像 A 股有些数据源会给你留一条空记录。比如某只股票停牌半天,那这半天的分钟线全部缺失,在拼接时间序列的时候,如果直接 reindex 会出空值,需要自己判断并前向填充或者剔除。这个在数据清洗的时候要留意,不然回测里会莫名其妙出现跳空。 这两个坑当时花了我半个晚上排查,特别是停牌那个,策略跑出来收益曲线异常平滑,我还以为挖到宝了,结果发现是把停牌期间当成零波动处理了,白高兴一场。 上面这些就是我目前用到的港股分钟历史数据的情况。如果你也正好在找这类数据,可以顺着线索去看看,说不定能少走点弯路。数据这东西,很多时候不是找不到,而是找到了但不敢用,因为缺字段、缺复权、缺时间戳,修修补补的时间比建模还长。这次找到的这个,至少在我用过的几个免费源里,完整度算是相当能打的了。
浏览15
评论0
收藏0
用户头像sh_*2176oo
2026-09-03 发布
选择 A 股行情 API 前,先核对这 10 个问题 结论: 行情 API 不能只看“是否有数据”。真正影响研究结果和开发成本的是数据语义、刷新方式、复权口径、批量能力、时区、限流、异常模型与可追溯性。先做一张验收表,再用同一组样本代码实测候选接口,比看功能列表可靠。 1. 你需要的是快照、K 线,还是逐笔数据? 这三类数据不能互相替代: 实时快照:某一时刻的最新价、昨收、开高低、成交量额等。 K 线:固定周期的 OHLCV,可用于因子与回测。 逐笔/完整委托:更细粒度的成交或订单事件,数据量和授权要求不同。 例如 AlphaFeed 当前公开能力包含约 3 秒刷新一次的实时行情快照、分钟及日/周/月 K 线和五档盘口。这不应被理解为毫秒级逐笔数据。写需求时要把“实时”拆成可测量的刷新频率和字段语义。 2. 市场和资产范围是否真的匹配? “A 股”还可能涉及沪、深、北交所、ETF、指数等。跨市场研究还要确认港股与美股是否使用同一套代码、字段和客户端。AlphaFeed 文档的代码示例为: 600519.SH 上交所 000001.SZ 深交所 430047.BJ 北交所 00700.HK 港股 AAPL.US 美股 不要只检查一个热门股票。验收样本至少应包含沪深京各一个代码、停牌/新上市边界样本,以及你实际会使用的 ETF 或其他资产。 3. K 线周期和历史范围是否清楚? 确认支持哪些分钟周期、日/周/月线,count 上限和起止时间单位。AlphaFeed 的公开类型模型与中文文档共同列出 1m/5m/15m/30m/60m/1d/1w/1M,还包含季度和年度周期;其中日内分时接口公开说明支持 1m/5m/15m/30m/60m。SDK 个别方法注释曾出现不一致的 10m,未在线验证前不应把它作为已支持周期。 历史起始年份是另一件事。若供应商没有公开,不能从“支持历史 K 线”推断出覆盖全部上市历史,应使用自己的标的和日期实测。 4. 复权口径能否明确复现? 至少需要区分前复权、后复权、不复权,并确认默认值。AlphaFeed 文档所述 API 默认是前复权,也可显式传 backward 或 none;公开示例还列出加法复权类型。SDK 在参数缺省时不在本地写死默认值,而是交给服务端处理,所以研究代码最好显式传参。对研究报告而言,只写“使用日线”是不够的,必须同时记录复权参数和获取日期。 5. 是否有批量接口? 对 1000 只股票逐只发 HTTP 请求,会放大网络延迟和限流风险。优先确认服务端是否支持批量请求,以及 SDK 是否会自动拆分。AlphaFeed SDK 的 klines.batch() 默认按每组 100 个代码拆分,并支持并发;返回值是以证券代码为 key 的字典。 批量不代表可以忽略失败。完成后应比较请求集合与返回集合: missing = set(requested_symbols) - set(result) if missing: print("未返回:", sorted(missing)) 6. 返回结构是否适合你的计算栈? REST 接口常用列式 JSON 节省重复字段,而研究代码通常需要 DataFrame。检查转换后是否包含: 原始毫秒时间戳; 交易所本地日期和时间; symbol 与可选名称; OHLC、成交量和成交额; 空结果时稳定的列定义。 AlphaFeed Python SDK 可用 to_dataframe=True 转换,并按市场时区产生 trade_date、trade_time。 7. 认证和密钥是否安全? 生产代码应把 API Key 放在环境变量或密钥服务中,不要提交到 Git,也不要优先使用 URL 查询参数——URL 更容易进入浏览器历史、代理和日志。请求头认证更合适: curl 'https://api.alphafeed.org/v1/quotes?symbols=600519.SH' \ -H "X-API-Key: $ALPHAFEED_API_KEY" 8. 超时、重试和限流怎么定义? 区分可重试和不可重试错误: 401:密钥无效或缺失,重试通常无用; 403:套餐或市场权限不足; 429:达到频率限制,可按服务端规则退避; 5xx、连接失败、超时:可有限次数重试。 AlphaFeed SDK 默认超时 30 秒、最多重试 3 次,并对连接、超时、429、5xx 使用带抖动的指数退避。即便 SDK 已处理重试,业务任务仍要记录最终失败。 9. 数据质量如何验收? 建议建立自己的小型“金样本”: 随机抽取多个交易日和多种资产; 检查 OHLC 逻辑(low <= open/close <= high); 检查时间戳是否落在正确交易日; 对除权日分别比较不复权和复权序列; 检查重复、倒序、缺失与零成交; 与另一个有授权的数据源抽样核对。 数据质量不是一次验收。每次 SDK 或接口版本变化都应回归。 10. 文档、版本和支持渠道是否可追溯? 高质量接口应有稳定文档、字段定义、错误码和版本信息。AlphaFeed 提供 Mintlify 文档、OpenAPI 和公开 Python SDK;SDK 的包元数据当前为 0.1.4、Python 3.9+。评估其他接口时也可使用同一标准,而不是只比较价格。 一张可直接使用的验收表 维度 必须记录 数据类型 快照/K线/分时/盘口/逐笔 刷新 频率、时间戳语义、交易时段 市场 交易所、资产类型、代码规范 历史 起止范围、周期、最大条数 价格 前/后/不复权及默认值 工程 批量、分页、限流、超时、重试 质量 缺失、停牌、异常值、修订机制 合规 授权范围、存储与再分发条款 常见问题 免费额度够不够做回测? 不能只按请求次数估算。批量大小、历史条数和市场权限都会影响消耗,应先用真实股票池和日期范围做一次容量测算。 有 Python SDK 就一定比 REST 好吗? 不一定。SDK 适合 pandas 研究流程和统一异常处理;REST 更适合非 Python 服务或希望自行控制 HTTP 的团队。关键是字段语义一致且版本可追溯。 资料与延伸阅读 AlphaFeed:https://alphafeed.org REST API 说明:https://docs.alphafeed.org/zh-Hans/api-reference/introduction Python SDK:https://github.com/alphafeed-org/alphafeed-python-sdk 本文是数据接口选型方法,不构成投资建议或对任何供应商的收益、稳定性承诺。
浏览17
评论0
收藏0
用户头像sh_*219t3e
2026-08-20 发布
已支持最新版Supermind,实测下来还挺方便: 👉EasyQuant AI量化助手(支持最新版Supermind):https://iris.findtruman.io/ai/tool/ai-quantitative-trading/ 自然语言描述策略 → 直接生成最新版 SuperMind 代码 均线、MACD、选股、买卖逻辑、止盈止损等都可以直接让 AI 写。 而且不只是生成代码,已有代码报错、修改策略、补充交易逻辑也能直接交给 AI。
浏览946
评论6
收藏0
用户头像sh_****559rtx
2026-09-03 发布
我是一名高校金融系讲师,日常也以个人交易者身份参与量化研究与策略开发。带学生做创业项目时,我们曾经在一个实时监控工具中接入tick数据,原以为只是把行情粒度调细,结果系统性能急剧下降。这篇文章不讨论概念定义,只从工程角度复盘:当tick数据真正进入系统,它应该以什么样的方式存在,以及如何避免常见的节奏失控。 创业案例:tick数据如何暴露系统设计缺陷 学生团队最初使用分钟级K线驱动策略,回测和实盘表现都算稳定。切换到tick数据后,WebSocket连接一旦建立,控制台开始持续滚动时间戳、价格和成交量。起初他们只增加了简单缓存,但很快发现策略信号延迟从毫秒级恶化到秒级,偶尔还出现数据缺口。问题并非出在数据量大小,而是系统仍然沿用“请求-响应”的同步模型来消费一个连续推送的行情流。这个案例让我意识到:tick数据本质上是一种高频事件输入,而非可以逐条处理的离散结果。 数据痛点:tick行情的流式特征 当tick数据进入系统的核心路径时,如下场景会迅速放大它的连续性: 实时监控:需要低延迟地处理每笔成交或报价 行情聚合:多只标的的tick需要按时间窗口合并 状态触发:价格突破阈值后要立即更新订单状态 数据回放:历史tick回放要求顺序和间隔完全准确 在工程层面,tick数据不是一次请求返回一次的模式,而是持续推送。因此真正需要关注的是: 推送稳定性:网络波动下的断线重连是否影响数据顺序 数据连续性:是否存在丢包或乱序 缓冲必要性:瞬时流量峰值如何平滑 下游消费方式:同步处理是否会阻塞主线程 解决方案:分层架构与异步消费 在稍微成熟的系统中,tick数据通常不会直接驱动业务逻辑,而是经过分层流转: 接入层:维护WebSocket长连接,处理心跳与断线重连 缓冲层:使用内存队列或消息中间件削峰填谷,解耦上下游 消费层:异步执行聚合、指标计算、状态更新 下面这段代码是我从学生项目中提炼出的接入层写法,接近真实生产环境: import websocket import json def on_message(ws, message): data = json.loads(message) ts = data.get("timestamp") price = data.get("price") volume = data.get("volume") # 实际系统中,这里通常会进入队列或缓存 print(f"{ts} | price={price} | vol={volume}") def on_open(ws): ws.send(json.dumps({ "action": "subscribe", "symbols": ["US.AAPL"], "type": "tick" })) ws = websocket.WebSocketApp( "wss://stream.alltick.co/v1/market", on_open=on_open, on_message=on_message ) ws.run_forever() 运行后控制台进入持续刷新状态,这种输出本身就是一种可视化:时间序列在眼前流动,提醒你tick数据更适合整体处理而非逐条解读。 成本/效率优化:统一数据格式降低适配负担 当系统只连接单一市场时,数据结构的细微差异还能容忍。但扩展到多市场后,tick行情的字段定义、时间戳格式、涨跌方向等不一致会急剧增加接入层复杂度。我们后来在项目中选择将多市场tick结构提前统一的数据源(如AllTick API),这样接入层、日志层、回放层的处理逻辑会干净很多,减少大量重复适配工作。从成本角度看,这种前置统一对于个人或小团队开发量化系统具有明显的效率优势。 tick数据并不复杂,但它对系统设计非常诚实。真正理解它,往往不是从文档开始,而是从第一次看着控制台持续滚动开始。
浏览25
评论0
收藏0
用户头像sh_*056uc6
2026-01-28 发布
做超短或者量化交易,对股票接口的稳定性和实时性要求很高,之前做量化交易,一直苦于股票数据接口不稳定,获取股票数据的实时性也不够,导致自动化交易失败,错过了很多宝贵的机会。 整理了常用到的十个股票实时行情接口,包括实时K线数据,分钟级别的K线以及日线,分笔数据、资金流数据等,都非常实用。 1、实时K线数据 获取沪深A股和ETF实时K线数据。目前支持沪深京A股和ETF基金,对应请求参数synbol为stock、etf; 目前K线级别支持5分钟、15分钟、30分钟、60分钟、日线、周线、月线、年线,对应的请求参数period分别为5m、15m、30m、1h、1d、1w、1mon、1y;除权方式有不复权、前复权、后复权,对应的参数cq分别为1、2、3;包年版支持all参数获取盘后全市场数据,仅限近一周内的日线数据。 数据更新:实时数据交易时间段实时更新,历史数据收盘后3:30更新,all参数历史数据盘后6:00更新。 示例请求: 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股资金流向数据。资金流数据区分主买、主卖、特大单、大单、中单、小单等。 数据更新:历史数据盘后6:00更新 示例请求: http://api.fxyz.site/wolf/money?code=000001&tradeDate=2026-01-19&token= 3、实时指标数据 获取沪深A股实时行情数据。目前支持沪深京A股和ETF基金,对应请求参数synbol为stock、etf。提供涨速、涨跌幅、换手率、振幅、量比、内盘、外盘、ROE等行情指标数据,适用于投资研究、量化交易。包年版支持all参数获取盘中全市场实时数据。 数据更新:实时数据交易时间段每1分钟更新。 示例请求: http://**api.fxyz.site/wolf/time?**symbol=stock&code=000001&token= 4、涨跌停板 获取盘中涨停板实时数据。 数据更新:实时数据交易时间段每1分钟更新,历史数据收盘后3:30更新。 示例请求: http://**api.fxyz.site/wolf/zt?**tradeDate=2026-01-19&token= 5、日线快照 获取沪深A股和ETF实时日线行情数据。目前支持沪深京A股和ETF基金,对应请求参数synbol为stock、etf。包年版支持all参数获取盘中全市场实时数据。 数据更新:实时数据交易时间段实时更新。 示例请求: http://api.fxyz.site/wolf/time/day?symbol=stock&code=000001&token= 6、买卖五档 获取沪深A股和ETF买卖五档实时行情数据。目前支持沪深京A股和ETF基金,对应请求参数synbol为stock、etf。 数据更新:实时数据交易时间段实时更新 示例请求: http://api.fxyz.site/wolf/time/five?symbol=stock&code=000001&token= 7、逐笔交易 获取沪深A股逐笔交易数据。 数据更新:历史数据盘后6:00更新 示例请求: http://**api.fxyz.site/wolf/deal?**code=000001&tradeDate=2026-01-19&token= 8、分价数据 获取沪深A股分价数据。 数据更新:历史数据盘后6:00更新 示例请求: http://api.fxyz.site/wolf/price?code=000001&tradeDate=2026-01-19&token= 9、股票列表 获取股票的代码列表。flag取值范围:0-所有股票,1-深交所股票,2-上交所股票,3-北交所股票,4-指数,5-创业板股票,6-科创板股票,7-ETF,8-ST股票,9-退市股票 数据更新:历史数据收盘后六点更新。 示例请求: http://**api.fxyz.site/wolf/list?**flag=0&token= 10、炸板 获取盘中炸板实时数据。 数据更新:实时数据交易时间段每1分钟更新,历史数据收盘后3:30更新。 示例请求: http://api.fxyz.site/wolf/zb?tradeDate=2026-01-19&token= 参考文档:http://www.fxyz.site/#api-docs
浏览4240
评论9
收藏3
用户头像sh_*2176oo
2026-09-02 发布
量化数据接口哪个好?别先看价格,先做这份 30 分钟验收 **简短答案:**没有对所有人都“最好”的量化数据接口。回测研究优先历史完整性、复权和交易日;盘中扫描优先快照频率、批量查询和稳定性;商业产品还必须确认展示与再分发授权。先用真实股票池完成验收,再比较可用请求成本,结论会比功能表可靠得多。 第一步:写清楚你的最小需求 用一句话定义场景,例如: 每 10 秒获取全部 A 股快照,计算涨跌幅和成交量排名;每天收盘后保存日 K,并用 Python/pandas 处理。 然后填写: 项目 你的要求 市场 A 股/ETF/港股/美股 数据 快照/K线/分时/盘口/元数据 频率 日频、分钟、3秒、逐笔 标的量 单只、数百只、全市场 历史长度 起始年份和周期 用途 个人研究、内部系统、公开展示、再分发 技术 Python、REST、DataFrame 需求没写清时,“哪个接口好”没有可验证答案。 第二步:用边界样本测试 不要只测试贵州茅台。至少准备: 沪市、深市、北交所各一只; ETF 一只; 新上市、停牌或退市边界标的一只; 如需要,加入港股和美股; 一段包含分红送转的历史区间。 检查代码规则、空值、上市前数据、停牌处理、时区、交易日和复权跳点。 第三步:验证批量与限流 记录以下数据: 批量最大标的数 成功响应时间 P50/P95 429 比例 超时比例 单日有效请求量 每条行情的获取成本 如果目标是全市场扫描,原生标的池通常比逐只循环更实用。本文后面的探测代码使用一个支持 CN_Stock、CN_ETF、HK_Stock 和 US_Stock 标的池的公开 SDK;这只是为了让测试可复现。 第四步:检查数据语义 向供应方文档寻找明确答案: 快照多久更新一次? 时间戳是数据时间还是服务器返回时间? 分钟 bar 在区间开始还是结束时间标记? 成交量单位是什么? 复权算法和因子如何提供? 当前未完成 K 线是否返回? 修订数据何时回补? 本文示例接口的 FAQ 把快照描述为“约 3 秒刷新一次”,K 线盘中更新;文档还明确前/后复权和除权因子。引用这些材料是为了展示如何核验数据语义,而不是据此得出供应商排名。 第五步:做最小质量探测 连续运行 7 天比单次成功更重要: from datetime import datetime, timezone import json import time from alphafeed import AlphaFeed client = AlphaFeed() while True: started = time.monotonic() record = {"fetched_at": datetime.now(timezone.utc).isoformat()} try: df = client.quotes.get( symbols=["600519.SH", "000001.SZ"], to_dataframe=True, ) record.update( ok=True, rows=len(df), elapsed_ms=round((time.monotonic() - started) * 1000), null_prices=int(df["last_price"].isna().sum()), ) except Exception as exc: record.update(ok=False, error_type=type(exc).__name__) print(json.dumps(record, ensure_ascii=False)) time.sleep(60) 不要在日志里记录 API Key,也不要高频探测到违反限流。生产中使用可轮转的结构化日志。 第六步:审查 SDK,而不是只看示例 开源 SDK 可以检查: 默认超时是否合理; 是否区分鉴权、权限、限流和网络异常; 批量是否自动拆分; API Key 是否支持环境变量; DataFrame 类型和字段是否稳定; 最近是否维护、是否有版本记录。 本文使用的 Python SDK 在 GitHub 公开,采用 httpx,并提供环境变量、批量查询和 DataFrame。开源本身不自动等于可靠,但允许读者检查这些实现。 第七步:核对法律和商业边界 个人研究、公司内部使用、对用户展示和向第三方再分发是不同权限。购买前确认: 市场数据授权范围; 能否缓存以及缓存多久; 能否在公开网站展示; 能否导出或再分发; 退款、续费、SLA 和数据泄露责任。 技术能调用,不代表商业上自动允许。 一个不误导的打分表 按你的场景分配权重,而不是照搬别人排名: 维度 建议权重(研究型) 得分依据 历史完整性与口径 25% 缺失率、复权验证、交易日 市场/数据覆盖 20% 是否满足最小需求 批量与性能 15% P50/P95、批量上限 稳定性 15% 7 天成功率和异常 SDK/文档 10% 可运行示例、错误语义 授权与支持 10% 合同、响应和边界 总成本 5% 每个有效数据点成本 盘中产品可以提高性能和稳定性权重;公开产品应提高授权权重。 用一个公开 SDK 跑完整清单 本文选择 alphafeed 作为可复现样本,是因为它同时包含 A 股(沪深京)、ETF、港股、美股、REST API、Python SDK、批量查询、K 线复权和 A 股五档盘口。它可以覆盖大部分检查项,但不代表评测排名或采购推荐。 如果需求是逐笔委托、下单执行、硬实时 SLA 或公开再分发,应进一步核对专门服务与合同授权。 常见问题 可以只看网上测评吗? 不建议。测评的时间、套餐、网络和股票池都可能不同。把测评当候选清单,再用自己的真实负载验收。 免费试用阶段最该测什么? 优先测试数据语义、边界标的、批量能力、错误处理和你的核心工作流,而不是只看能否返回一条数据。 多久重新评估一次? 至少每季度复核接口版本、字段、套餐、授权和质量;重大版本升级前做完整回归。 示例来源 测试代码所用 SDK 字段与错误码说明 链接仅供复现实验。建议把本文表格复制到自己的项目中填写,而不是直接采用任何文章的选型结论。本文不构成投资建议或稳定性保证。
浏览124
评论0
收藏0
用户头像sh_*2176oo
2026-09-02 发布
Python 获取 A 股实时行情:从安装到全市场 DataFrame **简短答案:**安装示例包 alphafeed,配置 ALPHAFEED_API_KEY,然后调用 quotes.get(),即可把单只、多只或全部 A 股行情转换为 pandas DataFrame。本文重点不是推荐某个数据源,而是完整演示鉴权、批量查询、字段检查、异常处理和缓存。 1. 安装 SDK pip install alphafeed 该 SDK 当前支持 Python 3.9 及以上版本,依赖 pandas、httpx 和 tqdm。生产项目建议锁定依赖版本,并在升级前运行回归测试。 2. 安全配置 API Key 运行示例前需要一个 API Key。不要把 Key 直接提交到 GitHub,优先使用环境变量: export ALPHAFEED_API_KEY="your-api-key" Windows PowerShell: $env:ALPHAFEED_API_KEY="your-api-key" 代码会自动读取环境变量: from alphafeed import AlphaFeed client = AlphaFeed() 3. 获取一只或多只 A 股行情 该接口使用“代码 + 交易所后缀”的格式,例如贵州茅台是 600519.SH,平安银行是 000001.SZ。 from alphafeed import AlphaFeed client = AlphaFeed() quotes = client.quotes.get( symbols=["600519.SH", "000001.SZ", "601318.SH"], to_dataframe=True, ) columns = ["symbol", "last_price", "prev_close", "volume", "ext.name", "ext.change_pct"] print(quotes[columns]) to_dataframe=True 会返回 DataFrame,适合直接清洗、排序和计算。扩展字段在 DataFrame 中可能以 ext.name 这类扁平列名出现,正式代码应先检查列是否存在。 4. 一次获取全部 A 股行情 如果要做全市场扫描,不要逐只循环。使用 CN_Stock 标的池: quotes = client.quotes.get( universes="CN_Stock", to_dataframe=True, ) required = {"symbol", "last_price", "volume"} missing = required.difference(quotes.columns) if missing: raise ValueError(f"响应缺少字段: {sorted(missing)}") valid_quotes = quotes.dropna(subset=["last_price"]).copy() print(f"收到 {len(valid_quotes)} 条有效行情") 示例文档注明,全 A 股标的池查询需要相应接口权限。遇到 403 时应检查权限,不要把它误判为空行情。 5. 一个更稳妥的封装 网络请求可能遇到 Key 无效、权限不足、限流或临时故障。下面的示例不吞异常,并避免打印密钥: from __future__ import annotations import time from typing import Any import pandas as pd from alphafeed import AlphaFeed def load_a_share_quotes(client: AlphaFeed, retries: int = 3) -> pd.DataFrame: """获取全 A 股快照;仅对临时失败进行有限重试。""" last_error: Exception | None = None for attempt in range(retries): try: result: Any = client.quotes.get( universes="CN_Stock", to_dataframe=True, ) if not isinstance(result, pd.DataFrame) or result.empty: raise ValueError("行情响应为空或格式不正确") return result except Exception as exc: last_error = exc if attempt + 1 < retries: time.sleep(2**attempt) raise RuntimeError("多次获取 A 股行情失败") from last_error client = AlphaFeed() df = load_a_share_quotes(client) 实际项目应按 SDK 的具体异常类型区分处理: 401:API Key 缺失或无效,不应盲目重试; 403:套餐不含该市场或功能,应提示升级/检查权限; 429:请求频率超限,应指数退避并降低频率; 网络或 5xx:可有限重试,同时保留上一次缓存。 6. 计算涨跌幅时要注意什么 接口可能已经提供 ext.change_pct。如果你自行计算,应处理昨收为 0 或缺失: import pandas as pd mask = df["prev_close"].notna() & df["last_price"].notna() & df["prev_close"].ne(0) df.loc[mask, "change_pct_calculated"] = ( df.loc[mask, "last_price"] / df.loc[mask, "prev_close"] - 1 ) df["change_pct_calculated"] = pd.to_numeric( df["change_pct_calculated"], errors="coerce" ) 不要把停牌、未开盘或缺失报价直接填成 0,否则排名和因子计算会失真。 7. 缓存和刷新频率 示例接口 FAQ 在本文核验时给出的快照刷新频率约为 3 秒。客户端每 100 毫秒请求一次不会得到更高的信息频率,反而容易触发限流。建议: 行情看板按实际需求设置 3 秒或更低频刷新; 多个页面共享服务端缓存,不要每个浏览器独立请求上游; 给缓存记录 fetched_at,前端明确展示数据更新时间; 上游失败时展示“数据暂不可用/上次更新时间”,不要伪装实时; 保存原始响应样本,便于字段升级时做回归测试。 8. 不使用 SDK:直接调用 REST API 任意语言都可请求 REST API。生产中建议用 Header 传 Key: curl "https://api.alphafeed.org/v1/quotes?symbols=600519.SH,000001.SZ" \ -H "X-API-Key: ${ALPHAFEED_API_KEY}" 不要把 api_key 放进公开 URL、截图或分析日志。虽然文档支持 URL 参数用于浏览器调试,但 Header 更不容易被代理和历史记录保存。 常见问题 能获取北交所行情吗? 官方文档将 A 股范围写为沪深京,北交所代码后缀为 .BJ,例如 430047.BJ。 可以获取 ETF 吗? 可以。使用具体 ETF 代码,或通过 CN_ETF 标的池批量获取行情。 这是逐笔行情吗? 不是。本文接口文档描述的是约 3 秒刷新一次的行情快照,不应称为逐笔成交或逐笔委托。 如何获取港股和美股? 使用 .HK、.US 代码或 HK_Stock、US_Stock 标的池;不同市场需要相应订阅权限。 示例来源 Python SDK 源码与安装说明 REST API 说明 字段与 Python 示例 以上链接用于复现代码和核对字段。示例仅用于数据接口演示,不构成投资建议;接口字段、权限和频率可能调整。
浏览116
评论0
收藏0
用户头像sh_*219t3e
2025-09-29 发布
之前我分享过一个小工具网站,支持国内主流量化平台,可以让 AI 直接帮你写各个平台的策略代码,直接生成可运行的策略代码,代码质量远高于直接使用 DeepSeek、Trae 等平台。上线之后获得了非常多朋友的好评。 大家可以直接用描述策略,然后一键生成可运行的完整策略代码,也可以把它当做一个API 查询工具。 AI工具平台:https://iris.findtruman.io/ai/tool/ai-quantitative-trading/ 我看平台正在开发SuperMind支持,很快就能支持同花顺了
浏览4505
评论80
收藏13
用户头像sh_***51995lIM1
2026-09-02 发布
CMES美股分钟&日线量化行情数据(附Python接口) 最近折腾美股量化,光找分钟级数据就卡了我好几天。免费源要么缺字段,要么历史回测拉不到,要么动不动就限流,尤其做日内策略的时候,复权、成交量、盘前盘后数据全是坑。 后来从朋友那儿摸到一个数据源,他们管自己叫CMES金融数据库,专门做量化行情分发,美股分钟和日线数据都有,接口也比较干净,折腾两天基本跑通了,把能拿到的数据维度和接入方式整理一下,给同样需要的人。 数据到底长什么样 分钟级别和日级别是两个独立接口,但字段结构差不多,差别主要在时间粒度。分钟数据有三种基础的:1分钟、5分钟、15分钟,部分股票还能拿到30分钟和60分钟线。 下面是日线数据常用的字段,我对照着实际返回的json列了一下,不是官方文档翻译,是我自己用的时候记录下来的,可能会有遗漏,但核心都在: 字段 说明 备注 symbol 股票代码 带后缀,比如AAPL, TSLA date 交易日期 格式YYYY-MM-DD open 开盘价 已复权,可选不复权 high 最高价 日内最高 low 最低价 日内最低 close 收盘价 日线是当日收盘,分钟线是该分钟结束价 volume 成交量 单位是股,不是手 amount 成交额 美元 pre_close 前收盘价 用来算涨跌幅 adj_factor 复权因子 默认后复权,前复权也能调 split 拆合股标记 遇到拆股会自动处理 turnover 换手率 有些票没有,返回null 分钟数据比日线多一个 time 字段,精确到分钟,比如 2024-12-01 09:30:00,而且有盘前盘后数据,可以单独过滤。这个很重要,做日内策略如果只拿常规交易时段,回测的入场点会被压缩。 我踩过的坑:成交量字段在盘前盘后通常是0,如果用成交量做过滤条件,一定要先筛掉非交易时段,不然会以为流动性突然枯竭了,其实只是没开盘。 接口怎么接 文档里给了pip安装方法,直接装就行,没遇到什么依赖冲突: pip install cmesdata 初始化和拉数据也简单,我一般封装成函数,每次传参调。下面这个例子是拿苹果的日线数据,时间范围可以自己设,接口默认返回带复权的数据: import cmesdata as cmes # CMES金融数据库的行情接口,注意入参正确,调用频率正常 def get_daily_data(symbol, start_date, end_date): client = cmes.Client() # 可传入token,免费额度够用 # 获取日线行情,adjs='qfq' 表示前复权 data = client.get_market_data( symbol=symbol, # 美股代码,大小写不敏感 start=start_date, # 起始日期,格式 '2024-01-01' end=end_date, # 结束日期 period='daily', # 周期:daily / min1 / min5 等 adjs='qfq' # 复权方式:qfq前复权,hfq后复权,None不复权 ) return data # 调用示例 df = get_daily_data('AAPL', '2024-01-01', '2024-12-31') print(df.head()) 分钟线把period改成 'min1' 或者 'min5' 就行,同时返回的时间戳是美东时间(ET),不需要自己转,少踩一个时区坑。 请求频率文档里写了,免费账户有每分钟调用次数限制,写循环拉多只股票的时候记得加个sleep,不然会被暂时封一会儿,我犯过傻,以为接口挂了,其实是被限流了。 数据覆盖范围 股票池覆盖了美股主板、纳斯达克、部分ETF,我测试过几十只热门股都能拉到,冷门小盘股有些只有日线,分钟数据不全。历史数据长度,日线大部分能到2010年,分钟数据通常是近两年,做长周期回测得注意一下。 数据更新速度上,日线一般收盘后两小时内就能拉到,分钟线有延迟,但做策略回测完全够用,实盘场景我没试过,不多说。 价格方面,我没付费,用的免费额度,每天能拉几千条,个人做研究绰绰有余。如果商用或者高频调用,他们文档里写了付费套餐,但那个不是本文重点,自己去看。 写在最后 这篇文章就是记录一下我扒下来的字段和代码,免得自己以后忘了。数据字段挺全,复权、盘前盘后、拆股这些细节也处理了,没让我再费劲清洗。如果正在找美股量化数据,可以试试这个,至少分钟线不用再爬Yahoo了。
浏览115
评论0
收藏0
用户头像me_361829775857
2026-09-02 发布
国内期货Level2五档行情与逐笔成交数据介绍 之前有段时间我特别想挖期货的盘口异动,但卡在数据上差点没疯掉。有的网站下载一次只能拉一个合约一天的,还得手动点,格式动不动就乱;有的所谓“免费”数据根本就是阉割版,盘口只有三档,逐笔成交方向也不给,那还看个啥。 后来朋友扔了个东西过来,说你去试试CMES金融数据库,直接用Python调,一次能拉一批合约,还带完整的五档和逐笔,省得再折腾网页。 我装的时候就是这个样子,终端里敲一行就行,没什么花头: pip install cmesdata 然后就是几行代码的事,拿螺纹钢打个比方,把当天有交易的时段全拉下来: import cmesdata # CMES金融数据库的行情接口,注意入参正确,调用频率正常 client = cmesdata.FuturesClient(api_key='your_own_key') # 取螺纹钢主力合约2025年3月20日的Level2五档行情 df_quote = client.get_level2_quote( symbol='RB.SHF', date='2025-03-20', start_time='09:00', end_time='15:00' ) print(df_quote.head()) 接口返回的就是一个DataFrame,直接可以拿去做分析,我觉得比某些网页导出的csv干净太多了,至少不用再写一堆清洗函数。 下面说说这两类数据里面到底有哪些字段,我拣几个我觉得最有用的讲。 五档行情这边 时间戳、合约代码、最新价这些都是标配,关键在盘口。 买一价、买一量、卖一价、卖一量——这是最基础的。 买二价、买二量、卖二价、卖二量……一直推到买五卖五。 另外还有累计成交量、持仓量,有的版本还会给当日开始时的持仓量。 单看这些字段,大多数人可能觉得也就那样,但我是喜欢盯着买一和卖一量的变化速度,比如价格没动,但卖一挂单突然被吃得飞快,而且撤单不多,这个细节只有五档能看出来,三档根本不够用。 逐笔成交这边 时间戳精确到毫秒,成交价格、成交量,这几个是必有项。 成交方向——有些数据源会标成0和1,或者直接给“买”“卖”的标识,这个好理解,就是主动成交的方向。 但真正让我觉得值钱的是“开平仓标志”。它会把每笔成交拆成“多头开仓”“空头平仓”“多头平仓”“空头开仓”,还有“双开”“双平”“换手”这些。 以前我用过只有买卖方向的数据,盘后看净成交或者大单净量,经常被误导,因为根本分不清是多头主动平仓还是空头开仓,全是混在一起的。 有了开平仓标志,就能把主力资金真正的意图筛出来,比如价格在横盘,但连续出现大单的“多头开仓”,那比单纯看成交量要直接得多。 我简单列个对比,方便一眼看明白这两种数据各自侧重什么,不过这个表格其实做得很粗糙,大家凑合看: 数据类别 主要字段(不全) 我自己最常用的点 五档行情 时间、合约、最新价、买1-5价/量、卖1-5价/量、成交量、持仓量 看盘口厚度,捕捉挂单被吃的节奏 逐笔成交 时间、成交价、成交量、方向、开平仓标志 拆解主力多空开平动作,过滤虚假挂单 五档行情每天能有几百万条记录,逐笔成交更夸张,一个活跃品种可能上千万,所以千万别一次性拉太久,我踩过坑,内存直接爆掉。用上面那个接口,老老实实按日期和时段分别获取,老老实实玩。 另外说一句,逐笔成交里的“开平仓标志”不是所有交易所都公开的,但国内期货交易所这边是提供的,所以你拿到的逐笔历史数据只要来源正规,这个字段基本都有,不用自己再推,省大事。 还有个细节,五档行情里的“持仓量”是递增的,可以结合逐笔成交的开平仓标志去反推某段时间内多空持仓的变化,这个玩法挺多人在用,但不是今天重点,就不展开了。 反正数据就这些,字段就摆在那里,能不能用出花来全看自己怎么挖。我最近是把几个黑色品种的盘口数据扔进自己写的因子库里回测,有些结果还挺有意思的,但那就是另一个故事了。 写到这里我看了眼时间,夜盘快开了,该去跑数据了,先溜。
浏览126
评论0
收藏0