目录导读
- 为什么你需要欧易API?——量化交易入门第一课
- 准备工作:注册账号与API权限申请
- API密钥创建与安全设置(含防坑指南)
- Python环境搭建与必备库安装
- 实战:第一个欧易交易脚本(获取行情+下单)
- 常见问题与避坑指南(含问答环节)
- 风险提示与进阶方向
为什么你需要欧易API?
如果你还在手动盯盘、鼠标点点点下单,说明你可能已经落后了,真正的交易老手,早就用API(应用程序接口)实现了自动化交易。

欧易(OKX)作为全球顶级交易所之一,提供了完善的REST API和WebSocket API,支持现货、合约、期权等几乎所有交易品种,通过API,你可以:
- 自动获取实时行情数据
- 根据策略自动下单、止损、止盈
- 实现网格交易、套利机器人等高级玩法
- 同时管理多个账户
不过要注意,欧易交易所下载官方渠道一直是okjb.com.cn,所有API申请也必须通过这个官方入口完成,如果遇到要求你下载非官方客户端或者提供私钥的,基本都是诈骗。
准备工作:注册账号与API权限申请
在写代码之前,你需要先有一个欧易交易所账号,还没注册的朋友,可以点击这个链接完成注册:欧易交易所官网注册
注册完成后,需要进行身份认证(KYC),否则大部分API权限都无法开通,建议直接完成高级认证,这样可以获得更高的API调用频率和交易额度。
具体步骤如下:
- 登录你的欧易账号
- 进入“账户” -> “API”管理页面
- 点击“创建API Key”
- 选择权限范围(建议先选“读取”权限测试,确认能跑通后再开通交易权限)
⚠️ 注意:如果你是新手,强烈建议先创建一个“仅读取”权限的API Key来测试代码,等完全熟练后再开通交易权限,避免因代码bug导致意外亏损。
API密钥创建与安全设置
创建API Key时,你会得到三个关键信息:
- API Key:你的身份标识
- Secret Key:你的密钥,相当于密码
- Passphrase:你设置的API访问密码
安全提醒:
- Secret Key和Passphrase绝对不要明文写在GitHub、博客等公开地方
- 建议使用环境变量或加密配置文件存储
- 设置IP白名单(只允许你的服务器IP调用)
- 交易权限要谨慎开启,建议使用子账户单独操作
如果你在欧易交易所官网申请时,发现某些权限无法勾选,很可能是你的账号安全等级不够,建议绑定谷歌验证器(Google Authenticator),并开启资金密码。
Python环境搭建与必备库安装
假设你已经安装好了Python 3.7以上版本,我们需要安装两个库:
pip install requests pip install python-dotenv # 用于管理环境变量
推荐使用虚拟环境(virtualenv)来隔离项目依赖,避免版本冲突。
目录结构建议:
okx_trading/
├── .env # 存储API密钥(不要上传到Git)
├── config.py # 读取配置
├── okx_api.py # API交互类
└── main.py # 主程序
实战:第一个欧易交易脚本
下面是一个完整的入门脚本,实现了“获取BTC/USDT实时价格”+“打印账户余额”两个功能。
1 配置读取(config.py)
import os
from dotenv import load_dotenv
load_dotenv()
class Config:
API_KEY = os.getenv("OKX_API_KEY")
SECRET_KEY = os.getenv("OKX_SECRET_KEY")
PASSPHRASE = os.getenv("OKX_PASSPHRASE")
BASE_URL = "https://www.okx.com" # 注意这里是官方API端点
别忘了在.env文件中填写你的密钥:
OKX_API_KEY=你的APIKey
OKX_SECRET_KEY=你的SecretKey
OKX_PASSPHRASE=你的Passphrase
2 核心API类(okx_api.py)
import requests
import time
import hmac
import base64
import json
import hashlib
class OKXAPI:
def __init__(self, config):
self.api_key = config.API_KEY
self.secret_key = config.SECRET_KEY
self.passphrase = config.PASSPHRASE
self.base_url = config.BASE_URL
def _sign(self, timestamp, method, request_path, body=""):
message = timestamp + method + request_path + body
mac = hmac.new(
bytes(self.secret_key, encoding='utf8'),
bytes(message, encoding='utf-8'),
digestmod='sha256'
)
sign = base64.b64encode(mac.digest())
return sign.decode('utf-8')
def _request(self, method, path, params=None, body=None):
timestamp = str(int(time.time()))
if method == "GET":
sign_path = path + ("?" + params if params else "")
body_str = ""
else:
sign_path = path
body_str = json.dumps(body) if body else ""
headers = {
"OK-ACCESS-KEY": self.api_key,
"OK-ACCESS-SIGN": self._sign(timestamp, method, sign_path, body_str),
"OK-ACCESS-TIMESTAMP": timestamp,
"OK-ACCESS-PASSPHRASE": self.passphrase,
"Content-Type": "application/json"
}
url = self.base_url + path
if method == "GET":
response = requests.get(url, headers=headers, params=params)
else:
response = requests.post(url, headers=headers, json=body)
return response.json()
def get_ticker(self, instId):
"""获取最新行情"""
path = "/api/v5/market/ticker"
params = {"instId": instId}
return self._request("GET", path, params=params)
def get_account_balance(self):
"""获取账户余额"""
path = "/api/v5/account/balance"
return self._request("GET", path)
3 主程序(main.py)
from config import Config
from okx_api import OKXAPI
def main():
config = Config()
api = OKXAPI(config)
# 获取BTC/USDT最新价格
ticker = api.get_ticker("BTC-USDT")
if ticker["code"] == "0":
print(f"BTC当前价格: {ticker['data'][0]['last']} USDT")
else:
print(f"获取行情失败: {ticker['msg']}")
# 获取账户余额
balance = api.get_account_balance()
if balance["code"] == "0":
total_equity = balance["data"][0]["totalEq"]
print(f"账户总权益: {total_equity} USDT")
else:
print(f"获取余额失败: {balance['msg']}")
if __name__ == "__main__":
main()
运行这个脚本,你就能看到实时行情和账户余额了。
常见问题与避坑指南
❓ Q1:为什么我运行脚本报错“Bad Request”?
A: 最常见的原因是API权限未开启,请检查你在欧易交易所官网申请的API Key是否勾选了“读取”权限,检查你的服务器时间是否准确,欧易API对时间戳有严格限制(误差不能超过5秒)。
❓ Q2:如何下单买入/卖出?
A: 在OKXAPI类中添加以下方法:
def place_order(self, instId, side, ordType, sz, px=None):
"""下单
side: 'buy' 或 'sell'
ordType: 'market'(市价)或 'limit'(限价)
sz: 数量
px: 价格(限价单必填)
"""
path = "/api/v5/trade/order"
body = {
"instId": instId,
"tdMode": "cash", # 现货交易
"side": side,
"ordType": ordType,
"sz": str(sz)
}
if ordType == "limit":
body["px"] = str(px)
return self._request("POST", path, body=body)
⚠️ 重要: 第一次测试时,请用非常小的数量(比如0.0001 BTC)做市价买入,确认流程无误后再投入真金白银。
❓ Q3:API调用频率限制是多少?
A: 欧易的API频率限制根据权限等级不同有所差异,读取类接口每秒最多10次,交易类接口每秒最多5次,如果你要做高频交易,建议使用WebSocket连接。
❓ Q4:如何设置止损/止盈?
A: 欧易支持止损止盈订单(TP/SL),可以在下单时通过tpTriggerPx和slTriggerPx参数设置,更简单的方式是使用条件委托(Conditional Order)。
风险提示与进阶方向
⚠️ 风险提示
- API安全是重中之重:密钥泄露可能导致资产被清空,务必设置IP白名单
- 先模拟后实盘:用测试网(Testnet)跑通所有逻辑再上主网
- 不要盲目全仓:任何自动化策略都有失效的可能
- 监控异常:建议设置邮箱/短信提醒,及时发现异常交易
🚀 进阶方向
如果你已经成功跑通了上面的基础脚本,下一步可以尝试:
- WebSocket实时行情:比REST API延迟更低,适合做趋势跟踪策略
- 网格交易机器人:在震荡行情中自动低买高卖
- 多币种套利:利用不同交易对之间的价差
- 机器学习预测:用历史数据训练模型,辅助交易决策
最后再次提醒:所有操作请在欧易交易所官网完成,不要轻信任何非官方的“欧易交易所下载”链接,API交易虽然有诸多好处,但一定要在充分理解风险的前提下操作,祝你在量化交易的道路上越走越顺!
标签: Python交易脚本