最近有个朋友问我,说想自己写个脚本盯着币价的实时波动,但不知道从哪下手。我第一反应就是让他去看BinanceAPI。说实话,币安这套接口做得挺良心,文档全、更新勤,而且免费额度对个人玩家完全够用。我自己也是从零摸过来的,中间踩过不少坑,今天就把这些经验整理出来,希望能帮想搞量化或者自动交易的朋友省点时间。
相关下载: Binance全球顶级交易所 v3.19.3最新版大小:293.4M
咱们直奔主题,你只要跟着下面的步骤走,很快就能跑通第一个请求。
简单说,BinanceAPI就是币安交易所开放给开发者的接口,让你能用代码查行情、下单、撤单,甚至拉历史K线。相比其他交易所,它有几个明显优势:一是文档结构清晰,每个接口都有示例代码;二是响应速度快,全球节点多;三是社区活跃,遇到问题基本能搜到答案。对于咱们这种个人开发者,最关心的还是稳定性,我连续跑了大半年,很少遇到连接超时的情况。
首先你得有个币安账号,然后登录后台,在“API管理”页面创建一个新Key。这里要注意两点:第一,系统会让你绑定手机号和谷歌验证器,这步别嫌麻烦,安全第一;第二,创建时有个“允许读取”和“允许交易”的勾选,如果你只是看行情,只勾“允许读取”就够了,别全选,万一Key泄露了后果很严重。创建完后会给你一串Secret Key,这个只显示一次,一定要存好,丢了就得重新生成。
拿到Key之后,咱们就能开始写代码了。我习惯用Python,因为库多、简单,而且币安官方也提供了python-binance这个封装库,装起来特别方便。
先安装库:pip install python-binance。然后写个最基础的脚本:
from binance.client import Client
client = Client(api_key, api_secret)
ticker = client.get_symbol_ticker(symbol='BTCUSDT')
print(ticker)这段代码会返回BTC对USDT的最新价格。你可以把symbol换成任意交易对,比如ETHUSDT、BNBUSDT。如果你想要更详细的行情,比如24小时涨跌幅、最高最低价,就用get_ticker方法。我平时写监控脚本,就是轮询这个接口,每两秒拉一次,从来没被限流过。
做量化回测的朋友肯定需要历史数据。币安接口里对应的是get_klines:
klines = client.get_klines(symbol='BTCUSDT', interval=Client.KLINE_INTERVAL_1HOUR, limit=100)这里interval可以换成分钟、日线等,limit最多1000根。拿到的是二维数组,每行包含开盘、最高、最低、收盘、成交量等字段。我一般会转成DataFrame再处理,方便画图。有个坑要提醒你:接口返回的时间戳是毫秒级的,记得转成标准时间。
如果你要的是真正的实时数据,不是轮询,那就得上WebSocket。币安提供了一个stream接口,比如wss://stream.binance.com:9443/ws/btcusdt@trade,连接后就能持续收到每笔成交信息。在python-binance里,可以直接用BinanceSocketManager:
from binance.streams import BinanceSocketManager
bm = BinanceSocketManager(client)
ts = bm.trade_socket('BTCUSDT')
with ts as tscm:
while True:
msg = await tscm.recv()
print(msg)这个适合做高频策略,因为延迟极低。但要注意,WebSocket连接需要心跳维持,库内部已经处理了,你只要确保网络稳定就行。
交易数据这块,权限要求更高。你得在创建API Key时勾选“允许交易”,并且IP白名单要设置好,只允许你自己的服务器IP访问。获取账户信息用get_account(),下单用create_order()。我建议你先在测试网(testnet)上练手,币安提供了测试环境,API地址不同,但逻辑一样,这样不会亏真金白银。我之前就是直接在测试网上跑了一周,确认逻辑没问题才上实盘。
新手最容易遇到的报错是-1021 Timestamp for this request is outside of the recvWindow,这是因为你本地时间和服务器时间差太多。解决办法是调用client.get_server_time()来校准,或者设置time_offset。另一个常见问题是-2015 Invalid API-key, IP, or permissions for action,多半是因为IP白名单没加,或者Key权限不对,检查一下就好。
相关下载: 欧易okx交易所 v6.184.0大小:379.8M
如果你打算长时间跑,建议加上异常重试机制。比如用tenacity库,遇到网络超时就自动重试。另外,币安对请求频率有限制,默认权重是每分钟1200,如果你用轮询,建议控制间隔在1秒以上。我自己的脚本里还加了日志记录,每次请求都打时间戳,方便排查问题。
说实话,任何API都有风险,主要看你自己的习惯。密钥千万别传到GitHub上,我有个朋友就是不小心把Secret Key公开了,结果被人盗刷,损失惨重。建议定期更换Key,并且开启IP白名单。另外,如果只是用来看行情,完全不需要开交易权限,这样就算Key泄漏,别人也动不了你的钱。
学会了基础接口,你就可以拓展着玩了。比如写个价格提醒脚本,当BTC跌破某个价位就发邮件通知你;或者写个K线下载器,定时拉数据存到数据库。我最近就在做个持仓盈亏的统计面板,用Flask搭个网页,实时展示收益曲线,朋友看了都眼馋。其实难度不大,主要就是组合接口。
官方文档肯定是最全的,地址是binance-docs.github.io。另外,GitHub上有不少开源项目,你可以搜“binance-trading-bot”之类的关键词。如果想要中文资料,可以看看一些量化社区的帖子,但注意时效性,API更新快,旧代码可能跑不通。
好了,关于BinanceAPI接口的教程就说到这。如果你按着上面的步骤试了,应该能顺利拿到行情和交易数据。别怕踩坑,多试几次就熟练了。有什么问题欢迎在评论区交流,我看到都会回复。
精彩推荐
用户评论