a股实时api怎么选散户做短线到底用哪个接口才不卡
摘要:
高频交易里行情延迟决定滑点大小,免费接口用轮询会错过最佳买卖点。购买Level-2授权通过券商API直连能压到毫秒级,用WebSocket替代HTTP可降低开销,本地缓存加限流能防止封IP。

为什么你拿到的实时行情总慢半拍
做短线的朋友经常遇到一个怪事:软件上明明显示股价还在涨,自己点进去买,成交价却比看到的数字高出一截。挂单卖出也是,看着还有利润,点下去成交就变成亏损。这不是运气差,是行情数据从交易所到你屏幕之间走了太长一段路。
A股实时API本质就是一条管道,把交易所撮合好的最新价格、成交量、买卖五档或者十档信息传到你的策略代码里。管道有粗有细,有长有短。普通免费接口多数是轮询模式,你的程序每隔几秒去问一次服务器“现在什么价”,服务器答一次。这几秒里价格可能已经跳了好几个价位。
免费接口和付费接口差在哪
市面上免费A股实时API大多来自财经门户或者聚合数据商。它们的数据源本身也是从交易所或者持牌行情商那里拿的,中间转了好几手。转手越多,延迟越大。延迟三秒算快的,延迟十秒也常见。
付费接口通常分两种。一种走券商交易通道,你在这家券商开户,满足资产要求后开通Level-2行情授权,券商给你一个API地址。数据从交易所到券商再到你,路径最短,延迟能压到毫秒级或者几十毫秒。另一种是专业行情商,他们从交易所直接买授权,再分发给机构或者高净值客户,价格不便宜,一年几千到几万都有。

WebSocket比HTTP轮询省在什么地方
很多人写程序习惯用HTTP请求去拉行情。每次请求都要重新建立连接、发送头部信息、等待响应、关闭连接。高频场景下这套动作开销巨大。
WebSocket是长连接。建立一次之后,服务器有新数据就主动推给你,你的程序不用反复问。省掉了大量握手和头部开销,延迟自然降下来。国内主流行情接口现在基本都支持WebSocket推送,尤其是Level-2的逐笔委托和逐笔成交。
用Python写个简单示例:
import websocket
import json
def on_message(ws, message):
data = json.loads(message)
if 'tick' in data:
print(data['tick']['symbol'], data['tick']['price'])
def on_open(ws):
sub = {"action": "subscribe", "symbols": ["600519", "000001"]}
ws.send(json.dumps(sub))
ws = websocket.WebSocketApp(
"wss://行情服务器地址",
on_message=on_message,
on_open=on_open
)
ws.run_forever()
这段代码订阅了贵州茅台和平安银行的实时价格。服务器每有一笔新成交就推过来,程序立刻处理。比每秒发一次HTTP请求快得多。
本地缓存加限流防止被封IP
拿到实时数据之后不要每来一笔就写数据库或者发交易指令。行情跳动极快,一笔大单可能瞬间产生几十条逐笔记录。程序处理不过来就会堆积,堆积久了要么内存爆掉,要么被行情服务器判定为异常高频请求直接封IP。
正确做法是在内存里维护一个字典,按股票代码存最新价和盘口。策略需要的时候直接读内存,不碰网络。写数据库可以降频,比如每秒批量写一次。发交易指令更要有节流,同一只股票同一方向在极短时间内不要重复发单。
import time
last_order_time = {}
def can_send_order(symbol):
now = time.time()
last = last_order_time.get(symbol, 0)
if now - last < 0.5:
return False
last_order_time[symbol] = now
return True
上面这个函数限制同一只股票两次下单间隔至少半秒。半秒对大多数短线策略足够,又能避免因为行情抖动触发的无效报单。
期货实时API和股票有什么不同
期货是保证金交易,有夜盘,行情接口的推送频率通常比股票更高。国内商品期货交易所的Level-1行情是每秒两次快照,Level-2提供逐笔委托和逐笔成交。股指期货跟股票一样在白天交易,但期货公司提供的API大多走CTP协议。
CTP接口是期货公司给程序化交易者的标准通道,支持实时行情和交易指令。跟股票API最大的区别在于期货有持仓和保证金概念,程序里必须实时计算可用资金和风险度。行情推送过来不只是价格,还有买卖各五档的量和价,以及最新成交量和持仓量。
股票API很多不提供逐笔成交明细,期货CTP接口默认就有。做期货高频策略的人往往直接用CTP的行情前置,延迟比股票低一个数量级。反过来,做股票日内的人如果只用普通免费接口,基本等于蒙着眼睛过马路。
选API之前先算清楚自己的需求
不是所有人都需要毫秒级延迟。做日线级别或者分钟级别策略的人,几秒的延迟完全可以接受。用免费接口加上合理的本地缓存,省下的钱比滑点损失多。
真正需要付费低延迟API的是三类人:做Tick级高频的、做套利需要同时看多个合约的、以及做期权做市必须实时更新报价的。这三类人如果用了慢接口,策略逻辑再漂亮也赚不到钱,因为信号出来的时候价格已经跑掉了。
先问自己三个问题:每天交易几次?每次持仓多久?滑点占预期利润的比例是多少?这三个问题回答清楚,API怎么选自然就有答案。
程序化交易的行情数据质量比速度更重要
有一种情况比慢更可怕:数据错了。免费接口偶尔会出现价格跳变、成交量归零、买卖档位错乱。程序如果直接信任这些数据,可能瞬间发出错误指令。
拿到行情之后加一层校验逻辑非常必要。最新价跟上一笔比较,波动超过涨跌停限制的直接丢弃。买一价高于卖一价的丢弃。成交量比前一笔还小的丢弃。这些简单规则能过滤掉大部分脏数据。
做量化交易的人常说一句话:垃圾进,垃圾出。行情API是整条策略链路的第一环,这一环不稳,后面所有模型和风控都是空中楼阁。花时间把数据源搞清楚,比花时间调参更值。
声明
转载声明:欢迎分享本文,转载请注明出处!
点击复制: