我用 3 行 Python 连接 Crypto Exchange API
Source: Dev.to
(请提供您希望翻译的正文内容,我将为您翻译成简体中文。)
我需要连接加密交易所来构建交易机器人
API 听起来令人生畏。然后我安装了一个 Python 库,用三行代码就获取了我的余额。从那里到实际下单并不困难。
以下是完整的路径——从创建账户到在 Python 中下第一笔订单,包含我一路上犯的所有错误。
API 密钥到底是什么?
它是一个密码,允许你的代码直接与交易所通信,而无需登录网站。你把这个密钥交给你的 Python 脚本,代码就能立刻:
- 检查余额
- 获取价格数据
- 下单
为什么要这么做? 手动交易意味着要 24/7 盯着图表。你会因为睡觉而错过凌晨 3 点的暴跌,或者因为“也许会涨得更高”而持仓太久。API 让你可以把这项工作交给机器人。
选择交易所
对于自动交易来说,费用比其他任何因素都更重要。当你的机器人每月交易十次时,0.1 % 的费用差异在一年内会累积。
| 交易所 | Maker 费用 | 全球可访问性 | ccxt 支持 |
|---|---|---|---|
| MEXC | 0 %(现货) | 是 | 是 |
| Bitget | 0.1 % | 是 | 是 |
| OKX | 0.08 % | 是 | 是 |
我在 Bitget 上运行我的机器人,但如果今天重新开始,我会选择 MEXC —— 现货 Maker 费用为零。对于自动交易的机器人来说,这就是不落在桌面上的免费收益。创建账户免费,约需五分钟。
创建您的 API 密钥
拥有账户后:
- 登录 → 个人资料图标 → API 管理
- 点击 “Create API Key”(创建 API 密钥)
- 权限:启用 Read(读取)和 Trade(交易)。 Leave Withdraw OFF(保持提现关闭)——务必不要打开此项。
- 复制 API 密钥和密钥(secret)
将它们保存到项目根目录的 .env 文件中:
API_KEY=your_api_key_here
API_SECRET=your_secret_here在首次提交之前,将 .env 添加到 .gitignore 中。如果你把 API 密钥推送到 GitHub,恭喜你——你已经把交易所凭证公开到了整个互联网。
连接 ccxt
ccxt 是一个 Python 库,使用统一的接口即可对接 100 多家交易所。你为 MEXC 编写的代码同样适用于 Bitget、Binance、OKX —— 语法完全一致。
pip install ccxt python-dotenv获取余额(三行代码)
import ccxt
import os
from dotenv import load_dotenv
load_dotenv()
exchange = ccxt.mexc({
'apiKey': os.getenv('API_KEY'),
'secret': os.getenv('API_SECRET'),
'enableRateLimit': True, # 自动限制请求频率
})
# 实际工作——三行代码
balance = exchange.fetch_balance()
usdt = balance['USDT']['total']
print(f'USDT balance: {usdt}')就这样。它可以工作。
enableRateLimit: True 告诉 ccxt 自动限流请求。如果不启用,你会过快地请求 API,导致 429 错误。
获取K线数据
ohlcv = exchange.fetch_ohlcv('BTC/USDT', '1d', limit=30)
# → [[timestamp, open, high, low, close, volume], ...]一行代码即可获取最近 30 天的日线 K 线。将其放入 pandas DataFrame,计算你的指标,就拥有了交易机器人雏形。
Source: …
首次下单
不要一开始就使用真实资金。 首先构建一个 DRY_RUN 模式。你的代码会走完整个流程——获取价格、计算信号、决定是否买入——但会跳过实际发送订单的最后一步。
在 DRY_RUN 模式下运行一周。如果没有出现异常情况,再以极小的金额(例如 $1 USDT)切换到实盘。
# Market buy
if not DRY_RUN:
order = exchange.create_market_buy_order('BTC/USDT', amount)
print(f'Order placed: {order["id"]}')
else:
print(f'[DRY_RUN] Skipping order: BTC/USDT {amount}')简单。使用 create_market_buy_order 下市价单,使用 create_limit_buy_order 下限价单。ccxt 把各交易所的差异抽象掉,所以为 MEXC 编写的代码理论上也能在 Bitget 上运行(实际使用中偶尔会有小差异,但大多数情况下都能正常工作)。
让我卡住的地方
| 问题 | 发生了什么 | 解决方案 / 缓解措施 |
|---|---|---|
| 速率限制 | 在开发期间在紧密循环中调用 API,导致即使使用 enableRateLimit 仍出现 429 错误。 | 保持大约每秒 1 次请求,或在循环中显式加入 time.sleep(1)。 |
| 已启用提现权限 | 在创建第一个密钥时不小心打开了提现功能。 | 保持提现 关闭。如果开启了,请立即重新生成密钥。 |
将 .env 提交到 git | 将 API 密钥推送到公开仓库。 | 在首次提交之前将 .env 添加到 .gitignore。如果已经推送,请撤销该密钥并重新生成一个。 |
| 时间戳漂移 | 电脑时钟偏差几分钟 → InvalidNonce / Timestamp outside recv_window。 | 启用 NTP 时间同步(例如在 Linux 上运行 ntpdate pool.ntp.org)。 |
| 最小订单金额 | 尝试在 Bitget 下 $1 的订单,结果静默失败。 | 检查每个交易所的最小订单规模(Bitget 现货 BTC/USDT 大约 $5,MEXC 大约 $1)。 |
如果你还没有交易所账户,可以在此创建。在运行机器人时,零手续费确实能带来显著差异。
总结
API 访问比我预期的要容易得多。ccxt 处理了繁琐的部分——身份验证、速率限制、交易所特有的怪癖——这样你就可以专注于策略本身。祝编码愉快,理性交易!
快速设置检查清单
- Withdrawal permissions → OFF
.env→ 永不提交到 Git- Start with
DRY_RUN - First live test → $1 USDT
一旦你让它正常工作,下一步就是编写交易逻辑:计算技术指标、生成信号并执行交易。我最初使用 EMA Crossover 策略——这另有篇文章详述。
本文基于个人经验。非金融建议——请自行承担风险,仅使用可承受损失的资金进行交易。本文包含联盟链接。