手动盯盘下单太累?想睡觉时也能自动交易?币安 API 能帮你实现——用 Python 代码获取行情、自动下单、跑策略,让机器替你执行。
但搜索「币安 API」的人,一半卡在同一个问题:这玩意儿安全吗,会不会把我的币转走? 先把结论说清楚:
- 资金安全看一个开关:API 权限里的「允许提现」是唯一能直接把币转走的权限,别开它,再绑上 IP 白名单,就算 Key 泄露,别人也转不走你的币。
- API 本身不亏钱,策略才会亏:API 只是执行工具,盈亏取决于你的策略。跑错代码、没设止损、遇到极端行情,才是量化真正亏钱的地方。
本文先讲安全避坑(权限怎么设、密钥怎么存),再教你用 Python 拉行情、自动下单、回测定投和移动止盈两个策略,最后给运行环境和常见报错,帮你看懂 API 值不值得用。
- 安全就一个开关:API 权限里别勾「允许提现」,再绑 IP 白名单,Key 泄露也转不走你的币。
- API 只是执行工具:它不帮你赚钱也不让你亏,盈亏取决于策略;真正的风险是代码 bug、没设止损和极端行情。
- 先测试再实盘:在币安官方测试网(testnet.binance.vision)跑通,再上小资金实盘。
🟧 还没有币安账号? 币安注册,邀请码 BT123,注册后按本文设置 API 权限即可开始。
一、量化交易是什么?适合什么样的人?
核心概念
量化交易就是用写好的程序(交易策略)自动执行买卖操作。人负责设计策略逻辑,机器负责执行。
手动交易 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 安装 python-binance | 币安 Python SDK,本文所有操作都靠它 |
| 用 pip 安装 pandas 和 numpy | 数据处理,K 线转表格、算指标要用 |
| 用 pip 安装 matplotlib | 绘图,回测时看资金曲线用得上 |
连接测试
从 binance.client 模块导入 Client 类,把 API Key 和 Secret Key 两个字符串按顺序传进去,得到一个客户端对象——后面所有操作都通过它发出。
验证是否连通,调用客户端的 get_system_status 方法。正常会返回一个字典,其中 msg 字段的值是 “System normal”。建议把这一步包在 try / except 里,连不上时把异常信息打印出来,方便区分到底是 Key 填错了、网络不通,还是 IP 没进白名单。
安全存储 API 密钥
不推荐:直接把密钥写在代码里(上传 GitHub 就泄露了)。
推荐方案——使用环境变量:
在终端用 export 命令把 BINANCE_API_KEY 环境变量设为你的密钥,Secret 同理设为 BINANCE_SECRET_KEY。想让它长期生效,就把这两行写进 ~/.zshrc 或 ~/.bashrc。
代码里改用 os.getenv 函数读取 BINANCE_API_KEY 环境变量的值,再传给 Client,密钥就完全不出现在源码中。
也可以用 .env 文件配合 python-dotenv 库管理密钥,但务必把 .env 加入 .gitignore。
五、基础操作实战
1. 获取实时行情
查价格有两个方法,区别在于返回的详细程度:
| 方法 | 传入 | 返回的关键字段 |
|---|---|---|
| get_symbol_ticker 方法(传入 BTCUSDT 交易对) | 交易对 | price——当前价 |
| get_ticker 方法(传入 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,转成浮点数
- 算买入量 — 定投金额 ÷ 当前价,结果用 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 命令让脚本在后台运行(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 用「请求权重(Weight)」计限,不同接口权重不同,累计超限会返回 HTTP 429,甚至暂时封禁 IP:
| 接口类型 | 大致限制(以官方文档为准) |
|---|---|
| 普通查询 | 每分钟约 1200 权重 |
| 下单类请求 | 每 10 秒约 50 次 |
| WebSocket | 每个连接约 5 次/秒 |
最佳实践:
- 行情数据用 WebSocket 推送,不要高频轮询
- 下单之间至少间隔 200ms
- 加 time.sleep(0.1) 短暂休眠,避免触发限流
先测试网跑通,再上实盘
币安提供官方测试网,模拟环境和真实账户隔离,代码写错也不动真钱:
| 市场 | 测试网地址 |
|---|---|
| 现货 | testnet.binance.vision |
| 合约 | testnet.binancefuture.com |
上线顺序:本地用测试网跑通 → 回测验证 → 小资金实盘 → 逐步加码。另外提醒一句:API Key 超过 90 天无活动会自动失效,长期不跑的机器人要定期登录刷新,用前先确认 Key 是否还能用。
常见报错
| 错误 | 原因 | 解决方法 |
|---|---|---|
| -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 方法(传入交易对),返回字典里的 filters 是一个规则列表,从中找出 filterType 等于 LOT_SIZE 的那一条,它的 stepSize 字段就是最小变动单位(比如 BTC 是 0.00001000)。
拿到 stepSize 后按小数点切开,取后半段、去掉末尾的 0,剩下的字符长度就是允许的小数位数。下单前用 round 函数(传入数量和允许的小数位数)处理一遍,就不会再触发 LOT_SIZE 报错。建议把这段写成一个工具函数,所有下单前都过一道。
十、进阶方向
当你掌握了以上基础,可以考虑以下进阶方向:
- 策略回测 — 用历史数据验证策略表现,使用 backtrader 等框架
- 网格交易 — 利用 API 实现自定义网格(币安自带网格功能但定制有限)
- 跨交易所套利 — 在多个交易所之间捕捉价差
- 资金费率套利 — 结合现货和合约市场套取资金费率
- 机器学习预测 — 用 LSTM 等模型预测价格走势
💡 学习路径建议:先跑通定投脚本 → 加入移动止盈 → 回测验证 → 小资金实盘 → 逐步优化。不要一上来就写复杂策略,慢慢积累经验更安全。
总结
币安 API 为量化交易提供了坚实的基础设施,Python 生态让开发门槛大大降低。用本教程学到的知识,你完全可以搭建一个:
- ✅ 自动定投系统(消除择时焦虑)
- ✅ 移动止盈止损监控(自动锁定利润)
- ✅ 实时行情数据采集(数据分析基础)
- ✅ 自定义交易策略执行(灵活扩展)
记住量化交易的核心原则:策略 > 代码 > 收益预期。 先在小资金上验证策略,跑稳了再逐步加码。自动化不是让你赚快钱,而是让你执行纪律、减少情绪干扰。
🛡️ 量化不是万能的:市场极端行情下(闪崩、流动性枯竭),任何策略都可能失效。永远不要 All in 一个策略,永远留有余地。
📌 更多学习资源
想看更多币安功能与教程?欢迎访问 CoinVado 的币安专区,这里有更系统的教程、视频和最新资讯,帮助你在币圈少走弯路。
本文仅为技术教程分享,不构成任何投资建议。加密货币市场波动剧烈,量化交易存在策略失效、API 故障、网络延迟等风险。请充分了解风险后谨慎参与,切勿使用借贷资金进行量化交易。
链上指南