
2021 年 1 月GameStopGME逼空行情在美股盘后继续发酵。交易所已收盘散户只能盯着隔夜期货猜测走势而持有 GMEUSDT 股票代币的交易者却能在链上继续买卖捕捉盘后的价格发现机会。这就是股票代币的核心价值把传统股票搬到区块链上让它像加密货币一样 24 小时不间断交易。对于想要构建全天候行情监控或交易系统的开发者来说股票代币行情接口是一个值得关注的新数据品类。一、什么是股票代币股票代币Tokenized Stocks是由链上机构发行的、锚定真实上市公司股价的数字资产。每枚代币对应一定比例的真实股票价格在美股交易时段与标的股票高度联动盘后则由链上供需决定。与传统股票行情接口相比股票代币行情有几个显著特点7×24 小时连续交易不受交易所开盘时间限制盘前、盘后、节假日均有成交USDT 计价价格以 USDT 结算无需换汇盘口为一档股票代币的买卖盘口只提供最优一档买一/卖一不同于 A 股、港股的五档或十档覆盖股票 ETF 贵金属除个股外还包括 SPYUSDT标普 500 ETF、QQQUSDT纳斯达克 100 ETF、XAUUSDT现货黄金等二、股票代币品种Infoway API 目前支持64 个股票代币覆盖科技、金融、能源、消费等主要板块同时包含主流 ETF 和贵金属科技股AAPLUSDT苹果、NVDAUSDT英伟达、MSFTUSDT微软、GOOGLUSDT谷歌、METAUSDTMeta、TSLAUSDT特斯拉、AMDUSDTAMD、INTCUSDT英特尔、QCOMUSDT高通、TSMUSDT台积电、ASML阿斯麦…金融股JPMUSDT摩根大通、BACUSDT美国银行、BRKBUSDT伯克希尔 B 类、COINUSDTCoinbase、HOODUSDTRobinhood…能源 / 消费CVXUSDT雪佛龙、OXYUSDT西方石油、AMZNUSDT亚马逊、COSTUSDT好市多、NFLXUSDTNetflix…ETFSPYUSDT标普 500、QQQUSDT纳斯达克 100、SOXLUSDT三倍做多半导体、EWJUSDTMSCI 日本、EWYUSDTMSCI 韩国贵金属XAUUSDT现货黄金、XAGUSDT现货白银、XCUUSDT现货铜、XPTUSDT铂金、XPDUSDT钯金通过接口获取完整列表importrequests API_KEYyour_api_keyBASE_URLhttps://data.infoway.ioresprequests.get(f{BASE_URL}/common/basic/symbols,headers{apiKey:API_KEY},params{type:CRYPTO})all_symbolsresp.json()[data]# 股票代币的 symbol 均以 USDT 结尾过滤即可token_stocks[sforsinall_symbolsifs[symbol].endswith(USDT)]print(f股票代币品种数量{len(token_stocks)})三、REST API 快速上手股票代币与加密货币共用同一套接口路径businesscrypto即可访问。3.1 实时成交明细defget_token_trades(symbols:list[str])-list[dict]:查询股票代币最新成交明细codes,.join(symbols)resprequests.get(f{BASE_URL}/crypto/batch_trade/{codes},headers{apiKey:API_KEY})resp.raise_for_status()returnresp.json()[data]tradesget_token_trades([TSLAUSDT,NVDAUSDT,AAPLUSDT])fortintrades:direction{0:中性,1:买入,2:卖出}.get(t[td],未知)print(f{t[s]}: 价格{t[p]}USDT 成交量{t[v]}股 方向{direction})注意v字段单位为股票份额数股而非手。v6.251表示成交 6.251 股 AAPL 代币。3.2 实时买卖盘口一档股票代币的盘口只有最优一档返回结构与多档盘口相同但数组长度为 1defget_token_depth(symbols:list[str])-list[dict]:查询股票代币一档买卖盘口codes,.join(symbols)resprequests.get(f{BASE_URL}/crypto/batch_depth/{codes},headers{apiKey:API_KEY})resp.raise_for_status()returnresp.json()[data]depth_listget_token_depth([TSLAUSDT,PDDUSDT])foritemindepth_list:ask_priceitem[a][0][0]# 卖一价ask_volitem[a][1][0]# 卖一量bid_priceitem[b][0][0]# 买一价bid_volitem[b][1][0]# 买一量spreadfloat(ask_price)-float(bid_price)print(f{item[s]}: 卖一{ask_price}({ask_vol}股) 买一{bid_price}({bid_vol}股) 价差{spread:.5f})3.3 K 线数据importtimedefget_token_kline(symbol:str,kline_type:int1,num:int100)-list[dict]: 获取股票代币 K 线 kline_type: 11分钟, 51小时, 8日K resprequests.post(f{BASE_URL}/crypto/v2/batch_kline,headers{apiKey:API_KEY},json{klineType:kline_type,klineNum:num,codes:symbol})resp.raise_for_status()dataresp.json()[data]returndata[0][respList]ifdataelse[]# 获取特斯拉代币最近 50 根 1 小时 K 线klinesget_token_kline(TSLAUSDT,kline_type5,num50)forkinklines[:5]:tstime.strftime(%m-%d %H:%M,time.localtime(int(k[t])))print(f{ts}| O:{k[o]}H:{k[h]}L:{k[l]}C:{k[c]}涨跌:{k[pc]})四、WebSocket 实时订阅含断线重连股票代币使用businesscrypto的 WebSocket 地址wss://data.infoway.io/ws?businesscryptoapikeyYOUR_API_KEY以下是完整 Python 客户端同时订阅 TSLA、NVDA、AAPL 三只代币的成交明细 盘口 1 分钟 K 线importos,asyncio,json,uuid,loggingfromtypingimportOptionalimportwebsocketsfromwebsockets.asyncio.clientimportClientConnectionfromwebsockets.exceptionsimportConnectionClosed logging.basicConfig(levellogging.INFO,format%(asctime)s - %(levelname)s - %(message)s)loggerlogging.getLogger(tokenstock-ws)REQ_TRADE10000REQ_DEPTH10003REQ_KLINE10006REQ_HEARTBEAT10010PUSH_TRADE,PUSH_DEPTH,PUSH_KLINE10002,10005,10008ACK_CODES{10001,10004,10007}SUBSCRIBE_SYMBOLSTSLAUSDT,NVDAUSDT,AAPLUSDTclassTokenStockWSClient:股票代币行情 WebSocket 客户端指数退避重连def__init__(self,api_key:str):self.ws_urlfwss://data.infoway.io/ws?businesscryptoapikey{api_key}self.ws:Optional[ClientConnection]Noneself.runningTrueself.reconnect_base,self.reconnect_max5,60self.heartbeat_interval30self.heartbeat_task:Optional[asyncio.Task]Noneasyncdef_send(self,msg:dict)-None:awaitself.ws.send(json.dumps(msg))asyncdef_subscribe_all(self)-None:tlambda:str(uuid.uuid4())awaitself._send({code:REQ_TRADE,trace:t(),data:{codes:SUBSCRIBE_SYMBOLS}})awaitself._send({code:REQ_DEPTH,trace:t(),data:{codes:SUBSCRIBE_SYMBOLS}})awaitself._send({code:REQ_KLINE,trace:t(),data:{arr:[{type:1,codes:SUBSCRIBE_SYMBOLS}]}})logger.info(已订阅股票代币%s,SUBSCRIBE_SYMBOLS)def_start_heartbeat(self)-None:self._cancel_heartbeat()asyncdef_loop():try:whileTrue:awaitasyncio.sleep(self.heartbeat_interval)ifself.wsisNoneorself.ws.close_codeisnotNone:breakawaitself._send({code:REQ_HEARTBEAT,trace:str(uuid.uuid4())})except(ConnectionClosed,asyncio.CancelledError):passself.heartbeat_taskasyncio.create_task(_loop())def_cancel_heartbeat(self)-None:ifself.heartbeat_taskandnotself.heartbeat_task.done():self.heartbeat_task.cancel()self.heartbeat_taskNonedef_on_message(self,raw:str)-None:try:msgjson.loads(raw)exceptjson.JSONDecodeError:returncode,datamsg.get(code),msg.get(data,{})ifcodePUSH_TRADE:direction{1:买入,2:卖出}.get(data.get(td),中性)logger.info([成交] %s 价格%s USDT 量%s股 方向%s,data.get(s),data.get(p),data.get(v),direction)elifcodePUSH_DEPTH:# 股票代币只有一档取 [0][0] 即可ask1data[a][0][0]ifdata.get(a)elseN/Abid1data[b][0][0]ifdata.get(b)elseN/Alogger.info([盘口] %s 卖一%s 买一%s,data.get(s),ask1,bid1)elifcodePUSH_KLINE:logger.info([K线] %s 收%s USDT 涨跌%s,data.get(s),data.get(c),data.get(pfr))elifcodeinACK_CODES:logger.info(订阅确认 code%s,code)asyncdef_connect_once(self)-None:asyncwithwebsockets.connect(self.ws_url)asws:self.wsws logger.info(WebSocket 连接成功)awaitself._subscribe_all()self._start_heartbeat()try:asyncformessageinws:self._on_message(message)finally:self._cancel_heartbeat()self.wsNoneasyncdefstart(self)-None:backoffself.reconnect_basewhileself.running:try:awaitself._connect_once()backoffself.reconnect_baseexceptConnectionClosedase:logger.warning(连接关闭: %s,e)exceptExceptionase:logger.error(连接异常: %s,e)ifnotself.running:breaklogger.info(%.0f 秒后重连...,backoff)awaitasyncio.sleep(backoff)backoffmin(backoff*2,self.reconnect_max)asyncdefmain():api_keyos.environ.get(INFOWAY_API_KEY,YOUR_API_KEY)awaitTokenStockWSClient(api_key).start()if__name____main__:try:asyncio.run(main())exceptKeyboardInterrupt:print(退出)五、使用注意事项5.1 盘口只有一档股票代币的深度数据中a卖盘和b买盘数组长度均为1直接取[0][0]即可无需像股票接口那样遍历多档。5.2 美股交易时段 vs 盘后时段的行为差异美股开盘期间北京时间 21:30–04:00夏令时提前 1 小时代币价格与标的股票联动紧密价差极小盘后时段流动性下降价差可能扩大。构建策略时建议用时间段过滤importdatetime,pytzdefis_us_market_open()-bool:判断当前是否处于美股正式交易时段含夏令时自动切换ny_tzpytz.timezone(America/New_York)now_nydatetime.datetime.now(ny_tz)ifnow_ny.weekday()5:# 周末returnFalsemarket_opennow_ny.replace(hour9,minute30,second0,microsecond0)market_closenow_ny.replace(hour16,minute0,second0,microsecond0)returnmarket_opennow_nymarket_close5.3 跨接口联动获取标的公司财报数据股票代币的底层是真实上市公司可通过财报接口查询对应股票的基本面数据Symbol 格式切换回标准股票代码即可defget_underlying_financials(token_symbol:str)-dict:通过代币 Symbol如 TSLAUSDT查询标的股票财务数据tickertoken_symbol.replace(USDT,)# TSLAUSDT → TSLAus_symbolf{ticker}.US# → TSLA.USresprequests.get(f{BASE_URL}/common/basic/financial/statistics,headers{apiKey:API_KEY},params{symbol:us_symbol,type:STOCK_US})resp.raise_for_status()returnresp.json()[data]statsget_underlying_financials(NVDAUSDT)foriteminstats[:3]:print(f{item[itemName]}:{item.get(currentValue)})5.4 ETF 和贵金属代币的特殊性SPYUSDT、QQQUSDT等 ETF 代币没有对应的个股财报接口XAUUSDT黄金、XAGUSDT白银等贵金属代币同样不支持财报查询但可通过/common/batch_trade/获取实时报价逻辑与黄金现货行情一致。