目录导读
- 为什么你需要一个欧易API接口?
- 欧易交易所官网API申请全流程(附避坑指南)
- Python环境准备与依赖安装
- 手把手教你写第一个交易脚本(含完整代码)
- 常见问题问答(Q&A)
- 风险提示与进阶建议
为什么你需要一个欧易API接口?
先别急着看代码,问自己一个问题:你每天盯盘手动买卖,累不累?如果你有几百块的仓位,手动操作无所谓;但如果你资金稍微多点,或者想跑量化策略,欧易API接口就是你的“自动驾驶仪”。

简单说,通过API,你可以让程序代替你下单选币、查余额、看行情,而且欧易交易所官网提供的API文档非常清晰,支持现货、合约、杠杆等多种交易类型,关键是——延迟比手动操作低几十倍,适合抢反弹、挂网格单等场景。
小提示:很多人担心API不安全,其实欧易API支持IP白名单、只读权限设置,你甚至可以生成一个只有“下单权限”的密钥,交易完就禁用,非常灵活。
欧易交易所官网API申请全流程(避坑指南)
第一步:登录欧易交易所官网(如果你还没账号,先去 okeh.com.cn 注册,这个过程顺便可以完成欧易交易所下载最新客户端,因为部分高级功能网页版不开放)。
第二步:进入API管理页面
找到“账户中心” -> “API” -> “创建新的API”,注意,这里有个坑:创建时系统会让你选择“权限类型”,很多人直接勾选“全开”,但我不建议,建议你只勾选“读取”和“交易”,然后单独设置“提现”为关闭状态,万一密钥泄露,黑客也提不走币。
第三步:绑定IP白名单(强烈推荐)
如果你用的是固定IP(家庭宽带或云服务器),填上你的IP地址,这样即使密钥泄露,非白名单IP也无法调用API,动态IP用户可以不填,但务必开启“绑定设备”选项。
第四步:保存好你的API Key和Secret Key
Secret Key只显示一次,一定要复制到本地加密保存(比如用KeePass),如果你忘了,只能删除重建,没有找回途径。
第五步:通过短信/邮箱验证后,API就生成了。
我在欧易交易所下载的移动端也试过同样的流程,界面略有不同,但逻辑一致,建议在电脑端操作,浏览器复制粘贴更方便。
Python环境准备与依赖安装
假设你已经安装了Python 3.8+,我们需要两个关键库:
requests:用于发送HTTP请求hmac+hashlib:用于签名加密(欧易API要求签名)
打开终端,执行一条命令:
pip install requests
不需要其他的重量级库,欧易API本身就是REST风格的JSON接口,不需要websocket也能做很多事。
额外建议:创建一个虚拟环境,避免污染全局Python环境。
python -m venv okx-env source okx-env/bin/activate # Windows是 okx-env\Scripts\activate
手把手写你的第一个交易脚本
下面我写一个简单的脚本:查询比特币(BTC/USDT)当前价格,并且下一个市价买入单(买10 USDT的BTC)。
1 初始化参数
import requests import hmac import hashlib import base64 import json import time API_KEY = "你的API Key" SECRET_KEY = "你的Secret Key" PASSPHRASE = "你在创建API时设置的密码短语" # 这个很容易忘! BASE_URL = "https://www.okx.com" # 如果你用欧易交易所官网接口,这里就是标准地址
2 签名函数(核心)
欧易API要求每个请求都要带一个签名头,规则是:
签名 = Base64(HMAC_SHA256(时间戳 + 方法 + 请求路径 + body, SecretKey))
def generate_signature(timestamp, method, request_path, body=""):
message = timestamp + method + request_path + body
mac = hmac.new(bytes(SECRET_KEY, "utf-8"), bytes(message, "utf-8"), digestmod=hashlib.sha256)
return base64.b64encode(mac.digest()).decode("utf-8")
3 封装请求函数
def okx_request(method, path, body=""):
timestamp = str(int(time.time() * 1000) / 1000) # 精确到秒,带小数
signature = generate_signature(timestamp, method, path, body)
headers = {
"OK-ACCESS-KEY": API_KEY,
"OK-ACCESS-SIGN": signature,
"OK-ACCESS-TIMESTAMP": timestamp,
"OK-ACCESS-PASSPHRASE": PASSPHRASE,
"Content-Type": "application/json"
}
if method == "GET":
resp = requests.get(BASE_URL + path, headers=headers)
else:
resp = requests.post(BASE_URL + path, headers=headers, data=body)
return resp.json()
4 获取BTC价格
def get_btc_price():
# 公开接口,不需要签名,可以直接用GET
path = "/api/v5/market/ticker?instId=BTC-USDT"
resp = requests.get(BASE_URL + path)
data = resp.json()["data"][0]
return data["last"] # 最新成交价
5 下一个市价买入单
def market_buy(instId, notional_usdt=10):
path = "/api/v5/trade/order"
body = json.dumps({
"instId": instId,
"tdMode": "cash", # 现货交易
"side": "buy",
"ordType": "market", # 市价单
"sz": str(notional_usdt), # 买入金额(USDT)
"tgtCcy": "quote_ccy" # 以报价货币(USDT)计价
})
result = okx_request("POST", path, body)
if result["code"] == "0":
print(f"下单成功!订单ID: {result['data'][0]['ordId']}")
else:
print(f"下单失败: {result['msg']}")
return result
6 主程序
if __name__ == "__main__":
print(f"当前BTC价格: {get_btc_price()} USDT")
print("尝试买入10 USDT的BTC...")
market_buy("BTC-USDT")
运行结果示例:
当前BTC价格: 67234.5 USDT
尝试买入10 USDT的BTC...
下单成功!订单ID: 1234567890
7 关键点解释
- 市价单不需要价格,直接填金额(
sz)即可,但要注意tgtCcy: "quote_ccy"表示金额单位是USDT,如果省略这个参数,默认sz是币的数量,容易搞错。 - 欧易API的限频规则是每秒钟最多20次请求(不同接口略有差异),你脚本里最好加个
time.sleep(0.1)避免被临时封IP。 - 所有POST请求的body必须为JSON字符串,且签名需要用原始body,不能格式化后再签。
常见问题问答(Q&A)
Q1:我申请API的时候没看到“密码短语”怎么办?
A:这个PASSPHRASE是你在创建API时自己设置的(不是API Key),如果你忘了,只能删除这个API重新创建。千万别用API Key当密码短语,那是两回事。
Q2:Python脚本运行时报“签名错误”怎么办?
A:99%是时间戳的问题,欧易要求时间戳是ISO8601格式,比如2025-01-15T08:30:00.500Z,我上面的代码用的是Unix时间戳转小数格式,实际官方更推荐datetime.datetime.now().strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z',改一下签名函数里的timestamp即可。
Q3:我只想查行情,不想交易,可以不申请API吗?
A:可以的!公开行情接口(比如/api/v5/market/ticker)不需要任何认证,直接GET就行,只有交易、查账户余额这些私有接口才需要API Key。
Q4:欧易API和OKX API是同一个吗?
A:是的,欧易国际站和欧易交易所官网现在统一用www.okx.com作为API端点,如果你在okeh.com.cn下载的客户端,用的是国内特供版,API可能有差异,建议仔细区分官方文档。
Q5:如何防止API密钥被滥用?
A:除了IP白名单,你还可以设置交易密码,每次下单都需要额外验证(API参数里加pwd字段),定期轮换密钥是个好习惯。
风险提示与进阶建议
风险提示:API脚本是双刃剑,如果代码逻辑有bug(比如循环下单没加条件),可能导致资金瞬间归零,我强烈建议你:
- 先在模拟盘(demo)测试一周,欧易有专门的模拟环境域名。
- 初版脚本只做只读操作,跑三天确认没问题再开交易权限。
- 设置每日最大亏损线,比如累计亏损超过50 USDT就停止程序。
进阶建议:这个脚本只是“万里长征第一步”,真正的量化需要你掌握:
- Websocket实时行情(欧易有公共频道,比轮询延迟低很多)
- 定时任务调度(比如用
schedule库实现网格交易) - 回测框架(比如
backtrader配合历史数据)
如果你感兴趣,可以去欧易交易所官网的开发者文档里找他们官方的Python SDK(python-okx),比自己封装好看得多,但自己写一遍能更好理解底层逻辑。
最后提醒一句:文中所有代码仅供学习交流,入市需谨慎,如果你使用的是okeh.com.cn镜像站,请先确认API域名和文档是否一致,有些镜像站可能不开放API接口,遇到问题,优先查看欧易官方API文档的FAQ部分。
标签: 自动交易脚本