尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

python-binance 通用接口(General Endpoints)实战指南:连接检测、系统状态与交易对信息获取

python-binance 通用接口(General Endpoints)实战指南:连接检测、系统状态与交易对信息获取 金融科技【免费下载链接】python-binanceBinance Exchange API python implementation for automated trading项目地址https://gitcode.com/gh_mirrors/py/python-binance点击查看免费下载本指南以 python-binance 官方文档 docs/general.rst 为骨架系统讲解现货 API 中 7 个通用端点General Endpoints的同步与异步两种调用方式包括服务器连通性检测ping、服务器时间校准get_server_time、系统维护状态查询get_system_status、交易对信息获取get_exchange_info / get_symbol_info以及账户快照get_account_snapshot等核心操作。读完本文你将掌握如何在自动化交易程序启动前完成环境自检、在发单前校准时间戳、以及在构建行情监控或策略初始化时准确获取并解析交易对的精度与过滤器规则。通用端点概览与适用场景Binance 现货 REST API 将接口划分为通用端点、行情数据端点、账户端点等几大类。通用端点General Endpoints承担的是零门槛的基础能力不需要任何 API Key 即可访问的连通性测试、时间同步、交易所信息以及需要签名认证的系统状态与账户快照。在 python-binance 中这些能力被封装为Client同步与AsyncClient异步上的同名方法方法返回值为解析后的 Python 字典或列表便于直接读写。原文档中涉及的端点可整理为下表对应同步实现位于 binance/client.py异步实现位于 binance/async_client.py方法底层 REST 端点是否需要签名主要用途client.ping()GET /api/v3/ping否测试 REST API 连通性返回空对象client.get_server_time()GET /api/v3/time否获取交易所服务器时间戳用于本地时钟校准client.get_system_status()GET /sapi/v1/system/status否查询系统是否处于维护状态client.get_exchange_info()GET /api/v3/exchangeInfo否获取交易规则、限频规则与全部交易对信息client.get_symbol_info(symbol)基于exchangeInfo本地过滤否获取单个交易对的详细信息client.get_all_tickers()GET /api/v3/ticker/price否获取所有交易对的最新价格client.get_account_snapshot(type...)GET /sapi/v1/accountSnapshot是获取 SPOT/MARGIN/FUTURES 每日账户快照需要说明的是文档中get_all_tickers的标题写为 Get All Coins Info但从实现看binance/client.py#L395-L423它实际返回的是所有交易对的最新价格列表而可用充提的币种信息对应的是get_all_coins_info等钱包接口使用时应以源码实现为准。连通性测试ping 与 get_server_timeping轻量级连通性探测ping()是最轻量的探活手段只验证与 REST API 的网络连通性不返回任何业务数据from binance.client import Client client Client(api_key, api_secret) result client.ping() print(result) # {}从源码看该方法直接请求_get(ping)binance/client.py#L359-L373最终落到GET /api/v3/ping成功时返回空字典{}。因此只需要判断调用是否抛异常即可确认链路健康。异步版本用法一致仅需awaitfrom binance import AsyncClient client await AsyncClient.create(api_key, api_secret) result await client.ping() print(result) # {}对应异步实现见 binance/async_client.py#L340-L343。测试用例test_pingtests/test_client.py#L32-L33验证了调用行为并且断言 URI 中包含/v3/tests/test_client.py#L32-L33。get_server_time时间校准time_res client.get_server_time() print(time_res) # {serverTime: 1499827319559}返回的serverTime是毫秒级 Unix 时间戳binance/client.py#L375-L391底层请求为GET /api/v3/time。在实战中这个接口有两个高频用途启动自检交易程序启动时先ping()再get_server_time()确认网络与服务均正常后再进入主循环时钟偏差校正许多签名请求如订单提交依赖客户端时间与服务器时间的偏差在允许窗口内默认recvWindow可将serverTime - time.time() * 1000的差值作为时间偏移量维护避免因本地时钟漂移导致签名请求被拒。测试test_get_server_timetests/test_client.py#L36-L37同样覆盖了该方法的同步调用路径。系统状态查询get_system_statusstatus client.get_system_status() print(status) # { # status: 0, # 0: normal1system maintenance # msg: normal # normal or System maintenance. # }status字段取值含义0表示系统正常1表示系统维护中msg为对应的人类可读描述。源码实现binance/client.py#L2448-L2465通过_request_margin_api(get, system/status)调用实际请求的是GET /sapi/v1/system/statusmargin API 走 SAPI 路径见 binance/base_client.py#L287-L294 的_create_margin_api_uri。该接口无需签名测试见 tests/test_client.py#L106-L107。典型用法是在程序启动或定时巡检时检查返回值若status 1则应暂停开仓、撤单等写操作避免在系统维护窗口内提交订单。注意它只反映系统维护状态与网络连通性ping是两个独立维度建议组合使用。交易所信息get_exchange_info 与 get_symbol_infoget_exchange_info全量交易规则info client.get_exchange_info()该接口一次返回时区、服务器时间、限频规则rateLimits与全部交易对定义symbols是构建交易系统的元数据底座。返回结构可参考源码 docstringbinance/client.py#L240-L304中的完整示例关键字段如下timezone/serverTime交易所时区与当前服务器时间rateLimits限频规则数组常见类型包括REQUESTS每分钟请求数上限、ORDERS订单速率限制按秒/按天统计symbols交易对数组每个元素包含交易对名称、状态TRADING等、基础/计价资产、精度以及filters过滤器列表。filters是下单前必须解析的关键数据常见过滤器类型及其字段filterType关键字段含义PRICE_FILTERminPrice/maxPrice/tickSize价格上下限与最小价格步进LOT_SIZEminQty/maxQty/stepSize数量上下限与最小数量步进MIN_NOTIONALminNotional单笔最小名义价值价格 × 数量下限若不按tickSize/stepSize对齐价格与数量订单极易被交易所拒绝因此很多策略初始化时会先从get_exchange_info()提取交易对过滤器动态构造价格/数量精度映射表。底层实现为self._get(exchangeInfo)binance/client.py#L304即GET /api/v3/exchangeInfo。异步版本见 binance/async_client.py#L322-L325对应测试 tests/test_client.py#L24-L25 与 tests/test_async_client.py#L24-L25。get_symbol_info单交易对过滤info client.get_symbol_info(BNBBTC) print(info[symbol]) # BNBBTC print(info[status]) # TRADING print(info[filters]) # 该交易对的过滤器列表get_symbol_info(symbol)是get_exchange_info()的便捷封装它先拉取全量exchangeInfo再遍历symbols数组将符号转大写后精确匹配binance/client.py#L306-L355res self.get_exchange_info() for item in res[symbols]: if item[symbol] symbol.upper(): return item return None两点实战提示若传入符号不存在如BNBBTCX方法返回None而非抛异常调用方需自行判空由于每次调用都会触发一次全量exchangeInfo请求若需高频查询多个交易对更优做法是调用一次get_exchange_info()后在本地建索引而不是反复调用本方法。异步实现见 binance/async_client.py#L327-L336测试 tests/test_client.py#L28-L29 验证了get_symbol_info(BTCUSDT)的调用。全市场最新价格get_all_tickersinfo client.get_all_tickers() print(info) # [ # {symbol: LTCBTC, price: 4.00000200}, # {symbol: ETHBTC, price: 0.07946600} # ]该方法返回所有交易对的最新成交价列表每个元素包含symbol与price两个字段底层请求GET /api/v3/ticker/pricebinance/client.py#L395-L423。实现中有一个值得注意的类型守卫只有返回值为 list 且元素均为 dict 时才原样返回否则抛出TypeError(Expected a list of dictionaries)用于防止上游返回格式异常时静默出错。异步版本额外支持可选参数symbol传入时可只查询单个交易对的价格binance/async_client.py#L352-L365。注意price为字符串类型需要参与数值计算时请先转换为Decimal或float并注意精度处理。每日账户快照get_account_snapshotinfo client.get_account_snapshot(typeSPOT)get_account_snapshot用于获取指定类型的每日账户快照type参数必填合法取值为SPOT、MARGIN、FUTURES。该接口需要签名源码中_request_margin_api(get, accountSnapshot, True, dataparams)的第二个参数为签名开关binance/client.py#L9387请求路径为GET /sapi/v1/accountSnapshot。除type外还支持以下可选参数binance/client.py#L9279-L9288 的 docstring参数类型说明startTimeint起始时间戳毫秒可选endTimeint结束时间戳毫秒可选limitint返回快照条数上限可选recvWindowint请求有效窗口毫秒可选响应外层结构统一为{code: 200, msg: , snapshotVos: [...]}其中snapshotVos按时间倒序排列每项含data、type、updateTime。不同type下data结构差异明显完整示例见 binance/client.py#L9292-L9382SPOTbalances数组每项含asset、free、locked与totalAssetOfBtcMARGINmarginLevel、totalAssetOfBtc、totalLiabilityOfBtc、totalNetAssetOfBtc与userAssets数组FUTURESassets数组含marginBalance、walletBalance与position数组含entryPrice、markPrice、positionAmt、unRealizedProfit等。典型用途包括资产对账、持仓可视化与策略回测前的账户状态快照。注意该接口返回的是每日快照不适合高频轮询若需要实时资产应使用账户余额接口或用户数据流User Data Stream。已废弃端点get_productsproducts client.get_products()get_products()在原文档中明确标注为 deprecatedThis call is deprecated, use the above Exchange Info call。从实现看binance/client.py#L224-L238它请求的是网站资产服务的bapi/asset/v2/public/asset-service/product/get-products?includeEtftrue通过_request_websiteURI 构造见 binance/base_client.py#L300-L301而非标准/api/v3接口。该端点返回的产品列表结构不稳定官方建议统一改用get_exchange_info()获取交易对信息。新代码不应再依赖此接口。同步与异步的完整入门代码同步方式Clientfrom binance.client import Client client Client(api_key, api_secret) # 1. 启动自检连通性 服务器时间 print(client.ping()) print(client.get_server_time()) # 2. 系统维护状态0 正常1 维护中 status client.get_system_status() if status[status] ! 0: print(system maintenance, hold on trading) # 3. 交易所信息与单交易对信息 info client.get_exchange_info() symbol_info client.get_symbol_info(BNBBTC) # 4. 全市场最新价格 prices {t[symbol]: t[price] for t in client.get_all_tickers()} print(prices.get(BTCUSDT)) # 5. 每日账户快照需要 API Key 签名 snapshot client.get_account_snapshot(typeSPOT)异步方式AsyncClientimport asyncio from binance import AsyncClient async def main(): client await AsyncClient.create(api_key, api_secret) try: print(await client.ping()) print(await client.get_server_time()) print(await client.get_exchange_info()) print(await client.get_symbol_info(BTCUSDT)) prices await client.get_all_tickers() print([p for p in prices if p[symbol] BTCUSDT]) snapshot await client.get_account_snapshot(typeSPOT) finally: await client.close_connection() asyncio.run(main())异步实现采用get_xxx.__doc__ Client.get_xxx.__doc__的方式复用同步版 docstring见 binance/async_client.py#L320-L365因此两者参数与返回值约定完全一致从同步迁移到异步时只需将调用改为await。异步侧对应测试见 tests/test_async_client.py#L24-L37 与 tests/test_async_client.py#L121-L122。底层实现与调用链小结以上通用端点在 python-binance 中的底层调用链高度统一理解后可举一反三排查其他接口公共接口ping、get_server_time、get_exchange_info、get_all_tickers均通过_get(path)走标准/api/v3路径无需签名SAPI 接口get_system_status、get_account_snapshot通过_request_margin_api走/sapi/v1路径其中accountSnapshot需要签名废弃接口get_products走网站资产服务bapi/...路径通过_request_website发起URI 统一由 binance/base_client.py#L276-L301 的_create_api_uri/_create_margin_api_uri/_create_website_uri构造并支持testnet/demo环境切换。换言之判断一个方法属于哪类端点只需看其最终调用了_getv3、_request_margin_apisapi还是_request_websitebapi即可。这与本文开头的端点分类表一一对应可作为后续阅读源码与排查请求路径的速查依据。赞分享金融科技【免费下载链接】python-binanceBinance Exchange API python implementation for automated trading项目地址https://gitcode.com/gh_mirrors/py/python-binance点击查看免费下载相关推荐python-binance 提现与充值接口实战Withdraw / Deposit Endpoints 完整指南python binance 提现与充值接口实战Withdraw / Deposit Endpoints 完整指南 本文以 python binance 官方金融科技Iced系统信息获取硬件检测与系统状态监控Iced系统信息获取硬件检测与系统状态监控 在当今复杂的软件开发环境中系统信息监控已成为应用程序不可或缺的功能。无论是性能优化、故障排查还是用户体验提升实前端跨平台UI组件桌面应用节点连接视觉状态API获取与设置接口节点连接视觉状态API获取与设置接口 你是否在构建流程图应用时遇到节点连接状态难以追踪、视觉反馈不清晰的问题本文将系统介绍LiteGraph.js中节点连前端UI组件低代码上一篇终极指南如何快速使用Course Crawler高效下载MOOC课程资源下一篇如何快速掌握Google的Learned Optimization智能优化的新境界创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表