目录导读
- 欧易API接口概述
- API申请与密钥获取步骤
- Python环境搭建与依赖库安装
- 编写第一个交易脚本:获取账户信息
- 进阶实战:实现限价单下单
- 常见问题与解答
- 风险提示与合规建议
欧易API接口概述
欧易交易所(OKX)作为全球领先的数字资产交易平台,提供了功能完善的API接口,支持用户通过编程方式实现自动化交易、行情监控、资产管理等操作,对于量化交易爱好者或需要提升交易效率的投资者而言,掌握API调用是必备技能。

核心优势:
- 支持REST API与WebSocket实时数据流
- 提供现货、合约、杠杆等全品类交易接口
- 完善的签名认证机制保障账户安全
- 官方文档详尽,社区资源丰富
在开始教程前,请先确保您已完成欧易交易所下载并注册账号,同时完成KYC身份认证。
API申请与密钥获取步骤
1 登录开发者中心
- 访问欧易官网并登录您的账户
- 点击右上角头像 → “API”进入管理页面
- 首次使用需阅读并同意《API使用协议》
2 创建API密钥
- 点击“创建API Key”按钮
- 输入备注名称(建议标识用途,如“Python交易脚本”)
- 选择权限:至少勾选“读取”和“交易”
- 重要:务必开启“IP白名单”功能,仅允许您的服务器或本地IP访问
- 完成谷歌二次验证后,系统将生成:
- API Key(公钥)
- Secret Key(私钥,仅显示一次,请立即保存至安全位置)
Python环境搭建与依赖库安装
1 环境要求
- Python 3.8及以上版本
- pip包管理器
2 安装必要库
pip install requests hashlib hmac base64 json time
推荐直接安装欧易官方封装的SDK:
pip install okx-py-sdk
3 测试环境准备
建议先在模拟盘(Demo Trading)进行测试,避免因代码错误造成真实资金损失,模拟盘API域名与主网不同,请参考官方文档获取测试域名。
编写第一个交易脚本:获取账户信息
1 完整代码示例
import requests
import hmac
import hashlib
import base64
import json
import time
# 配置参数
api_key = "YOUR_API_KEY"
secret_key = "YOUR_SECRET_KEY"
passphrase = "YOUR_PASSPHRASE"
base_url = "https://www.okx.com"
# 生成签名
def generate_signature(timestamp, method, request_path, body):
message = f"{timestamp}{method}{request_path}{body}"
mac = hmac.new(secret_key.encode(), message.encode(), hashlib.sha256)
return base64.b64encode(mac.digest()).decode()
# 获取账户信息
def get_account_info():
timestamp = str(time.time())
method = "GET"
request_path = "/api/v5/account/balance"
body = ""
signature = generate_signature(timestamp, method, request_path, body)
headers = {
"OK-ACCESS-KEY": api_key,
"OK-ACCESS-SIGN": signature,
"OK-ACCESS-TIMESTAMP": timestamp,
"OK-ACCESS-PASSPHRASE": passphrase,
"Content-Type": "application/json"
}
response = requests.get(f"{base_url}{request_path}", headers=headers)
return response.json()
# 执行查询
if __name__ == "__main__":
result = get_account_info()
print(json.dumps(result, indent=2, ensure_ascii=False))
2 运行说明
将上述代码中的YOUR_API_KEY、YOUR_SECRET_KEY、YOUR_PASSPHRASE替换为您在欧易交易所下载后创建的API密钥信息,运行后应返回账户总权益、可用余额等数据。
进阶实战:实现限价单下单
1 下单函数封装
def place_order(inst_id, side, ord_type, sz, px=None):
"""
参数说明:
- inst_id: 交易对,如"BTC-USDT"
- side: "buy" 或 "sell"
- ord_type: "limit"(限价)或 "market"(市价)
- sz: 数量
- px: 价格(限价单必填)
"""
timestamp = str(time.time())
method = "POST"
request_path = "/api/v5/trade/order"
body_params = {
"instId": inst_id,
"side": side,
"ordType": ord_type,
"sz": str(sz)
}
if px:
body_params["px"] = str(px)
body = json.dumps(body_params)
signature = generate_signature(timestamp, method, request_path, body)
headers = {
"OK-ACCESS-KEY": api_key,
"OK-ACCESS-SIGN": signature,
"OK-ACCESS-TIMESTAMP": timestamp,
"OK-ACCESS-PASSPHRASE": passphrase,
"Content-Type": "application/json"
}
response = requests.post(f"{base_url}{request_path}", data=body, headers=headers)
return response.json()
# 示例:以25000 USDT买入0.01 BTC限价单
print(place_order("BTC-USDT", "buy", "limit", 0.01, 25000))
2 异常处理建议
- 添加重试机制(网络波动时自动重试2-3次)
- 检查返回的
code字段,常见错误码如51000(参数错误)、51100(交易冻结) - 日志记录所有交易行为,便于事后审计
常见问题与解答
Q1:API密钥如何保障安全?
A:
- 切勿将密钥上传至公共代码仓库(如GitHub)
- 使用环境变量存储密钥:
os.environ["API_KEY"] - 定期更换密钥,并关闭不再使用的API权限
- 设置IP白名单,仅允许可信IP调用
Q2:为什么返回“Signature not match”?
A:
最常见原因是服务器时间与API时间戳差异超过30秒,解决方案:
- 同步本地时间:
ntpdate ntp.aliyun.com - 使用
time.time()生成时间戳 - 检查签名计算中是否包含正确的方法名和请求路径
Q3:交易脚本能否在移动端运行?
A:
可以,但建议在PC或服务器上运行,若需移动端使用,可考虑:
- 在云服务器部署脚本,通过手机远程控制
- 使用Pythonista(iOS)或Termux(Android)等终端模拟器
Q4:限价单未成交如何处理?
A:
可轮询检查订单状态,或使用WebSocket订阅订单更新事件,示例轮询代码:
def check_order(order_id):
# 构造查询请求
request_path = f"/api/v5/trade/order?instId=BTC-USDT&ordId={order_id}"
# 其余逻辑参考get_account_info函数
风险提示与合规建议
- 模拟盘验证:所有脚本务必先在欧易模拟盘运行至少24小时,确认无误后再切换至实盘
- 资金控制:设置单笔最大金额、日亏损上限等风控参数
- API频率限制:欧易REST API每秒限制50次请求,高频交易需合理设计调用间隔
- 法律合规:不同国家和地区对自动化交易监管政策不同,请确保脚本符合当地法规
延伸阅读:如需更复杂的策略(如网格交易、套利策略),建议参考欧易官方GitHub仓库中的Python示例,或加入开发者社区交流,通过本教程,您已具备使用欧易API接口申请教程编写基本交易脚本的能力,下一步可尝试结合技术指标实现量化策略。
标签: 欧易API Python交易脚本