手动盯盘下单太累?想睡觉时也能自动交易?币安 API 可以帮你实现——通过几行 Python 代码,就能获取实时行情、自动下单、设置策略,让机器为你执行交易。
本教程将从零开始,带你掌握币安 API 量化交易的基础技能。
⚠️ 前置条件:你需要一个已完成 KYC 的币安账号。还没有?立即注册,填写邀请码 GMVOGIBL 享 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(密钥只显示一次,丢失需重新生成)
安全设置建议
1
2
3
4
| ⚠️ 以下设置建议全部开启:
□ IP 白名单 → 限制只有你的服务器 IP 能调用
□ 不允许提现 → 必须关闭(默认关闭,确认一下)
□ 限制访问时间 → 按需设置
|
注意:Secret Key 要像密码一样保管,不要上传到 GitHub 或分享给任何人。
四、环境搭建
安装 Python 环境
1
2
3
4
5
6
7
8
| # 检查 Python 版本(需 3.7+)
python --version
# 安装币安 Python SDK
pip install python-binance
# 安装辅助库(数据处理和可视化)
pip install pandas numpy matplotlib
|
连接测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| from binance.client import Client
# 填入你的 API Key 和 Secret Key
api_key = '你的_API_KEY'
api_secret = '你的_SECRET_KEY'
# 初始化客户端
client = Client(api_key, api_secret)
# 测试连接
try:
status = client.get_system_status()
print(f'连接成功!系统状态:{status["msg"]}') # 正常返回 "System normal"
except Exception as e:
print(f'连接失败:{e}')
|
安全存储 API 密钥
不推荐:直接把密钥写在代码里(上传 GitHub 就泄露了)。
推荐方案——使用环境变量:
1
2
3
| # 终端设置环境变量(或写入 ~/.zshrc)
export BINANCE_API_KEY='你的API_KEY'
export BINANCE_SECRET_KEY='你的SECRET_KEY'
|
1
2
3
4
5
6
7
| import os
from binance.client import Client
client = Client(
os.getenv('BINANCE_API_KEY'),
os.getenv('BINANCE_SECRET_KEY')
)
|
也可以用 .env 文件配合 python-dotenv 管理密钥,但务必把 .env 加入 .gitignore。
五、基础操作实战
1. 获取实时行情
1
2
3
4
5
6
7
8
9
| # 获取 BTC/USDT 当前价格
ticker = client.get_symbol_ticker(symbol='BTCUSDT')
print(f'BTC/USDT 当前价格:{ticker["price"]} USDT')
# 获取 24 小时统计
stats = client.get_ticker(symbol='BTCUSDT')
print(f'24h 最高价:{stats["highPrice"]}')
print(f'24h 最低价:{stats["lowPrice"]}')
print(f'24h 成交量:{stats["volume"]} BTC')
|
2. 获取 K 线数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| import pandas as pd
# 获取 BTC/USDT 最近 100 根 1 小时 K 线
klines = client.get_klines(
symbol='BTCUSDT',
interval=Client.KLINE_INTERVAL_1HOUR,
limit=100
)
# 转换为 DataFrame
columns = ['timestamp', 'open', 'high', 'low', 'close', 'volume',
'close_time', 'quote_asset_volume', 'trades',
'taker_buy_volume', 'taker_quote_volume', 'ignore']
df = pd.DataFrame(klines, columns=columns)
# 只用关键列
df = df[['timestamp', 'open', 'high', 'low', 'close', 'volume']]
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
print(df.tail())
|
3. 查询账户余额
1
2
3
4
5
6
7
8
| # 获取账户信息(需要 API 有读取权限)
account = client.get_account()
# 获取 USDT 余额
balances = account['balances']
usdt_balance = next(b for b in balances if b['asset'] == 'USDT')
print(f'USDT 可用余额:{float(usdt_balance["free"])}')
print(f'USDT 锁定余额:{float(usdt_balance["locked"])}')
|
4. 下单交易
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| # 市价买入 0.001 BTC
order = client.order_market_buy(
symbol='BTCUSDT',
quantity=0.001
)
print(f'订单号:{order["orderId"]}')
print(f'成交均价:{order["fills"][0]["price"]}')
# 限价卖出(挂单)
order = client.order_limit_sell(
symbol='BTCUSDT',
quantity=0.001,
price='70000.00'
)
print(f'限价单已挂出,订单号:{order["orderId"]}')
# 查询订单状态
status = client.get_order(
symbol='BTCUSDT',
orderId=order['orderId']
)
print(f'订单状态:{status["status"]}') # FILLED / NEW / PARTIALLY_FILLED / CANCELED
|
5. 获取历史订单
1
2
3
4
5
| # 获取最近 10 笔已成交订单
trades = client.get_my_trades(symbol='BTCUSDT', limit=10)
for t in trades:
print(f'{t["time"]} | {"买" if t["isBuyer"] else "卖"} | '
f'价格:{t["price"]} | 数量:{t["qty"]}')
|
六、两个实用策略示例
策略一:定投机器人
每天自动买入固定金额的 BTC,消除择时焦虑:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| import time
from datetime import datetime
def dca_buy(symbol='BTCUSDT', amount_usdt=50):
"""每日定投指定金额"""
try:
# 获取当前价格,确认非异常
price = float(client.get_symbol_ticker(symbol=symbol)['price'])
print(f'[{datetime.now()}] 当前 {symbol} 价格:{price} USDT')
# 计算买入数量 = 金额 / 价格
quantity = round(amount_usdt / price, 6)
# 执行市价买入
order = client.order_market_buy(
symbol=symbol,
quantity=quantity
)
print(f'✅ 定投成功:花费 {amount_usdt} USDT,买入 {quantity} {symbol}')
return order
except Exception as e:
print(f'❌ 定投失败:{e}')
return None
# 配合定时任务(cron / 系统任务计划器)每天执行一次
dca_buy('BTCUSDT', amount_usdt=50)
|
配合 Linux crontab 实现定时运行:
1
2
| # 每天早上 10 点执行定投
0 10 * * * cd /path/to/script && python dca_bot.py >> dca_log.txt
|
策略二:移动止盈止损监控
当价格从最高点回落一定比例时自动卖出,锁定利润:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
| import time
def trailing_stop(symbol, trail_percent=5, check_interval=60):
"""移动止盈止损监控"""
highest_price = 0
print(f'启动移动止盈止损:{symbol},回撤 {trail_percent}% 触发')
while True:
try:
ticker = client.get_symbol_ticker(symbol=symbol)
current_price = float(ticker['price'])
# 更新历史最高价
if current_price > highest_price:
highest_price = current_price
print(f'📈 新高:{highest_price} USDT')
# 计算从最高点的回撤幅度
drawdown = (highest_price - current_price) / highest_price * 100
if drawdown >= trail_percent:
# 回撤到位,触发卖出
quantity = get_balance(symbol.replace('USDT', ''))
if quantity > 0:
order = client.order_market_sell(
symbol=symbol,
quantity=quantity
)
print(f'🔔 触发卖出!回撤 {drawdown:.2f}%,成交价 {current_price}')
break
else:
print('没有可卖仓位')
break
time.sleep(check_interval)
except Exception as e:
print(f'监控异常:{e}')
time.sleep(check_interval)
# 用法
trailing_stop('BTCUSDT', trail_percent=5, check_interval=30)
# 建议:在云服务器上运行,保持终端不断开
# 或者使用 nohup:nohup python trailing_stop.py &
|
七、WebSocket 实时数据
REST API 请求有频率限制(每秒 20 次),实时行情应该用 WebSocket:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| from binance.websocket.spot.websocket_client import SpotWebsocketClient as WebsocketClient
def handle_message(msg):
"""WebSocket 消息回调"""
if msg.get('e') == '24hrTicker':
print(f'{msg["s"]} 当前价格:{msg["c"]} USDT')
# 初始化 WebSocket 客户端
ws_client = WebsocketClient()
ws_client.start()
# 订阅 BTC/USDT 实时行情
ws_client.ticker(
symbol='btcusdt',
callback=handle_message,
)
# 让程序一直运行
input('按回车停止...')
ws_client.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 余额 |
精度问题处理
不同交易对的数量精度不同,可以用代码自适应:
1
2
3
4
5
6
7
8
9
10
11
12
13
| def get_precision(symbol):
"""获取交易对的数量精度"""
info = client.get_symbol_info(symbol)
for f in info['filters']:
if f['filterType'] == 'LOT_SIZE':
step_size = float(f['stepSize'])
precision = len(str(step_size).split('.')[-1].rstrip('0'))
return precision
return 8
# 使用示例
precision = get_precision('BTCUSDT')
quantity = round(0.00123456, precision)
|
十、进阶方向
当你掌握了以上基础,可以考虑以下进阶方向:
- 策略回测 — 用历史数据验证策略表现,使用
backtrader 等框架 - 网格交易 — 利用 API 实现自定义网格(币安自带网格功能但定制有限)
- 跨交易所套利 — 在多个交易所之间捕捉价差
- 资金费率套利 — 结合现货和合约市场套取资金费率
- 机器学习预测 — 用 LSTM 等模型预测价格走势
💡 学习路径建议:先跑通定投脚本 → 加入移动止盈 → 回测验证 → 小资金实盘 → 逐步优化。不要一上来就写复杂策略,慢慢积累经验更安全。
总结
币安 API 为量化交易提供了坚实的基础设施,Python 生态让开发门槛大大降低。用本教程学到的知识,你完全可以搭建一个:
- ✅ 自动定投系统(消除择时焦虑)
- ✅ 移动止盈止损监控(自动锁定利润)
- ✅ 实时行情数据采集(数据分析基础)
- ✅ 自定义交易策略执行(灵活扩展)
记住量化交易的核心原则:策略 > 代码 > 收益预期。 先在小资金上验证策略,跑稳了再逐步加码。自动化不是让你赚快钱,而是让你执行纪律、减少情绪干扰。
🛡️ 量化不是万能的:市场极端行情下(闪崩、流动性枯竭),任何策略都可能失效。永远不要 All in 一个策略,永远留有余地。
📌 更多学习资源
想了解更多加密货币知识和实操技巧?欢迎访问 CoinVado - 新手进入链上资产世界的第一站,这里有更系统的教程、视频和最新资讯,帮助你在币圈少走弯路。
📌 免责声明
本文仅为技术教程分享,不构成任何投资建议。加密货币市场波动剧烈,量化交易存在策略失效、API 故障、网络延迟等风险。请充分了解风险后谨慎参与,切勿使用借贷资金进行量化交易。