📖 目录导读
- 欧易API接口基础认知 – 什么是API?为什么要用欧易API?
- 申请欧易API接口的完整步骤 – 手把手教你搞定权限与密钥
- Python环境配置与依赖库安装 – 写好脚本的第一步
- 初识欧易API:用Python获取实时行情数据 – 第一个实战脚本
- 编写简单交易脚本:实现自动买入卖出 – 你的量化交易初体验
- 常见问题与问答(FAQ) – 解决你90%的坑
- 安全与优化建议 – 上生产环境前必看
欧易API接口基础认知:为什么交易者都在用它?
很多刚开始接触加密货币交易的朋友,可能还停留在手动点鼠标的阶段,但如果你想做自动化交易、网格策略或者高频搬砖,那必须用到交易所的API接口。

欧易(OKX)交易所提供了非常完善的API文档,支持REST和WebSocket两种方式,通过API,你可以:
- 获取实时K线数据
- 管理订单(下单、撤单)
- 查询账户余额
- 甚至实现程序化风控
一句话总结:欧易API就是机器和交易所之间的“电话线”,你用Python打过去,欧易服务器就会按指令做事。
如果你还没有欧易账户,建议先去欧易交易所下载完成注册和KYC认证,这是使用API的前提。
申请欧易API接口的完整步骤(建议截图保存)
这一步非常关键,因为权限设置错了,脚本跑起来要么报错,要么资金不安全。
操作路径: 欧易官网 → 个人中心 → API管理 → 创建API
具体步骤:
- 登录你的欧易账户,进入“账户” → “我的API”(在安全设置里)。
- 点击 “创建API” 按钮,系统会让你选择类型:
- 交易API:用于下单、撤单(最常用)
- 读取API:仅查看行情和账户(不能交易)
- 设置权限: 建议先勾选“读取”和“交易”,但不要勾选“提现”(防黑)。
- 绑定IP地址(强烈推荐): 填写你服务器或运行脚本的固定公网IP,这样就算API Key泄露,别人也无法从其他IP调用。
- 设置标签与密码: 给你的API起个名字(量化测试”),然后设置一个独立的交易密码(注意,这不是你的登录密码)。
- 保存密钥: 创建成功后,你会看到两样东西:
- API Key(类似用户名)
- Secret Key(类似密码,只显示一次!一定要复制到本地文件,网页不会再次显示)
⚠️ 重要提醒: Secret Key就像你的银行卡密码,不要明文写在代码里,更不要传到GitHub,建议用环境变量或配置文件管理。
Python环境配置与依赖库安装
假设你已经装了Python 3.7+,我们只需要几个轻量级库:
pip install requests pip install python-dotenv # 可选,用于管理环境变量 pip install hashlib hmac base64 time json # 这些是Python内置库,不用pip
欧易官方提供了Python SDK,但说实话有点重,我更推荐直接用requests库手动签名调用,更灵活,也更理解底层逻辑。
初识欧易API:用Python获取实时行情数据
写第一个脚本感受一下,我们要调用欧易的公开行情接口(无需API Key),获取BTC/USDT的最新价格。
import requests
# 欧易公开行情API端点(无需密钥)
url = "https://www.okx.com/api/v5/market/ticker?instId=BTC-USDT"
response = requests.get(url)
data = response.json()
if data.get("code") == "0":
ticker = data["data"][0]
print(f"最新价: {ticker['last']}")
print(f"24h最高: {ticker['high24h']}")
print(f"24h最低: {ticker['low24h']}")
print(f"24h成交量: {ticker['vol24h']}")
else:
print("数据获取失败:", data["msg"])
跑一下,你会看到类似这样的输出:
最新价: 72500.23
24h最高: 73100.00
24h最低: 71000.50
24h成交量: 28934.5678
这就是你的第一个“量化脚本”——虽然只是看看价格,但已经迈出了第一步,继续往下,我们让它真正交易起来。
编写简单交易脚本:实现自动买入卖出
我们写一个最简单的策略:当价格比5分钟前上涨超过1%时,用市价买入0.001个BTC;当价格下跌超过1%时,市价卖出。
完整脚本如下(注意安全处理):
import requests
import time
import hmac
import hashlib
import base64
from datetime import datetime
# 从环境变量读取(不要硬编码!)
API_KEY = os.getenv("OKX_API_KEY")
SECRET_KEY = os.getenv("OKX_SECRET_KEY")
PASSPHRASE = os.getenv("OKX_PASSPHRASE")
def get_timestamp():
return datetime.utcnow().isoformat()[:-3] + "Z"
def sign_request(method, request_path, body=""):
timestamp = get_timestamp()
message = timestamp + method.upper() + request_path + (json.dumps(body) if body else "")
mac = hmac.new(bytes(SECRET_KEY, encoding='utf-8'), bytes(message, encoding='utf-8'), digestmod=hashlib.sha256)
d = base64.b64encode(mac.digest())
return d.decode('utf-8'), timestamp
def place_order(side, sz):
"""下单函数:side= 'buy' 或 'sell', sz=数量"""
endpoint = "/api/v5/trade/order"
body = {
"instId": "BTC-USDT",
"tdMode": "cash", # 现货交易
"side": side,
"ordType": "market", # 市价单
"sz": str(sz)
}
signature, timestamp = sign_request("POST", endpoint, body)
headers = {
"OK-ACCESS-KEY": API_KEY,
"OK-ACCESS-SIGN": signature,
"OK-ACCESS-TIMESTAMP": timestamp,
"OK-ACCESS-PASSPHRASE": PASSPHRASE,
"Content-Type": "application/json"
}
url = "https://www.okx.com" + endpoint
response = requests.post(url, headers=headers, json=body)
return response.json()
# 主循环:简单的一价触发策略
while True:
# 获取当前价格
price_url = "https://www.okx.com/api/v5/market/ticker?instId=BTC-USDT"
current_ticker = requests.get(price_url).json()["data"][0]
current_price = float(current_ticker["last"])
# 5分钟前价格(这里用24h前开盘简化演示,实际需缓存历史)
# 真正实现需要循环记录,此处仅做示例
# 策略逻辑:如果当前价 > 买入前价格*0.99(跌1%)就买,否则不操作
# 注意:简易demo,请勿用大资金测试
if "last_price" not in dir():
last_price = current_price
prev_price = current_price
# 判断涨跌幅
change_pct = (current_price - prev_price) / prev_price * 100
print(f"[{datetime.now().strftime('%H:%M:%S')}] 当前: {current_price} 变动: {change_pct:.2f}%")
if change_pct > 1:
result = place_order("buy", 0.001)
print("买入指令发送:", result)
elif change_pct < -1:
result = place_order("sell", 0.001)
print("卖出指令发送:", result)
prev_price = current_price
time.sleep(60) # 每分钟检查一次
运行前的检查清单:
- 确保API Key具有“交易”权限
- 账户有足够的USDT和BTC
- 先在小金额测试(比如0.0001个BTC)
你可以看到,整个逻辑很简单:获取价格 → 对比变化 → 触发买卖,实际量化交易要复杂得多(仓位管理、止损、避免滑点),但核心框架就是这个。
如果你想进一步了解关于欧易API接口申请的更多高级用法(比如合约交易、WebSocket实时流),可以参考欧易官方文档,或者留意我在欧易交易所下载页面的后续教程更新。
常见问题与问答(FAQ)
Q1:我总是报错“signature mismatch”签名不匹配,怎么办?
A: 90%的情况是时间戳问题,检查你的服务器时间是否和网络时间同步(NTP同步),注意签名时body的格式是否和文档一致,比如空body不能传要传空字符串。
Q2:市价单滑点严重怎么办?
A: 如果你不知道市场深度,建议用“限价单”(ordType: "limit")并设置一个合理的价格,在策略里加一个“挂单超时撤单”逻辑会更稳健。
Q3:脚本跑着跑着突然断连了?
A: 欧易API有频率限制(通常是每秒20次),在代码里加time.sleep(0.1)防止触达限流,WebSocket方式比轮询更稳定。
Q4:如何用欧易API查看历史K线?
A: 用/api/v5/market/history-candles这个端点,支持传入bar参数(1m/5m/15m等),可以参考欧易官网的API文档。
Q5:用这个脚本能稳定盈利吗?
A: 这个脚本只是一个教学演示,用了最简单的固定比例触发策略,实盘交易需要结合技术指标、资金管理、回测验证。过去表现不代表未来收益,量化交易有风险,请用闲钱尝试。
安全与优化建议(写给打算上线的你)
如果你打算把这个脚本跑在服务器上,以下几点必须注意:
- 密钥管理:使用
.env文件或云服务(如AWS Secret Manager),不要直接写代码里。 - IP白名单:在欧易API后台绑定固定IP,如果不确定,设为“无限制”但配合密钥复杂度。
- 日志记录:每次下单都记录到本地log,方便复盘。
- 熔断机制:如果连续亏损超过n%,自动停掉所有策略。
- 测试环境:欧易有模拟盘API(模拟金),建议先在那边跑熟再上实盘。
搭建一个完整的量化系统是个不小的工程,建议你从简单的“自动定投”或“价格预警”开始,等理解了API的每个参数,再挑战更复杂的策略。
如果你在申请欧易API过程中遇到问题,或者在欧易交易所下载页面找不到入口,欢迎在评论区留言,我会逐一回复,但请注意,本教程不构成任何投资建议,市场有风险,决策需谨慎。
好了,这篇文章从零开始带你走完了申请欧易API、配置环境、编写第一个Python交易脚本的全流程,希望你现在就能打开电脑跟着敲一遍代码——哪怕是先跑个行情数据打印,也是一种进步,量化交易的大门已经为你打开,剩下的交给时间与实践。
标签: Python自动化交易