全部
文章&策略
学习干货
问答
官方
用户头像sh_****447dvu
2026-07-06 发布
引言 在跨境美股量化建模、实盘回测过程中,订单簿深度数据的一致性直接决定 VWAP、盘口流动性模型、买卖压力因子的有效性。实际行情对接与回测复盘时发现两类高频数据缺陷:一是接口对空档位的差异化处理造成样本计算偏移,二是传统 WebSocket 订阅模式切换标的时产生数据断层,破坏时序样本连续性。 本文基于标准化行情交互规范,给出单连接动态订阅工程方案,包含数据问题溯源、参数配置标准、线上故障处置逻辑、可复用 Python 实现代码,适用于策略回测、高频实盘行情采集两类场景,所有逻辑均可通过历史 Tick 报文复现验证。 一、订单簿空档位引发的量化模型偏差根源 美股 Level2 深度快照主流存在两种空档位处理实现,二者均会污染量化因子计算样本: 动态裁剪数组:挂单完全消化后直接删除对应档位,买卖盘数组长度动态变化,档位索引与价格层级一一对应的映射关系失效。分层流动性、价差分层因子、多档加权均价模型全部出现系统性偏移,回测集与实盘数据分布不一致。 保留数组结构、size/price 置 0:未增加过滤逻辑时,0 值参与加权运算,盘前、盘尾低流动性时段大量空档位会人为压低盘口均值,套利类策略在回测中会生成大量虚假开仓信号,造成过拟合假象。 本人在盘前流动性套利策略回测复盘时观测到典型案例:标的连续 6 档买盘被瞬时清空,未做空档位过滤的数据集测算出市场承接充足,回测收益虚高;实盘同等行情下策略频繁触发开仓产生持续浮亏,样本失真为核心诱因。 配套衍生问题:多连接订阅模式切换监控标的时,需断开并重建 WebSocket 链路,带来三类时序缺陷: 链路重建握手窗口期无 Tick、深度快照输入,时序样本出现空白段,时序模型特征断裂; 批量切换多品类标的时并发握手请求触发接口限流,行情推送中断,回测与实盘数据样本量不匹配; 多长连接常驻进程持续占用内存,高波动 Tick 涌入时回调队列堆积,数据采样延迟扩大,高频模型采样时序错位。 二、单连接动态订阅标准化定义 单连接动态订阅指维持一条持续活跃 WebSocket 长连接,通过专属指令携带 add/del 动作与标的编码列表,实时调整订阅标的范围,全程不销毁、重建 TCP 链路。 区别于 REST 轮询、断连重订阅模式,底层心跳通道、网络会话保持不变,仅更新本地标的管理集合,消除链路重建带来的数据空白窗口,保证回测、实盘行情采样时序连续统一。 三、动态订阅标准化配置与空档位过滤规范 多场景参数配置复核表 应用场景 量化研究痛点 接口交互参数(cmd_id/action/code) 校验基准 程序初始化批量加载美股标的 启动时多指令批量订阅,报文冗余,首次采样时序混乱 cmd_id=22004,action="add",code=["NASDAQ:AAPL","NASDAQ:TSLA"] 官方开源 Demo 初始化订阅报文标准 盘中临时新增异动跟踪标的 重建连接丢失短期 Tick,回测与实盘特征不一致 cmd_id=22004,action="add",code=["NASDAQ:META"] 单链路复用,本地集合自动去重,无重复采样 剔除低流动性冷门标的 无效 Tick 持续占用带宽,增大数据存储与计算开销 cmd_id=22004,action="del",code=["NASDAQ:META"] 本地订阅集合同步移除,无残留幽灵订阅数据 边界场景:重复订阅 / 空标的列表 重复报文浪费接口配额,空数组引发解析异常 cmd_id=22004,action="add"/"del",code=[]/ 重复 code 客户端前置去重,空列表直接丢弃不发送 空档位标准化数据处理逻辑 规范深度快照采用固定长度数组存储买卖档位,挂单清空仅将对应层级 size 赋值为 0,price 保留有效价格数值,不返回 null、空字符串。 量化数据采集层仅增加一层过滤规则:仅将 size>0 的档位纳入因子计算、样本存储,彻底隔离 0 值对 VWAP、流动性评分、多档价差模型的干扰,回测数据集与实盘采样规则完全对齐。 底层通信执行规则 资产品类隔离 WSS 链路,美股专属通信地址:wss://quote.alltick.co/quote-stock-b-ws-api?token=YOUR_TOKEN; 统一使用 cmd_id=22004 作为订阅变更指令,action 字段区分新增 add、取消 del; 采用集合结构本地维护已订阅标的编码,指令发送前自动去重,避免重复数据采样; 配置 10 秒周期心跳 ping 机制,实时识别 Socket 半断开状态,提前规避无感知数据断流。 四、量化采集高频故障检测与兜底方案 故障 1:海量 Tick 涌入,消息回调阻塞主线程,采样时序偏移 现象:行情剧烈波动时每秒数千条 Tick 推送,主线程回调阻塞,采样时间戳滞后扩大 检测手段:日志输出消息队列长度,单秒 Tick 接收量超 5000 条判定过载 兜底逻辑:数据过滤、状态标记保留在回调函数,VWAP、流动性等耗时因子计算移交异步线程池;回调内优先过滤 size=0 空档位,减少无效样本运算。 故障 2:网络半断开产生 Socket 假活,持续接收残缺深度快照 现象:弱网环境链路半断开,心跳超时前不触发 on_close 回调,采集到不完整订单簿样本 检测手段:连续 3 次心跳无 pong 响应,判定链路失效 兜底逻辑:客户端自建心跳计数器,超时主动断连重建;重连后读取本地订阅集合批量恢复标的,保证行情采样无缺失。 故障 3:短时间连续增减订阅,线程竞态生成幽灵订阅样本 现象:已执行 del 取消的标的持续推送 Tick,数据集混入不需要的品种样本 检测手段:比对实时 Tick 编码与本地订阅集合,识别残留订阅数据 兜底逻辑:订阅指令发送增加线程锁,add/del 操作完成报文发送后,再同步更新本地标的集合,维持状态一致性。 故障 4:标的编码命名空间缺失,订阅静默失效无异常日志 现象:遗漏 NASDAQ 交易所前缀,接口无报错,对应标的完全无采样数据,回测数据集缺失样本 检测手段:对照官方美股标的编码清单,校验 code 命名空间前缀 兜底逻辑:本地建立编码校验字典,发送订阅指令前拦截格式非法标的,输出标准化异常日志便于回测样本溯源。 五、机制适用边界说明 支持场景:单条活跃 WebSocket 链路下,通过 cmd_id=22004 自由增删美股、外汇、加密货币标的,统一完成多品类行情采样; 不支持场景:多条 WebSocket 连接之间同步订阅状态、该指令调取历史 Tick 回溯数据、非 cmd_id=22004 私有指令修改订阅列表。 六、完整 Python 行情采集代码(动态订阅 + 空档位过滤) import websocket import json import threading # 美股专属行情WSS链路,规范参考接口官方文档 WS_STOCK_URL = "wss://quote.alltick.co/quote-stock-b-ws-api?token=YOUR_TOKEN" # 本地订阅标的集合,用于去重、断线恢复采样列表 subscriptions = set() def send_subscribe_cmd(ws, action, code_list): """统一封装订阅变更报文,固定指令ID 22004""" if not code_list: return unique_codes = list(set(code_list)) req_payload = { "cmd_id": 22004, "action": action, "code": unique_codes } ws.send(json.dumps(req_payload)) # 同步更新本地订阅集合 if action == "add": for code in unique_codes: subscriptions.add(code) elif action == "del": for code in unique_codes: if code in subscriptions: subscriptions.remove(code) def on_open(ws): # 初始化批量订阅标的,适配回测基准样本采集 init_tickers = ["NASDAQ:AAPL", "NASDAQ:TSLA"] send_subscribe_cmd(ws, "add", init_tickers) print("WebSocket链路建立,完成初始标的订阅") def on_message(ws, message): """行情消息回调,完成空档位过滤,输出有效盘口样本""" if not message: return data = json.loads(message) bids = data.get("bids", []) asks = data.get("asks", []) valid_bids = [] valid_asks = [] # 过滤空档位,仅保留size>0有效挂单样本 for level in bids: price = level.get("price", 0) size = level.get("size", 0) if size > 0 and price > 0: valid_bids.append({"price": price, "size": size}) for level in asks: price = level.get("price", 0) size = level.get("size", 0) if size > 0 and price > 0: valid_asks.append({"price": price, "size": size}) # 此处接入因子计算、样本持久化逻辑 print("有效买盘前3档样本:", valid_bids[:3]) def on_error(ws, error): print("WebSocket链路异常记录:", error) def on_close(ws, close_code, close_msg): print("连接断开,待恢复采样标的列表:", subscriptions) if __name__ == "__main__": ws_client = websocket.WebSocketApp( WS_STOCK_URL, on_open=on_open, on_message=on_message, on_error=on_error, on_close=on_close ) # 10秒心跳保活,提前识别半断开链路 ws_client.run_forever(ping_interval=10) 七、方案对量化研究与实盘采样的实际增益 因子与回测数据一致性提升:定长订单簿数组搭配 size 字段过滤,彻底消除索引偏移、0 值污染问题,盘口流动性、VWAP、分层价差等核心因子在回测集、实盘采样集分布统一,减少模型过拟合风险; 多标的并行采集效率优化:单链路动态增减订阅,无需反复重建 TCP 会话,无行情采样空白窗口,批量切换跟踪标的时时序样本完整,适配多因子并行回测需求; 采集进程资源开销可控:单长连接承载多品种行情接收,降低内存占用;心跳机制提前捕获网络异常,断线后自动恢复全部订阅标的,减少人工干预与样本缺失; 数据异常可完整溯源:整套行情交互基于标准化 API 规范,订阅报文、深度快照格式文档可查,因子计算异常时可对照原始 Tick 报文逐帧定位数据缺陷,便于模型误差复盘。
浏览4
评论0
收藏0
用户头像sh_***174w0d
2026-07-06 发布
引言:为什么你学得越多,亏得越多? 在二级市场折腾这么久,你累吗? 每天盯盘到眼红,各种战法、指标学了一大堆,大大小小的消息面一个不落,可回头一看账户,还是在缩水。这种“勤奋的亏损”最让人心碎。 我今天一句废话不说,只为你好。其实很多时候,你之所以亏,不是因为懂太少,而是因为想太多。市场本身是复杂的,但赚钱的逻辑往往极简。如果你现在的交易结果是一团糟,听我一句劝:暂时忘掉你学过的一切,回归最纯粹的均线逻辑。 核心痛点:忘掉那些“压箱底”的复杂战法 投资中最大的智慧是“空杯”。如果你的账户还在亏损,说明你现有的那套逻辑根本行不通。那么,请拿出断舍离的勇气: “什么数值都别看,什么消息也别听,不管你是老股民还是刚入市的小白,把那些博主教给你的压箱底的战法统统都忘掉,包括我说的。只要你的账户目前还是亏的,还没有稳定的盈利,你就不妨试这个方法。” 当你不再迷信那些玄学的消息和复杂的指标,盈利的曙光才可能出现。 要点一:学会“空手”,在均线纠缠时拒绝诱惑 交易里最难的不是“买”,而是“等”。 当几根均线像乱麻一样绞在一起,也就是均线纠缠​的时候,那是多空双方在搏杀,方向根本不明朗。这个时候,你最该做的一件事就是:别手痒操作! 散户最容易死在混沌期的无效波动里。高手都在等,等那个确定性的信号。记住,均线纠缠时“不做”,就是最高级的“做”。 要点二:抓住“主升浪”,识别均线发散的瞬间 什么时候才是真正该出手的时候?答案就在均线从混乱走向秩序的一瞬间。 当均线不再互相纠缠,开始均线理顺,且刚刚开始头向上的时候,这便是最暴力的进场点。你要找的不是已经涨上天的位置,而是那个向上发散的初级阶段。这个“头”只要齐刷刷地一翘起来,就是你翻身“上车”的绝佳机会。 要点三:知进退,当均线再次纠缠即是离场信号 会买的是徒弟,会卖的是师傅。 很多人抓到了牛股,最后却因为贪婪把利润吐个精光。极简法则给出的撤退指令极其冷酷:一旦均线又开始纠缠,你就下车。 不要去猜它还会不会涨,均线重新纠缠意味着上升趋势已经终结,行情进入了分歧区。锁定利润,落袋为安,这才是成年人在市场里该有的纪律性。 要点四:趋势为王,冷酷对待低头向下的均线 面对下跌趋势,千万别心慈手软,更别妄想去接飞刀。 如果均线头朝下开始发散,这说明空头力量在宣泄。在这个阶段,你要表现得足够冷酷:一路做空。不要问底在哪里,只要均线没再次纠缠在一起,你的空头头寸就不要动。顺应趋势,是弱势市场里唯一的生存之道。 总结思考:关于“吃肉”与“吃面”的概率哲学 投资不是追求100%的胜率,而是在追求一个长期的正向概率。 “这个方法不一定百分之百的准确,但长期下来你也许偶尔会吃面,但是吃肉的时候肯定比吃面多了多,账户收益也肯定是正常的。” 大道至简。均线的纠缠与发散,本质上是市场能量的蓄势与爆发。在投资这场长跑中,你是在追求一次性的暴利,还是在追求一个能让你持续稳健“吃肉”的简单逻辑? 想要复盘均线趋势交易的实盘效果、参考成熟标准化交易思路,可查阅9db交割单复盘。
浏览7
评论0
收藏0
用户头像9点半量化
2026-07-06 发布
引言:为什么你学得越多,亏得越多? 在二级市场中,很多投资者都陷入了一个怪圈:每天挑灯夜战,研究各种复杂的量价指标,手机里塞满了各类财经新闻,关注了无数博主的“压箱底战法”。然而,这种近乎执着的努力,往往并没有换来账户净值的增长。 不管你是老股民还是刚入市的小白,如果你的账户目前还是亏损的,或者尚未实现稳定盈利,我建议你停下来想一想:是不是你的系统太乱了?这种“越努力越亏损”的挫败感,本质上源于信息过载导致的决策混乱。与其不断增加新的变量,不如做一次彻底的减法:忘掉那些没用的战法,回归交易最纯粹的本质。 第一条:最高级的策略是“选择性屏蔽” 真正的交易高手,往往拥有极强的“信息免疫力”。今天我一句废话不说,只希望你能把我接下来的话记在心里。 如果你想在这个市场活下去,什么数值都别看,什么消息也别听。把过去那些博主教给你的所谓“压箱底战法”通通忘掉——没错,包括我之前说的。当一个人的头脑不够清净时,每一条新闻、每一个所谓的内幕,都会成为干扰执行力的噪音。 为什么要执着于均线?因为均线是市场行为最真实的流露,它反映的是价格运行的平均成本。相比于真假难辨的消息面,均线才是真正值得信任的语言。只有彻底屏蔽外界的干扰,你才能看清市场的真相。 第二条:识别“纠缠”与“理顺”:进场与退出的终极信号 在极简交易学中,我们只观察均线的状态转换。通过识别“纠缠”与“理顺”,你就能精准把握市场的呼吸。 **●**均线纠缠:观望期 当多根均线交织在一起,呈现横向震荡、方向不明的状态时,这就是典型的纠缠期。此时市场没有形成合力,盲目进场只会被反复“打脸”。 **●**理顺与向上发散:上车机会 当均线结束纠缠,开始变得“顺滑”,并且均线的“头”刚开始全部朝上发散时,这就是趋势理顺的标志。这代表着多头力量已经形成共振,是捕捉主升浪的最佳上车时刻。 **●**再次纠缠:下车时刻 趋势不会永远笔直向上。当原本发散的均线再次收拢、重新纠缠在一起时,意味着上涨动力已经衰竭,市场重新进入无序状态。这时候,你唯一的任务就是果断卖出,带着利润离场,不要有任何留恋。 第三条:不仅能抓主升,更能反手做空 这套逻辑的强大之处在于它的通用性。它不仅能帮你吃到主升浪,在下行市场中同样是一把避险和盈利的利刃。 当均线的“头”朝下开始发散时,说明市场已经进入了明确的空头趋势。在这种情况下,我们应当顺势而为,一路做空。直到均线再次纠缠在一起,空头力量相互消耗殆尽,我们才停止空头操作。这种“不纠缠就进场,纠缠就离场”的标准化流程,让你无论面对牛市还是熊市,都能有一套清晰的行动准则。 第四条:概率思维——多吃肉,少吃面 我必须诚实地告诉你,这套方法不一定百分之百准确。在金融市场中,没有任何一种指标是绝对的“神药”。 然而,交易拼的不是单次操作的对错,而是长期的系统性优势。这套均线策略的核心在于“截断亏损,让利润奔跑”。在实际操作中,你也许偶尔会遭遇小额亏损(吃面),但因为你捕捉的是均线理顺后的趋势行情,所以你盈利的幅度(吃肉)将远超亏损。 “吃肉的时候肯定比吃面多了多,账户收益也肯定是正常的。” 这种概率上的正向预期,才是普通投资者走向稳定盈利的唯一途径。 结语:实践是检验真理的唯一标准 交易的本质并不复杂,复杂的往往是人心。如果你已经厌倦了在各种复杂指标的迷宫里打转,不妨把那些繁琐的战法通通舍弃,只信任那一两根简单的均线。 在充满不确定性的市场中,你是否敢于做减法?建议你现在就打开盘面,回到历史走势中去上手验证这个逻辑。当你真正靠简单的均线“吃到肉”时,你就会明白:大道至简。
浏览9
评论0
收藏0
用户头像sh_**729dg0
2026-07-06 发布
8000多只美股与ETF的高频逐笔和订单薄行情数据下载流程 昨晚跑因子又把内存干爆了,看了眼存储,全是Level 2的订单簿和逐笔成交数据。这东西信息量大,但也确实占地方。正好最近在整理数据源,就把手头一份比较全的数据清单理一下,主要是美股和ETF的高频数据,有需要的朋友可以看看。 这份清单来自一个叫CMES金融数据库的数据商,里面的结构还算清晰。我不是做广告啊,就是单纯分享下我接触到的数据内容。毕竟找数据、清洗数据这事儿太费时间了,有时候花钱买现成的清洗好的数据,反而能省下不少折腾的功夫。 下面我就把数据的具体内容列出来,大家各取所需。 数据覆盖范围概览 先说说数据都包括啥,免得后面看迷糊了。主要分两大类: 股票数据 覆盖了大约8000多只美股。 高频数据为主,也就是订单簿和逐笔成交(Tick Data)。 2. ETF数据 覆盖了大约4000多只ETF。 同样提供高频的订单簿和逐笔成交。 3. 聚合行情数据 除了Tick级数据,也提供了聚合好的分钟级和日级行情数据。 这个对回测比较友好,数据量小很多。 高频数据:订单簿与逐笔成交 这部分是数据量最大、也最“重”的。做高频策略、微观结构研究,或者想自己合成更细粒度K线的朋友会用到。 订单簿数据 订单簿数据,简单说就是市场上挂了哪些买单和卖单。这份数据提供了买卖多档的盘口信息。具体字段我画了个简表,看起来直观些: 字段大类 具体字段示例 简单说明 标识与时间 证券代码、日期、时间戳(精确到毫秒) 定位到是哪只股票、哪个瞬间的数据 买卖报价 买一价到买N价、卖一价到卖N价 不同档位的委托价格 买卖数量 买一量到买N量、卖一量到卖N量 对应档位的委托订单数量 快照类型 快照类型标识 区分是常规快照还是特定事件触发的快照 数据是快照形式的,不是持续的推送流。对于美股来说,深度通常是到买卖一档,但具体档位要看数据源的实际记录。 逐笔成交数据 这个就是每一笔实际成交的记录,能看到市场最细微的动作。字段大致包括: 证券代码、日期 成交时间(毫秒精度) 成交价格 成交数量(体积) 成交方向(买方驱动/卖方驱动) 交易标志(如是否是盘前盘后交易等) 把订单簿快照和逐笔成交结合起来,能大概还原出市场的订单流变化。不过说实话,处理这个级别的数据对硬件和代码能力有点要求,新手建议先从分钟数据玩起。 聚合行情数据:分钟线与日线 如果暂时用不到那么细的数据,或者只是想做日间/中低频策略回测,那直接用聚合好的行情数据会方便很多。硬盘和内存都感激你。 分钟级行情数据 就是大家熟悉的OHLC(开高低收)+成交量,不过是每分钟一根。字段很标准: 时间(精确到分钟) 开盘价、最高价、最低价、收盘价 成交量、成交额 (有些数据源可能还会包含VWAP等指标) 日级行情数据 日线数据,除了基本的OHLCV,通常还包含一些调整信息,对于长期回测至关重要。 日期 开盘价、最高价、最低价、收盘价 成交量、成交额 调整因子、后复权价格 这里有个小坑:自己做数据清洗时,处理分红、拆股这些公司行动(Corporate Actions)特别麻烦,算复权价很容易出错。我之前自己处理过,差点搞错。后来用CMES金融数据库里的清洗版数据,主要是图它已经做了复权处理,省心。虽然要花点积分,但确实避免了因子回测因为价格问题产生偏差。 数据获取与接口示例 数据可以通过他们的网站下载,也提供了API接口,用Python调取比较方便。这里给个最简单的接口调用代码示例,具体参数还得去看他们的文档。 示例:调用CMES金融数据库的行情接口 注意:需要先pip安装他们的SDK,具体看官方文档 注意入参正确,调用频率要遵守API限制,别把账号搞封了 import cmesdata # 假设的SDK名称,请以实际为准 1. 初始化客户端 (通常需要API Key和Secret) client = cmes_data_sdk.Client(api_key='your_api_key', api_secret='your_api_secret') 2. 请求分钟线数据示例 try: 这里参数是示例,实际需要查文档 minute_data = client.get_minute_bar( symbol='AAPL', date='2023-10-27', fields=['open', 'high', 'low', 'close', 'volume'] ) print(minute_data.head()) except Exception as e: print(f"获取数据失败: {e}") 3. 请求高频订单簿快照示例 (数据量巨大,慎用) snapshot_data = client.get_orderbook_snapshot( symbol='TSLA', date='2023-10-27', start_time='09:30:00', end_time='10:00:00' ) 代码就是个样子,重点是要去看他们官网的接口文档,搞清楚每个参数怎么填,尤其是时间格式、代码格式这些细节。调用频率也有限制,别一次性请求太长时间范围的高频数据,服务器和你自己的网络都可能顶不住。 一些使用上的感受 最后随便聊聊使用感受吧。数据整体质量还行,该有的字段都有,时间戳也比较干净。对于做量化研究、写论文、或者自己构建一些需要高频信息的指标来说,是够用的。 最大的优点就是“全”,美股和ETF基本都覆盖了,不用东拼西凑。缺点嘛,就是高频数据体积太大,管理起来是个技术活,建议用数据库或者高效的二进制格式存储,别直接用CSV。 新手朋友,真心建议从日线或分钟线开始。直接扎进Tick数据里,很容易在数据清洗和存储环节就劝退了。先拿低频数据把策略逻辑跑通,再考虑上高频细化,会顺很多。 好了,就写这么多。数据的具体字段和更新频率,以他们官网最新的文档为准,我写的可能也有遗漏。这份清单应该能帮你快速了解这里面都有些什么“货”
浏览15
评论0
收藏1
用户头像sh_*219t3e
2025-09-26 发布
大家好,我想和大家分享一个我最近开发的项目——一款面向量化交易的 AI 智能助手工具网站。它可以帮助大家快速生成高质量、可直接复制运行的量化策略代码,无论你是量化小白还是策略开发者,都能从中受益。 核心亮点: 1.多平台支持:目前已支持 PTrade、QMT、miniQMT、聚宽等,并计划不断扩展更多平台。 2.策略生成高效:用户只需选择平台并输入策略想法,AI 即可生成可运行的量化策略代码。 3.快速入门与优化: • 对量化小白:轻松生成可直接运行的策略,快速上手交易。 • 对策略开发者:帮助完善、优化已有策略,节省开发时间。 • 对文档需求者:可作为量化平台的 API 文档问答机器人,方便查询和使用。 4.业内首创:这是首个面向多平台的量化交易 AI 助手,解决了现有 Deepseek 或 Trae 等 AI 工具因缺乏平台知识库而生成代码无法运行的问题。 使用方式:登录 → 选择你使用的平台 → 输入策略想法 → 生成可运行的策略代码。 我希望这个工具能帮助大家更高效地进行策略开发和量化交易,也欢迎大家在帖子里分享使用体验和建议。 网站链接:https://iris.findtruman.io/ai/tool/ai-quantitative-trading/ 如果大家有任何问题或功能需求,也可以在帖子里留言,我会持续优化和更新,让它成为量化交易领域最实用的 AI 助手!
浏览5116
评论82
收藏3
用户头像sh_***792090
2026-07-06 发布
现在的模拟盘日志信息不支持导出,不太方便进行信息查看,建议可以增加这个功能。
浏览13
评论1
收藏0
用户头像me_361829775857
2026-07-06 发布
聊聊港股高频数据里到底有什么 昨晚跑回测又把内存给撑爆了,一看原来是处理港股Level2的tick数据时没注意。这东西数据量是真的大,但里面的信息也确实多。今天就来盘一盘,这些高频数据到底包含了哪些内容,给想研究的朋友避避坑。 先说说最“重”的:逐笔成交历史数据 这个就是市场里每一笔交易最原始的记录,文件特别大。一个CSV文件打开,里面密密麻麻全是记录,每发生一笔交易就记一行。 主要字段大概有这些: timestamp: 时间戳,精确到毫秒,这是分析时序依赖性的关键。 symbol: 股票代码,这个不用说。 price: 这笔交易成交的价格。 volume: 成交的手数。 turnover: 成交金额。 trade_type: 交易类型,比如是主动买还是主动卖,或者是跨市场成交之类的。区分这个对理解资金流向很重要。 bid_order_id / ask_order_id: 买卖双方的订单ID,高级玩家可以用这个去关联订单簿,重建市场状态。 然后是相对“轻量”但常用的:分钟线与日级别行情 如果你不想被tick数据淹没,只是想看看价格走势和常规指标,分钟线和日线数据就友好多了。它是把一段时间内的交易进行聚合。 日线数据字段,大家应该很熟了: date: 交易日。 open, high, low, close: 开盘、最高、最低、收盘价。 volume: 总成交量。 turnover: 总成交额。 分钟级数据就是把日线数据的时间粒度从“天”换成了“分钟”,比如2023-01-01 10:30:00这样的时间点,然后记录这一分钟内的OHLC和成交汇总。做短周期策略回测,用这个数据效率高很多。 重头戏来了:十档订单簿历史数据 (Level2) 这个才是深度行情数据的核心。我们平时在软件上看到的买一卖一,只是冰山最上面的一角,而Level2数据能看到买一到买十、卖一到卖十的全部挂单情况。 字段结构通常是这样的(以买盘为例,卖盘同理): bid_price_1, bid_volume_1: 买一价和买一量。 bid_price_2, bid_volume_2: 买二价和买二量。 … bid_price_10, bid_volume_10: 买十价和买十量。 同时还会包含对应时间点的最新成交价、成交量和时间戳。有了这个,你就能大致知道在某个时刻,市场在各个价位上的供需力量对比。但这里有个坑,挂单不一定是真实的意图,有些大单会故意拆成小单分布在各个价位上,制造假象。我之前为了验证一个订单薄失衡的因子,专门调取了CMES金融数据库里几只活跃港股过去一年的Level2数据进行回测,发现清洗掉这些“噪音”挂单后,信号质量确实有提升。 数据怎么用?一个简单的接口调用例子 如果你通过API获取,代码大概长这样。注意接口调用频率别太高,不然容易被限制。 示例:使用CMES金融数据库的行情接口获取数据 注意入参正确,调用频率要遵守平台规定,别猛刷 import pandas as pd 假设有相关的数据获取库,这里用伪代码示意逻辑 from cmes_api import MarketDataClient 初始化客户端(需要有效的token或密钥) client = MarketDataClient(api_token='your_token_here') 获取某股票某日的分钟线数据示例 参数:股票代码,开始时间,结束时间,数据粒度(如'1min') minute_data = client.get_bars(symbol='00700.HK', start='2023-12-01 09:30:00', end='2023-12-01 16:00:00', interval='1min') 获取十档行情快照示例 snapshot_data = client.get_depth(symbol='00700.HK', timestamp='2023-12-01 10:00:00') print("数据获取后,通常是DataFrame格式,方便用pandas做分析") 假设df是获取到的数据 print(df.head()) 最后几点实在的提醒 数据量警告:tick和Level2数据非常占空间,没做好存储和清理方案前,别轻易下全量数据。 处理复杂度:原始数据往往需要清洗(比如处理异常值、停牌期)、对齐(把成交和订单簿数据按时间戳对齐),这一步很耗时。有时候为了省时间,直接用已经预处理好的数据源可能更划算,虽然要花点积分,但能让你更专注于策略本身。 平台合规:不管在哪个平台分享(小红书、知乎、公众号这些),提到具体数据获取来源和接口时,语气中性一点,就事论事介绍功能就好,避免夸张的推荐用语。数据本身的内容和字段是事实,可以客观描述,但不要涉及具体的数据价格、促销信息或者与其他平台的直接对比,这样容易触发审核。 新手建议:刚入门的话,真的不建议一上来就怼着tick数据搞。先从日线、分钟线数据熟悉起来,等有感觉了,再慢慢用Level2数据去挖掘更深层的市场微观信息。 大概就是这些内容。数据本身是金矿,但挖矿的过程挺折腾人的,尤其是硬件和耐心。有同样在研究这块的朋友,欢迎交流心得,特别是数据压缩和高效回测框架方面的。
浏览12
评论0
收藏0
用户头像me_361829775857
2026-07-05 发布
沪深股票Level2行情数据详解 昨晚跑因子又把内存给爆了,查了下是数据源的问题,处理Tick数据真是个体力活。今天就来聊聊我平时用的这个数据源,看看里面到底包含了哪些内容,也顺便给想研究高频数据的朋友们提个醒。 这个数据源主要提供的是沪深交易所的Level2行情数据,也就是我们常说的深度行情。和普通的Level1数据相比,它最大的特点就是“细”,细到每一笔委托、每一笔成交都有独立的记录,时间戳能到毫秒级。对于做量价分析、订单流研究或者高频策略的人来说,这几乎是必备的“原料”。 数据主要分成了几大块,我觉得最核心、也最常用的是下面这几类。 委托数据(Order) 这个文件记录的是市场上所有股票的所有限价委托单。简单说,就是每个投资者挂在交易所里,还没成交的买单和卖单。每一行数据代表一个委托单事件,比如一个新委托单挂出来,或者一个旧的委托单被撤销、被成交了一部分。它的字段非常细致,举个例子: 字段名 含义说明 symbol 股票代码,比如000001.SZ time 时间戳,精确到毫秒,格式是HH:MM:SS.fff price 委托价格 volume 委托数量(股数) bid_or_ask 买卖方向,B是买,A是卖 function_code 委托单状态码,这个很关键,告诉你这个记录是新增委托、撤单还是部分成交 通过这个数据,你能还原出整个市场委托单簿(Order Book)的演变过程,知道在某个毫秒,买一和卖一上分别挂了多少钱、多少量。这对于理解市场微观结构,比如价格是怎么形成的,支撑和阻力位在哪里,非常有帮助。我刚开始用的时候,被它的数据量吓了一跳,一天一个股票就能产生几十万甚至上百万条记录,处理起来对电脑配置是个考验。 成交数据(Trade) 这个就比较好理解了,记录的是所有实际成交的记录。每一笔撮合成交,都会在这里生成一条数据。 它和委托数据是联动的。一个委托单可能被拆分成很多笔小成交,所以成交数据量也很大。主要字段包括: 字段名 含义说明 symbol 股票代码 time 成交时间,毫秒级 price 成交价格 volume 成交数量 turnover 成交金额 bid_order_id / ask_order_id 买方/卖方对应的委托单ID,可以和委托数据关联起来 成交数据是分析资金流向、计算高频VWAP(成交量加权平均价)的基础。看大单是主动买入还是主动卖出,光看价格涨跌不行,得结合这个数据。 订单簿快照数据(Snapshot) 这个数据我后来才用得多,因为它对新手更友好一些。它不像委托和成交数据那样记录每一个“事件”,而是定时(比如每3秒或每5秒)对全市场的订单簿进行一次“拍照”,记录下那一刻的状态。 它的核心字段就是**买卖五档(甚至十档)**的报价和挂单量。 # 示例:获取某只股票的订单簿快照数据 # 假设使用CMES金融数据库的行情接口 # 注意入参正确,调用频率正常,避免被限制 import cmes_data as cmes # 初始化客户端,需要你的API Key client = cmes.DataClient(api_key='your_api_key_here') # 请求某日某股票的5档行情快照 snapshot_data = client.get_snapshot(symbol='000001.SZ', date='2023-10-27', level=5) print(snapshot_data.head()) 有了这个快照,你就能直接知道在某个时间点,市场的深度是什么样的。计算买卖压力、盘口价差这些指标,用这个数据会方便很多,不用自己从零开始去拼接委托事件流了。当然,它的频率是固定的,会丢失一些中间毫秒级的细节变化,各有取舍吧。 除了上面这三个核心,还有一些衍生数据或辅助数据,比如逐笔成交与委托合并数据,它把委托和成交事件按时间顺序混排在一起,方便按时间线复盘;以及预处理过的分钟级K线,这个对于做日频或分钟频策略回测的人来说,省去了自己聚合的麻烦,数据质量也更统一。 说到数据质量,不得不提一下数据清洗。早期我用过一些免费的源,光是处理除权除息、识别异常交易状态(比如集合竞价、临时停牌)就花了大把时间,经常因为数据问题导致回测结果失真。后来图省事,还是去找了专门处理过的商用源。比如我最近为了验证一个订单不平衡因子的有效性,就调取了CMES金融数据库中过去三年的全市场股票数据进行回测,发现他们预清洗过的版本在标识涨跌停、ST状态这些方面确实省心不少,虽然需要消耗积分,但时间成本也是成本啊。 最后简单列一下这些数据大概的体量,给大家一个直观感受(以一只活跃股票的单日数据估算): 委托数据(Order): 几十万到上百万条 成交数据(Trade): 几万到几十万条 订单簿快照(每3秒): 约4800条(一个交易日4小时) 所以,如果你打算深入研究这些数据,先准备好足够的硬盘空间和内存,以及一点耐心。不建议策略新手一上来就怼着Tick数据搞,容易陷入细节出不来。先从分钟线或者快照数据开始,把逻辑跑通,再考虑要不要上更细粒度的数据。 大概就是这些内容了。数据字段其实还有很多细节,比如各种业务标志位,用的时候最好对照着数据字典慢慢看。如果有朋友知道更高效压缩或存储这类时序数据的方法,求分享,私信交流也行。今天就先写到这儿。
浏览72
评论0
收藏0
用户头像sh_*2176oo
2026-07-05 发布
量化数据的 batch 接口有多好用?从 1 只到 500 只,批量拉数据的正确姿势 做量化最烦的事之一:一只一只地拉数据。 # 你可能写过这种代码 import time results = {} for sym in my_500_stocks: try: df = some_api.get_klines(sym) results[sym] = df except Exception: pass time.sleep(0.5) # 怕被封 # 500 只票 × 0.5 秒 = 250 秒 = 4 分钟起步 循环、sleep、try/except、进度不可见、失败了不知道哪些没拉到。 AlphaFeed 的 batch 接口把这些全解决了:传一个列表进去,内部自动分块、并发、重试,几秒钟全部拉完。 这篇文章详细讲 batch 接口的用法、原理和实战技巧。 最基本的用法 from alphafeed import AlphaFeed af = AlphaFeed() symbols = ["600519.SH", "000001.SZ", "300750.SZ", "002594.SZ", "601318.SH"] # 一行搞定 dfs = af.klines.batch( symbols, period="1d", count=250, adjust="forward", to_dataframe=True, ) # 返回字典:{symbol: DataFrame} for sym, df in dfs.items(): print(f"{sym}: {len(df)} 条数据") 就这么简单。没有循环、没有 sleep、没有 try/except。 batch 内部做了什么 当你调用 af.klines.batch(symbols, ...) 时,SDK 内部做了这些事: 你传入 500 个标的 ↓ 自动分块(每 100 个一组,分成 5 组) ↓ 5 个线程并发请求(不是串行!) ↓ 每个请求自动重试(最多 3 次,遇到超时或 5xx 自动重试) ↓ 合并所有结果,返回一个字典 关键参数: 默认分块大小:100 个标的/请求 默认并发数:5 个线程 默认重试:3 次 这意味着 500 只票,分成 5 组,5 个线程同时请求——时间约等于请求 1 组的时间,而不是请求 5 组的时间。 显示进度条 加上 show_progress=True,拉数据的过程可视化: dfs = af.klines.batch( symbols, period="1d", count=500, adjust="forward", to_dataframe=True, show_progress=True, # 显示 tqdm 进度条 ) Fetching data: 100%|████████████████████| 5/5 [00:03<00:00, 1.67it/s] 进度条显示的是"分块"的进度。500 只票分 5 块,进度条就是 5 步。 实战 1:批量拉 K 线做对比分析 同时拉 20 只票的 K 线,算过去一年的涨幅和波动率: import pandas as pd from alphafeed import AlphaFeed af = AlphaFeed() symbols = [ "600519.SH", "000001.SZ", "300750.SZ", "002594.SZ", "601318.SH", "000858.SZ", "600036.SH", "000333.SZ", "601012.SH", "600276.SH", "600900.SH", "601398.SH", "600030.SH", "000651.SZ", "002415.SZ", "600887.SH", "601166.SH", "000568.SZ", "600809.SH", "002304.SZ", ] dfs = af.klines.batch( symbols, period="1d", count=250, adjust="forward", to_dataframe=True, show_progress=True, ) results = [] for sym, df in dfs.items(): df = df.sort_values("trade_date").reset_index(drop=True) ret = df["close"].iloc[-1] / df["close"].iloc[0] - 1 vol = df["close"].pct_change().std() * (252 ** 0.5) avg_amount = df["amount"].mean() results.append({ "代码": sym, "年涨幅": f"{ret:+.1%}", "年化波动": f"{vol:.1%}", "日均成交额(亿)": f"{avg_amount / 1e8:.1f}", }) result_df = pd.DataFrame(results).sort_values("年涨幅", ascending=False) print(result_df.to_string(index=False)) 20 只票的 250 天数据,几秒钟拉完。 实战 2:批量拉分时数据 不只日线,分时数据也支持批量: from alphafeed import AlphaFeed af = AlphaFeed() symbols = ["600519.SH", "000001.SZ", "300750.SZ"] # 批量拉日内 1 分钟线 dfs = af.klines.intraday_batch(symbols, to_dataframe=True) for sym, df in dfs.items(): morning_vol = df[df["trade_time"] < df["trade_time"].iloc[0][:11] + "11:30:00"]["volume"].sum() total_vol = df["volume"].sum() pct = morning_vol / total_vol if total_vol > 0 else 0 print(f"{sym}: 上午成交占比 {pct:.1%} 总 {len(df)} 根分钟线") 实战 3:批量查五档盘口 from alphafeed import AlphaFeed af = AlphaFeed() symbols = ["600519.SH", "000001.SZ", "300750.SZ", "002594.SZ"] # 批量查盘口 depths = af.depth.batch(symbols) print(f"{'标的':<12} {'买一':>10} {'卖一':>10} {'价差(bps)':>10}") print("-" * 45) for sym, d in depths.items(): bid1 = d["bid_prices"][0] ask1 = d["ask_prices"][0] mid = (bid1 + ask1) / 2 spread_bps = (ask1 - bid1) / mid * 10000 if mid > 0 else 0 print(f"{sym:<12} {bid1:>10.2f} {ask1:>10.2f} {spread_bps:>10.1f}") 一次请求拿到多只票的盘口,适合做流动性分析或估算交易成本。 实战 4:批量查标的信息 from alphafeed import AlphaFeed af = AlphaFeed() # 查一批标的的基本信息 symbols = ["600519.SH", "000001.SZ", "AAPL.US", "00700.HK"] insts = af.instruments.batch(symbols) for inst in insts: ext = inst.get("ext", {}) print(f"{inst['symbol']:>12s} {inst['name']:<8s} " f"地区={inst['region']} 类型={inst['type']} " f"上市={ext.get('listing_date', 'N/A')}") 实战 5:批量查复权因子 from alphafeed import AlphaFeed af = AlphaFeed() symbols = ["600519.SH", "000001.SZ", "000858.SZ", "002594.SZ"] df = af.klines.ex_factors(symbols, to_dataframe=True) # 每只票有多少次除权除息 for sym in symbols: sub = df[df["symbol"] == sym] print(f"{sym}: {len(sub)} 次除权除息") 实战 6:200 只票的策略批量回测 batch 的真正威力在大规模分析。比如对 200 只票跑同一个策略: import pandas as pd import numpy as np from alphafeed import AlphaFeed af = AlphaFeed() # 假设你有一个 200 只票的股票池 stock_pool = [ "600519.SH", "000001.SZ", "300750.SZ", "002594.SZ", "601318.SH", "000858.SZ", "600036.SH", "000333.SZ", "601012.SH", "600276.SH", # ... 省略,实际上你可以放 200 只 ] # 一次性拉取所有数据 print("正在拉取数据...") dfs = af.klines.batch( stock_pool, period="1d", count=500, adjust="forward", to_dataframe=True, show_progress=True, ) print(f"拉取完成: {len(dfs)} 只票") # 对每只票跑双均线策略 def backtest_ma(df: pd.DataFrame) -> dict: df = df.sort_values("trade_date").reset_index(drop=True) df["ma20"] = df["close"].rolling(20).mean() df["ma60"] = df["close"].rolling(60).mean() df["signal"] = (df["ma20"] > df["ma60"]).astype(int) df["position"] = df["signal"].shift(1).fillna(0) df["ret"] = df["close"].pct_change().fillna(0) df["strat_ret"] = df["position"] * df["ret"] equity = (1 + df["strat_ret"]).cumprod() return { "total_return": equity.iloc[-1] - 1, "max_drawdown": (equity / equity.cummax() - 1).min(), } results = [] for sym, df in dfs.items(): if len(df) < 100: continue r = backtest_ma(df) r["symbol"] = sym results.append(r) rdf = pd.DataFrame(results).sort_values("total_return", ascending=False) print(f"\n=== {len(rdf)} 只票回测完成 ===") print(f"盈利的: {(rdf['total_return'] > 0).sum()} 只") print(f"亏损的: {(rdf['total_return'] <= 0).sum()} 只") print(f"平均收益: {rdf['total_return'].mean():+.2%}") print(f"\n表现最好的 5 只:") print(rdf.head()[["symbol", "total_return", "max_drawdown"]].to_string(index=False)) print(f"\n表现最差的 5 只:") print(rdf.tail()[["symbol", "total_return", "max_drawdown"]].to_string(index=False)) 重点: 200 只票的 500 天 K 线,用 batch 拉取只需要几秒钟。拉数据不再是瓶颈,你可以把时间花在策略分析上。 batch vs 手动循环:代码对比 手动循环(传统方式): import time results = {} failed = [] for i, sym in enumerate(symbols): try: df = some_api.get_klines(sym, period="1d", count=500) results[sym] = df print(f"[{i+1}/{len(symbols)}] {sym} OK") except Exception as e: print(f"[{i+1}/{len(symbols)}] {sym} 失败: {e}") failed.append(sym) time.sleep(0.5) # 怕被封 # 重试失败的 for sym in failed: try: df = some_api.get_klines(sym, period="1d", count=500) results[sym] = df except Exception: print(f"{sym} 重试仍失败") time.sleep(1) print(f"成功: {len(results)} / {len(symbols)}") AlphaFeed batch: dfs = af.klines.batch( symbols, period="1d", count=500, adjust="forward", to_dataframe=True, show_progress=True, ) 一行代码替代了上面的 20 行。分块、并发、重试、进度显示全内置。 batch 的技术细节 参数 默认值 说明 分块大小 100 只/请求 SDK 自动把标的列表切成 100 个一组 并发数 5 个线程 5 组同时请求,不是排队 重试次数 3 次 超时、网络错误、5xx 自动重试 进度条 show_progress=True 显示 基于 tqdm,显示分块级进度 为什么分块而不是一个请求传 500 个标的? 因为 URL 有长度限制,500 个标的的代码拼成逗号分隔的字符串会超过 HTTP URL 的安全长度。SDK 帮你处理了这个问题。 哪些接口支持 batch 接口 单个查询 批量查询 K 线 af.klines.get(symbol) af.klines.batch(symbols) 日内分时 af.klines.intraday(symbol) af.klines.intraday_batch(symbols) 实时行情 af.quotes.get(symbols=[...]) 本身就支持多标的 五档盘口 af.depth.get(symbol) af.depth.batch(symbols) 标的信息 af.instruments.get(symbol) af.instruments.batch(symbols) 复权因子 — af.klines.ex_factors(symbols) 和竞品的对比 操作 AlphaFeed akshare Tushare 拉 100 只票日 K af.klines.batch(symbols) 一行搞定 手动 for 循环 + sleep 手动 for 循环 + token 配额 自动重试 SDK 内置 需要自己写 try/except 需要自己写 并发请求 SDK 内置 5 线程 不支持(爬虫会被封) 有频率限制 进度显示 show_progress=True 自己用 tqdm 包一层 自己实现 500 只票耗时 约 5-10 秒 5+ 分钟(含 sleep) 1-3 分钟(含频率等待) 结语 batch 接口是 AlphaFeed 最实用的功能之一。它解决的问题很朴素:当你需要分析很多只票的时候,不应该等很久、写很多错误处理代码。 一个列表传进去,进度条跑一下,数据就到手了。剩下的时间你可以专注在分析和策略上,而不是和网络请求搏斗。 参考文献: AlphaFeed :https://alphafeed.org/ Python SDK 快速开始:https://docs.alphafeed.org/zh-Hans/sdk/python-quickstart
浏览42
评论0
收藏0

实时竞价数据API接口分享

用户头像mx_****60317
2026-01-26 发布
开源项目 在开源项目上,请点击star⭐和watch,关注开源项目代码的动态更新,这样就能掌握项目的变更请求。 GitHub代码下载地址: https://github.com/xticktop/ Gitee代码下载地址: https://gitee.com/xtick/ 1、竞价数据-实时接口 获取沪深京股票交易日盘中实时竞价数据,竞价时间段:9:15-9:25。每次调用接口返回最新竞价数据。 请求方法 请求地址:http://api.xtick.top/doc/bid/time?type=1&code=000001&token=043fbdcba7f3f3ab332ffff123456789 入参1:type 股票类别 这里目前只支持沪深京A股的竞价数据,type设置为1。 入参2:code 股票代码 比如平安银行为000001。 这里支持批量参数 a、code取值为000001,表示获取股票000001的竞价数据。 b、code取值为000001,000002,600000,表示获取这三个票的竞价数据,多个票直接用英文逗号分割,最多50个股票。 a、code取值为all,表示获取全市场股票的竞价数据。 入参3:token 登录XTick网站,注册获取。 入参4:option 可选参数,为json字符串。如果不需要过滤和排序功能,可以忽略该参数 String filter; //定义筛选条件 String sort; //定义排序字段 int asc; //定义排序方式 0:降序 1:升序 int limit = 10000;//定义截取长度 比如常见的两种场景: **场景一:**当天全市场股票竞价,按未成交额排序,从大到小,取前100条。 {"sort":"noe","asc":0,"limit":100} **场景二:**当天全市场股票竞价,过滤出来当天竞价涨幅5个点以上且竞价额大于等于1000万的个股,结果数据按未成交额排序,从大到小,取前100条。 {"filter":"jjzf>5;jje>=10000000","sort":"noe","asc":0,"limit":100} 字段定义 'time' #时间戳 'price' #最新价 'close' #前收盘价 'jjzf' #竞价涨幅 'jjl' #竞价量 'jje' #竞价金额 'nol' #未匹配量 'noe' #未匹配金额量 'trend' #-1未匹配量靠近卖一侧,1未匹配量靠近买一侧 数据示例 type code time price ... jjl jje nol noe 0 1 600968 1766539502000 3.85 ... 447 172095 328 126280 1 1 002291 1766539500000 6.23 ... 558 347634 113 70399 2 1 002190 1766539500000 35.65 ... 117 417105 1 3565 3 1 300669 1766539500000 25.69 ... 13 33397 4 10276 4 1 600645 1766539502000 25.35 ... 50 126750 16 40560 ... ... ... ... ... ... ... ... ... ... 5462 1 688147 1766539503000 69.76 ... 153 1067328 2 13952 5463 1 001380 1766539500000 22.16 ... 17 37672 19 42104 5464 1 688283 1766539503000 33.27 ... 16 53232 2 6654 5465 1 300342 1766539500000 24.99 ... 18749 46853752 3 7497 5466 1 605098 1766539501000 41.74 ... 124 517576 2 8348 2、竞价数据-历史接口 请求方法 请求地址:http://api.xtick.top/doc/bid/history?type=1&code=000001&seq=0&startDate=2025-03-25&endDate=2026-03-25&token=043fbdcba7f3f3ab332ffff123456789 入参1:type 股票类别 这里目前只支持沪深京A股的竞价数据,type设置为1。 入参2:code 股票代码 比如平安银行为000001 这里支持以下批量参数 a、code取值为000001,表示获取股票000001的竞价数据。注意这里不支持多个股票 b、code取值为all,startDate和endDate必须是同一天,表示获取某个交易日内的全市场股票的竞价数据。 入参3:seq 序列号,seq为0,表示集合竞价最后一条数据,即9:25分竞价数据,seq为1,表示集合竞价倒数第二条数据,即9:24分57秒竞价数据。目前seq取值就0和1,记录了集合竞价阶段最后两条数据。 **参数4:**时间范围,用于指定数据请求范围,表示的范围是[<b>startDate</b> ,<span> </span><b>endDate</b>]区间(包含前后边界)。、 特别说明: startDate - 起始时间,日期格式:2025-03-25 endDate- 结束时间,日期格式:2025-03-25 入参5:token 登录XTick网站,注册获取 字段定义 'time' #时间戳 'price' #最新价 'close' #前收盘价 'jjzf' #竞价涨幅 'jjl' #竞价量 'jje' #竞价金额 'nol' #未匹配量 'noe' #未匹配金额量 'trend' #-1未匹配量靠近卖一侧,1未匹配量靠近买一侧 数据示例 type code time price ... jjl jje nol noe 0 1 000001 1766419200000 11.52 ... 6478 7462656 19162 22074624 1 1 000001 1766505600000 11.55 ... 3842 4437510 3376 3899280 3、竞价数据-详情接口 开盘竞价阶段,个股的所有竞价信息。当天竞价完成后,9:25更新完数据。 请求方法: 请求地址:http://api.xtick.top/doc/bid/detail?type=1&code=000001&tradeDate=2025-03-25&token=043fbdcba7f3f3ab332ffff123456789 入参1:type 股票类别 这里目前只支持沪深京A股的竞价数据,type设置为1。 入参2:code 股票代码 比如平安银行为000001,不支持批量参数。 参数3:tradeDate 交易日期,日期格式:2025-10-28。 入参4:token 登录XTick网站,注册获取 字段定义 'time' #时间戳 'price' #最新价 'close' #前收盘价 'jjzf' #竞价涨幅 'jjl' #竞价量 'jje' #竞价金额 'nol' #未匹配量 'noe' #未匹配金额量 'trend' #-1未匹配量靠近卖一侧,1未匹配量靠近买一侧 数据示例 type code time price ... jjl jje nol noe 0 1 000001 1766452500000 11.53 ... 72 83016 30 34590 1 1 000001 1766452509000 11.53 ... 936 1079208 12 13836 2 1 000001 1766452518000 11.54 ... 1008 1163232 1449 1672146 3 1 000001 1766452527000 11.53 ... 1173 1352469 56 64568 4 1 000001 1766452545000 11.53 ... 1173 1352469 123 141819 5 1 000001 1766452554000 11.54 ... 1271 1466734 1445 1667530 6 1 000001 1766452563000 11.54 ... 1271 1466734 1449 1672146 7 1 000001 1766452572000 11.54 ... 1271 1466734 1511 1743694 8 1 000001 1766452581000 11.54 ... 1271 1466734 2231 2574574 9 1 000001 1766452599000 11.53 ... 1277 1472381 219 252507 10 1 000001 1766452617000 11.53 ... 1427 1645331 69 79557
浏览3012
评论4
收藏1