手动盯盘下单太累?想睡觉时也能自动交易?币安 API 可以帮你实现——通过几行 Python 代码,就能获取实时行情、自动下单、设置策略,让机器为你执行交易。
本教程将从零开始,带你掌握币安 API 量化交易的基础技能。
⚠️ 前置条件:你需要一个已完成 KYC 的币安账号。还没有?立即注册,填写邀请码 BINANBT 享 20% 手续费返佣。
一、量化交易是什么?适合什么样的人?
核心概念
量化交易就是用写好的程序(交易策略)自动执行买卖操作。人负责设计策略逻辑,机器负责执行。
手动交易 vs 量化交易:
| 维度 | 手动交易 | 量化交易 |
|---|---|---|
| 执行速度 | 秒级(看盘→判断→下单) | 毫秒级(条件触发立即执行) |
| 情绪影响 | 恐惧、贪婪影响判断 | 彻底消除情绪干扰 |
| 盯盘时间 | 需要持续盯盘 | 7×24 小时自动化运行 |
| 回测能力 | 无法验证策略历史表现 | 可用历史数据验证 |
| 复杂度 | 简单直接 | 需要编程基础 |
适合人群
- ✅ 有一定 Python 基础的程序员
- ✅ 想实现特定交易策略(定投、网格、套利等)
- ✅ 不想整天盯盘但想保持交易纪律
- ❌ 完全没接触过编程的新手(建议先学 Python 基础)
二、币安 API 介绍
币安 API 是目前加密货币交易所中功能最完善、文档最清晰的 API 之一。
API 类型
| 类型 | 权限 | 用途 |
|---|---|---|
| REST API | 查询 + 交易 | 获取行情、历史数据、执行下单、查询账户 |
| WebSocket | 仅订阅 | 实时行情推送、订单更新推送 |
| FAPI(合约 API) | 查询 + 交易 | 合约市场的独立接口 |
API 权限分类
创建 API Key 时可以选择三种权限:
- 仅读取(Read-only) — 只能查行情和账户,不能交易,最安全
- 启用交易(Enable Trading) — 可以下单交易,适合交易机器人
- 启用提现(Enable Withdrawals) — 可以从账户提币,千万谨慎授权
🔐 安全第一:用于日常交易的 API 只勾选「启用交易」,永远不要给交易机器人提现权限。
三、创建 API Key
操作步骤
- 登录币安网站 → 右上角「个人中心」→「API 管理」
- 点击「创建 API」→ 选择「系统生成的 API Key」
- 完成安全验证(邮箱 + 谷歌验证器)
- 设置 API 权限(建议:只勾选「启用交易」)
- 记录下 API Key 和 Secret Key(密钥只显示一次,丢失需重新生成)
安全设置建议
创建完成后,回到 API 管理页面逐项确认下面三处:
| 设置项 | 建议 | 为什么 |
|---|---|---|
| IP 白名单 | 必开 | 限定只有你的服务器 IP 能调用,Key 万一泄露别人也用不了 |
| 允许提现 | 必关 | 默认就是关闭状态,但一定要亲自确认一遍 |
| 限制访问时间 | 按需 | 只在特定时段跑策略的话,可以进一步收紧 |
注意:Secret Key 要像密码一样保管,不要上传到 GitHub 或分享给任何人。
四、环境搭建
安装 Python 环境
先在终端执行 python --version 确认版本,需要 3.7 以上。然后安装三组依赖:
| 安装命令 | 装的是什么 |
|---|---|
pip install python-binance | 币安 Python SDK,本文所有操作都靠它 |
pip install pandas numpy | 数据处理,K 线转表格、算指标要用 |
pip install matplotlib | 绘图,回测时看资金曲线用得上 |
连接测试
从 binance.client 模块导入 Client 类,把 API Key 和 Secret Key 两个字符串按顺序传进去,得到一个客户端对象——后面所有操作都通过它发出。
验证是否连通,调用客户端的 get_system_status() 方法。正常会返回一个字典,其中 msg 字段的值是 “System normal”。建议把这一步包在 try / except 里,连不上时把异常信息打印出来,方便区分到底是 Key 填错了、网络不通,还是 IP 没进白名单。
安全存储 API 密钥
不推荐:直接把密钥写在代码里(上传 GitHub 就泄露了)。
推荐方案——使用环境变量:
在终端用 export BINANCE_API_KEY='你的KEY' 设置,Secret 同理设成 BINANCE_SECRET_KEY。想让它长期生效,就把这两行写进 ~/.zshrc 或 ~/.bashrc。
代码里改用 os.getenv('BINANCE_API_KEY') 把值读出来,再传给 Client,密钥就完全不出现在源码中。
也可以用 .env 文件配合 python-dotenv 管理密钥,但务必把 .env 加入 .gitignore。
五、基础操作实战
1. 获取实时行情
查价格有两个方法,区别在于返回的详细程度:
| 方法 | 传入 | 返回的关键字段 |
|---|---|---|
get_symbol_ticker(symbol='BTCUSDT') | 交易对 | price——当前价 |
get_ticker(symbol='BTCUSDT') | 交易对 | highPrice、lowPrice、volume 等 24 小时统计 |
有个坑要先说:币安返回的所有价格、数量字段都是字符串,不是数字。参与计算前必须先用 float() 转换,否则会得到字符串拼接这种莫名其妙的结果。
2. 获取 K 线数据
调用 get_klines 方法,传入三个参数:
| 参数 | 填什么 | 示例 |
|---|---|---|
symbol | 交易对 | BTCUSDT |
interval | K 线周期 | Client.KLINE_INTERVAL_1HOUR |
limit | 获取根数 | 100(最大 1000) |
返回的是嵌套列表,每行 12 个字段,前 6 个是常用的:时间戳、开盘价、最高价、最低价、收盘价、成交量。
处理方式是用 pandas 的 DataFrame 包一层,给这 12 列起好名字,再把不用的列切掉只留前 6 个。最后把时间戳列用 pd.to_datetime() 转成可读时间(单位要指定为毫秒,币安返回的是 13 位时间戳),就能直接拿去做技术指标计算了。
3. 查询账户余额
调用 get_account()(API 需要读取权限),返回字典里的 balances 是一个列表,每个元素形如「资产名 + free + locked」三个字段:free 是可用余额,locked 是挂单冻结的部分。
想取某个币种,遍历这个列表匹配 asset 字段即可。注意币安会把所有币种都返回回来,其中绝大多数余额为 0,实际使用时通常会先过滤掉零余额再展示。
4. 下单交易
下单方法按「市价 / 限价」和「买 / 卖」组合成四个:
| 方法 | 必填参数 | 作用 |
|---|---|---|
order_market_buy | symbol、quantity | 市价买入,立即成交 |
order_market_sell | symbol、quantity | 市价卖出,立即成交 |
order_limit_buy | symbol、quantity、price | 限价买入,挂单等成交 |
order_limit_sell | symbol、quantity、price | 限价卖出,挂单等成交 |
下单成功后返回的字典里,orderId 是订单号,后续查询和撤单都要用它。市价单还会带一个 fills 列表,里面是实际成交明细,取第一笔的 price 就是成交价。
限价单挂出后不会立即成交,用 get_order() 传入 symbol 和 orderId 查状态,status 字段有四种取值:
| 状态值 | 含义 |
|---|---|
NEW | 已挂单,尚未成交 |
PARTIALLY_FILLED | 部分成交 |
FILLED | 完全成交 |
CANCELED | 已撤销 |
限价单的 price 参数要传字符串(比如 ‘70000.00’),传浮点数容易因为精度问题被服务器拒绝。
5. 获取历史订单
get_my_trades() 传入交易对和 limit,返回最近的成交记录列表。每条记录里 time 是毫秒时间戳,isBuyer 为 True 表示这笔是你买入,price 和 qty 分别是成交价和数量,commission 是手续费。遍历一遍就能做简单的交易流水统计。
六、两个实用策略示例
策略一:定投机器人
每天自动买入固定金额的 BTC,消除择时焦虑。整个逻辑只有四步:
- 取当前价 — 用
get_symbol_ticker拿到price,转成 float - 算买入量 — 定投金额 ÷ 当前价,结果用
round()保留 6 位小数(不同交易对精度要求不同,见第九节) - 市价买入 — 把算出的数量传给
order_market_buy - 异常兜底 — 整段包在 try / except 里,失败时打印原因并返回 None,别让脚本直接崩掉
把这四步写成一个函数(比如叫 dca_buy,参数是交易对和定投金额),存成 dca_bot.py。
定时执行交给系统的定时任务。Linux 下编辑 crontab 加一行规则:分钟填 0、小时填 10、后面三位都填星号,命令部分先 cd 到脚本目录再执行 python dca_bot.py,并用 >> 把输出追加到日志文件——含义就是每天早上 10:00 跑一次定投并留下记录。Windows 用「任务计划程序」配置等效规则。
策略二:移动止盈止损监控
当价格从最高点回落一定比例时自动卖出,锁定利润。
核心是维护一个「历史最高价」变量,在循环里不断刷新:
- 初始化 — 最高价设为 0,设定回撤阈值(比如 5%)和检查间隔(比如 60 秒)
- 循环取价 — 每轮拿一次最新价
- 刷新高点 — 当前价高于记录的最高价就更新它
- 算回撤 — (最高价 − 当前价)÷ 最高价 × 100,得到从高点回落的百分比
- 判断触发 — 回撤 ≥ 阈值就市价卖出并跳出循环;否则
time.sleep()等下一轮 - 异常处理 — except 里同样要 sleep 后 continue,而不是退出循环
有两个细节新手最容易忽略:卖出数量要实时查持仓,不能写死一个固定值;循环里的异常必须捕获,否则一次网络波动就会让监控悄悄停摆,而你还以为它在跑。
部署上建议放云服务器,用 nohup python trailing_stop.py & 让它在后台运行,关掉终端也不中断。
七、WebSocket 实时数据
REST API 请求有频率限制(每秒 20 次),实时行情应该用 WebSocket。
WebSocket 的思路和 REST 正好相反——不是你反复去问,而是服务器主动推给你。用法分三步:
- 写回调函数 — 定义一个函数接收消息,币安每推来一条数据就调用它一次。消息是字典,
e字段是事件类型(行情推送为24hrTicker),s是交易对,c是最新价 - 启动客户端 — 从
binance.websocket.spot.websocket_client导入客户端类,实例化后调用start() - 订阅频道 — 调用
ticker()方法,传入交易对和刚写好的回调函数
这里有个容易翻车的地方:订阅时交易对要用小写(btcusdt 而不是 BTCUSDT),跟 REST 接口的习惯相反。
另外订阅之后主线程不能退出,否则连接跟着断。测试阶段用一个 input() 挂住就行,正式运行时通常用 while 循环或专门的事件循环保持。结束时记得调用 stop() 关闭连接。
八、代码运行环境推荐
| 方案 | 适合场景 | 费用 |
|---|---|---|
| 本地电脑 | 测试和学习 | 免费(但不能关机) |
| 云服务器(VPS) | 长期运行定投/监控 | ~$5-10/月 |
| 云函数(AWS Lambda) | 定时任务(如定投) | 几乎免费 |
| 树莓派 | 家庭服务器运行 | 一次投入 |
新手推荐: 先用本地电脑跑通代码,确认策略有效后再部署到云服务器。
九、常见问题与避坑指南
频率限制(Rate Limit)
币安 API 有请求频率限制,超限会被暂时封禁:
| 接口类型 | 限制 |
|---|---|
| 普通请求 | 每分钟 1200 次 |
| 下单请求 | 每 10 秒 50 次 |
| WebSocket | 每个连接 5 次/秒 |
最佳实践:
- 行情数据用 WebSocket 接收,不用轮询
- 下单之间至少间隔 200ms
- 加上
time.sleep(0.1)避免触发限流
常见报错
| 错误 | 原因 | 解决方法 |
|---|---|---|
-2015 Invalid API-key | API Key 无效或 IP 不在白名单 | 检查 Key 和 IP 白名单 |
-1013 Filter failure: LOT_SIZE | 数量精度不匹配 | 用 get_symbol_info() 查询精度 |
-2010 Account has insufficient balance | 余额不足 | 检查账户 USDT 余额 |
精度问题处理
不同交易对的数量精度不同——BTC 能买 0.00001 个,有些币就必须是整数。下单数量小数位超标会直接报 LOT_SIZE 错误,这是新手最高频的报错之一。
自适应的做法是先查交易规则:调用 get_symbol_info(symbol),返回字典里的 filters 是一个规则列表,从中找出 filterType 等于 LOT_SIZE 的那一条,它的 stepSize 字段就是最小变动单位(比如 BTC 是 0.00001000)。
拿到 stepSize 后按小数点切开,取后半段、去掉末尾的 0,剩下的字符长度就是允许的小数位数。下单前用 round(数量, 位数) 处理一遍,就不会再触发 LOT_SIZE 报错。建议把这段写成一个工具函数,所有下单前都过一道。
十、进阶方向
当你掌握了以上基础,可以考虑以下进阶方向:
- 策略回测 — 用历史数据验证策略表现,使用
backtrader等框架 - 网格交易 — 利用 API 实现自定义网格(币安自带网格功能但定制有限)
- 跨交易所套利 — 在多个交易所之间捕捉价差
- 资金费率套利 — 结合现货和合约市场套取资金费率
- 机器学习预测 — 用 LSTM 等模型预测价格走势
💡 学习路径建议:先跑通定投脚本 → 加入移动止盈 → 回测验证 → 小资金实盘 → 逐步优化。不要一上来就写复杂策略,慢慢积累经验更安全。
总结
币安 API 为量化交易提供了坚实的基础设施,Python 生态让开发门槛大大降低。用本教程学到的知识,你完全可以搭建一个:
- ✅ 自动定投系统(消除择时焦虑)
- ✅ 移动止盈止损监控(自动锁定利润)
- ✅ 实时行情数据采集(数据分析基础)
- ✅ 自定义交易策略执行(灵活扩展)
记住量化交易的核心原则:策略 > 代码 > 收益预期。 先在小资金上验证策略,跑稳了再逐步加码。自动化不是让你赚快钱,而是让你执行纪律、减少情绪干扰。
🛡️ 量化不是万能的:市场极端行情下(闪崩、流动性枯竭),任何策略都可能失效。永远不要 All in 一个策略,永远留有余地。
📌 更多学习资源
想看更多币安功能与教程?欢迎访问 CoinVado 的币安专区,这里有更系统的教程、视频和最新资讯,帮助你在币圈少走弯路。
本文仅为技术教程分享,不构成任何投资建议。加密货币市场波动剧烈,量化交易存在策略失效、API 故障、网络延迟等风险。请充分了解风险后谨慎参与,切勿使用借贷资金进行量化交易。
