资讯动态

还手写 HMAC 签名调 OKX 下单?python-okx 帮你把签名、模拟盘和 WebSocket 全包了

发布时间:2026/10/26 14:42:42 来源:尧图企业网站定制
还手写 HMAC 签名调 OKX 下单python-okx 帮你把签名、模拟盘和 WebSocket 全包了【免费下载链接】python-okx项目地址: https://gitcode.com/GitHub_Trending/py/python-okx昨天你盯着终端里第三次重签失败时间戳对了、base64 也对了OKX 还是把请求拒了。翻到 API 文档的签名一节你大概只想把笔记本合上。python-okx 是 OKX V5 API 的 Python 封装库下单、签名、查行情这些活它都替你干了。一句话讲清它是什么python-okx 相当于给 OKX V5 接口套了一层免签通道。官方 API 文档里最繁琐的部分——算签名、拼请求头、区分模拟盘——它全打包好了你只管传 API 密钥然后按模块调方法拿 JSON 回来。能力地图拿到手能干什么模块你拿来干嘛okx.MarketData拉行情K 线、盘口、逐笔成交okx.Trade下单、撤单、改单、批量下单okx.Account查余额、持仓、资金账单okx.Funding充提、转账、账单流水okx.PublicData交易对信息、系统状态okx.TradingData成交明细、持仓历史okx.SubAccount子账户查询与管理okx.Grid网格策略单的开与管okx.websocket公共/私有频道实时推送 5 分钟连上第一笔调用# 先装包pip install python-okx --upgrade from okx import MarketData # 查行情不需要密钥flag0实盘1模拟盘 api MarketData.MarketAPI(flag1) # 拿 BTC-USDT 现货最新价公开接口返回结构统一 resp api.get_ticker(instIdBTC-USDT) print(resp[data][0][last])注意flag决定走实盘还是模拟盘私有接口带密钥的忘了设1就会在真实环境下单后文避坑清单第一条专门讲它。 从签名到下单你省掉的那二十行先说它帮你省了什么按 V5 文档手工拼签名——时间戳、method、路径、body 串起来HMAC-SHA256 再 base64还要塞进四个请求头——你手写至少要二十行而 python-okx 的OkxClient把这段逻辑整个藏在底层你只传密钥。from okx import Trade # 传一次密钥后面每个请求自动完成签名和拼 header trade Trade.TradeAPI( api_keyyour-key, api_secret_keyyour-secret, passphraseyour-passphrase, flag1, # 先跑模拟盘别用真钱试错 ) # 限价买入 0.01 个 BTCclOrdId 自定查单时用它定位 resp trade.place_order( instIdBTC-USDT, tdModecash, sidebuy, ordTypelimit, px60000, sz0.01, clOrdIdmy-test-001 ) print(resp) # 响应里有 ordId 和状态码code0 才算成功注意px、sz传字符串而不是数字交易所侧按字符串解析精度传成 float 可能多出一串尾数。 WebSocket 实时推送别再轮询行情了拉行情如果靠循环get_ticker既费限频额度又延迟高。python-okx 的WsPublicAsync基于 asyncio 异步推送挂着就行来数据自动回调连上即推。import asyncio, json from okx.websocket.WsPublicAsync import WsPublicAsync async def main(): url wss://wspap.okx.com:8443/ws/v5/public ws WsPublicAsync(urlurl) await ws.start() # 所有行情推给同一个回调 ws.callback lambda msg: print(最新价:, json.loads(msg)[data][0][last]) # 多频道一次订阅模拟盘私有频道要换 wss://ws.okx.com:8443/ws/v5/private 这类带模拟标识的地址 await ws.subscribe([{channel: tickers, instId: BTC-USDT}], ws.callback) task await ws.start() # 注意start() 返回消费任务留着它收数据 await asyncio.get_event_loop().run_forever() asyncio.run(main())注意subscribe会整体替换回调多个频道请在一次subscribe里全部传进去别反复调用断线时回调会收到ConnClosed事件重连逻辑要自己补。跑一个 30 天网格策略的体感第 1 天flag1进模拟盘get_ticker确认行情通路用GridAPI.grid_order_algo挂出一组网格单记下algoId。第 2 天接上私有频道 WebSocket挂单成交事件一进来就触发查仓get_positions对一遍账面。第 3 天下单偶发报 50110debugTrue打开请求日志一看签名里的时间戳比服务器慢了四十多秒——是宿主机时钟漂移同步系统时间后消失。第 7 天起它安静地跑着你要做的只是每天查一下get_grid_orders的成交明细把每天盯单变成了每天看报表。避坑清单坑私有接口忘了flag1以为在模拟盘其实在实盘。→解初始化客户端时先定死 flag模拟盘固定传1。坑本地时钟漂移导致签名报错常见 50110。→解时间戳要求 ISO 格式带毫秒和Zpython-okx 自动生成但服务器时间必须准。坑把返回 HTTP 200 当成功订单其实被拒了。→解先看顶层code批量下单再逐条看每笔的sCode。坑高频调用撞上 OKX 的接口限频。→解同一接口每秒别超过几次能走 WebSocket 就别走 REST。坑WebSocket 断线后数据静默消失。→解start()返回的 task 要持有监听回调里的ConnClosed事件后自行重建连接。坑限价单的px、sz传成浮点数。→解一律传字符串和交易所的精度规则对齐。如果你就在 OKX V5 上跑策略、团队又是 Python 栈没有理由不试 python-okx签名、限频、模拟盘这些脏活它已经干完了。反过来如果你的策略要跨多家交易所、或者主力语言不是 Python它解决不了一家独大的问题自己权衡。【免费下载链接】python-okx项目地址: https://gitcode.com/GitHub_Trending/py/python-okx创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑