目录导读
- 为什么你需要欧易API?——从手动交易到程序化交易的跃迁
- 欧易API接口申请全流程——5分钟搞定你的开发者密钥
- Python交易脚本基础架构——从零搭建你的第一个自动交易程序
- 实战演练:一个简单的比特币均线策略交易脚本
- 常见问题问答(FAQ)——解决你90%的API使用困惑
为什么你需要欧易API?——从手动交易到程序化交易的跃迁
你是不是经常盯着盘面,手指悬在“买入”和“卖出”按钮上犹豫不决?凌晨三点行情暴涨,你却在睡觉白白错过?或者你有一整套交易策略,却因为手动操作太慢而总是滑点严重?

欧易交易所官网提供的API接口就是为解决这些痛点而生,通过API,你可以让代码代替你执行交易,实现7×24小时不间断监控行情、自动下单、自动止损止盈,尤其是对于高频交易、网格策略、量化对冲等复杂玩法,API几乎是必备工具。
根据OKX官方文档(现已迁移至欧易交易所下载新版接口体系),其API支持现货、合约、期权等全产品线,并且提供REST和WebSocket两种接入方式,更重要的是,欧易API完全免费开放,只要你完成身份认证(KYC),就能获取专属的API Key。
欧易API接口申请全流程——5分钟搞定你的开发者密钥
第一步:注册并完成KYC认证
访问[欧易交易所官网](https://okht.com.cn/)注册账号,完成基础身份认证(普通用户只需要提供身份证正反面+人脸识别,大约10分钟能通过审核),未完成KYC的账号无法申请API。
第二步:进入API管理界面
登录后,鼠标悬停在右上角头像处,在下拉菜单中点击“API”选项,此时系统会要求你输入资金密码(如果还没设置,先去安全中心设置)。
第三步:创建API Key
点击“创建API”,你会看到三个关键选项:
- API类型:选“交易”(如果要开发交易脚本必须选这个,只读API无法下单)
- 权限勾选:建议全选“读取”、“交易”、“提现”(如果你不打算用脚本提现,可以只勾前两项)
- IP白名单:强烈建议填写你运行脚本的服务器IP(如果填了,只有该IP能调用API,防止泄露风险)
确认后,你会获得一串API Key和一串Secret Key(这串字符只会显示一次,请立即复制保存,丢失只能删除重建)。
第四步:Passphrase(交易密码短语)
这是你调用API时必填的安全口令,相当于API的“第二道锁”,自定义一串复杂字符(例如MyBot@2024!)。
第五步:完成绑定
确认创建后,你的API列表里会出现一组新的密钥,此时需要点击“绑定”并输入短信验证码(部分情况需要Google验证),完成后,API状态显示为“已启用”即可使用。
风险提示:API密钥泄露等同于账户资金泄露,请勿把Secret Key明文发送给任何人,包括所谓的“技术客服”!
Python交易脚本基础架构——从零搭建你的第一个自动交易程序
安装所需库:
pip install requests pandas websocket-client
核心代码结构(以查询账户余额为例):
import requests
import json
import hmac
import hashlib
import base64
from datetime import datetime
from urllib.parse import urlencode
API_KEY = "你的AppKey"
SECRET_KEY = "你的SecretKey"
PASS_PHRASE = "你的Passphrase"
BASE_URL = "https://www.okx.com"
def get_timestamp():
return datetime.utcnow().isoformat(timespec="seconds") + "Z"
def sign(message, secret_key):
mac = hmac.new(bytes(secret_key, encoding='utf8'), bytes(message, encoding='utf-8'), digestmod=hashlib.sha256)
d = mac.digest()
return base64.b64encode(d).decode('utf-8')
def get_balance(ccy="USDT"):
timestamp = get_timestamp()
path = "/api/v5/account/balance"
params = f"ccy={ccy}" if ccy else ""
request_path = path + ("?" + params if params else "")
message = timestamp + 'GET' + request_path
headers = {
'OK-ACCESS-KEY': API_KEY,
'OK-ACCESS-SIGN': sign(message, SECRET_KEY),
'OK-ACCESS-TIMESTAMP': timestamp,
'OK-ACCESS-PASSPHRASE': PASS_PHRASE,
'Content-Type': 'application/json'
}
resp = requests.get(BASE_URL + request_path, headers=headers)
return resp.json()
print(get_balance())
这段代码的核心是签名机制:每次请求都需要用Secret Key对“时间戳+请求方法+请求路径”进行HMAC-SHA256加密,然后放入Headers中,欧易官方设计这个逻辑是为了确保请求未被篡改且来源可信。
下单函数示例:
def place_order(instId, side, sz, px="", orderType="market"):
timestamp = get_timestamp()
path = "/api/v5/trade/order"
body = {
"instId": instId, # "BTC-USDT"
"side": side, # "buy" 或 "sell"
"sz": sz, # 数量(市价单数量)
"px": px, # 价格(限价单必填)
"tgtCcy": "base_ccy", # 市价单用基础币计价
"ordType": orderType # "market" 或 "limit"
}
body_json = json.dumps(body)
message = timestamp + 'POST' + path + body_json
headers = {
'OK-ACCESS-KEY': API_KEY,
'OK-ACCESS-SIGN': sign(message, SECRET_KEY),
'OK-ACCESS-TIMESTAMP': timestamp,
'OK-ACCESS-PASSPHRASE': PASS_PHRASE,
'Content-Type': 'application/json'
}
resp = requests.post(BASE_URL + path, data=body_json, headers=headers)
return resp.json()
实战演练:一个简单的比特币均线策略交易脚本
我们来实现一个经典的双均线(MA5和MA20)交叉策略:当MA5上穿MA20时买入(金叉),当MA5下穿MA20时卖出(死叉),脚本每秒拉取一次K线数据,然后判断是否触发信号。
import time
import pandas as pd
def get_candles(instId="BTC-USDT", bar="1m", limit="60"):
timestamp = get_timestamp()
path = f"/api/v5/market/candles?instId={instId}&bar={bar}&limit={limit}"
request_path = path
# 注意:行情接口不需要签名,但需要公开的Headers
headers = {'Content-Type': 'application/json'}
resp = requests.get(BASE_URL + path, headers=headers)
data = resp.json()['data']
# 数据倒序且包含多个字段,我们只需要收盘价
closes = [float(item[4]) for item in reversed(data)]
return closes
def strategy():
closes = get_candles()
ma5 = sum(closes[-5:]) / 5
ma20 = sum(closes[-20:]) / 20
prev_closes = closes[:-1]
prev_ma5 = sum(prev_closes[-5:]) / 5
prev_ma20 = sum(prev_closes[-20:]) / 20
if prev_ma5 <= prev_ma20 and ma5 > ma20:
return "buy"
elif prev_ma5 >= prev_ma20 and ma5 < ma20:
return "sell"
else:
return "hold"
# 主循环:每10秒检测一次
while True:
signal = strategy()
if signal == "buy":
print("金叉信号,正在下单买入...")
print(place_order("BTC-USDT", "buy", "0.001", orderType="market"))
elif signal == "sell":
print("死叉信号,正在下单卖出...")
print(place_order("BTC-USDT", "sell", "0.001", orderType="market"))
else:
print("无信号,继续监控...")
time.sleep(10)
注意:实盘跑策略前,请一定先用欧易的“模拟盘”(demo trading)环境测试,只需在API界面勾选“模拟器”选项,返回的API Key只能访问模拟交易,不会动用真实资金。
常见问题问答(FAQ)——解决你90%的API使用困惑
Q1:申请API需要收费吗?有最低交易量要求吗? A:完全免费,也没有任何最低交易量限制,只要你完成KYC认证,即使是0交易量的新用户也能申请,唯一的要求是确保你的IP地址安全,建议使用固定IP。
Q2:为什么我调接口总是报错“Sign error”?
A:90%的原因是时间戳不准确,你的服务器时间必须与欧易服务器时间偏差在30秒以内,否则签名无效,建议先调用/api/v5/public/time接口同步时间,或者使用ntpdate命令校准。
Q3:API设置里的“IP白名单”有什么作用?如果我不填会有风险吗?
A:白名单是限制只有指定IP地址能调用你的API,是极其重要的安全防线,建议绑定你运行脚本服务器的公网IP(通过curl ifconfig.me就能查到),如果不填,任何拿到你API Key的人都能随处访问,风险较高。
Q4:我可以用欧易API做量化交易吗?官方支持吗? A:绝对支持!OKX(而如今已通过[欧易交易所官网](https://okht.com.cn/)提供全量交易接口)专门为量化团队提供了更高级的策略委托、批量撤单等功能,但请注意,高频交易或滥用接口导致服务器压力过大,可能会触发官方频率限制(REST接口默认限频20次/2秒),合理使用完全没问题。
Q5:有没有Python官方SDK?我不用自己写签名逻辑?
A:有的!欧易官方提供了py-okx库(GitHub可以搜到),封装好了签名、请求、websocket订阅等细节,你只需要调用示例代码即可,自己写一遍签名逻辑会让你更理解原理,也更方便定制。
Q6:WebSocket和REST接口怎么选? A:REST适合低频操作(如查询余额、下单),WebSocket适合实时推送行情(如订单簿、成交记录),如果你的策略是高频的,建议用WebSocket订阅深度和行情,用REST下单。
Q7:我的API Key过期了怎么办? A:API Key永远不会过期(除非你删除它),但强烈建议每隔几个月定期更换,如果怀疑泄密,请立即在管理界面删除并重新生成。
Q8:为什么我的下单量sz必须是整数?
A:欧易现货交易的数量精度由交易对决定(例如BTC-USDT最小0.0001个BTC),你可以在/api/v5/public/instruments查询每个交易对的lotSz和minSz,指定超出精度的数量会报错。
Q9:如果我的服务器时间不准,但我不想修改服务器时间,有没有变通方法?
A:你可以在每次请求前先调用时间同步接口获取服务器时间戳,然后计算本地时间与服务器时间之差,然后每次签名前手动偏移,但说实话,推荐还是用sudo ntpdate -u pool.ntp.org同步系统时间,这一步最省心。
Q10:脚本跑出来的收益比手动操作还差,问题出在哪? A:大部分情况是因为策略参数过拟合了历史数据,或者没有考虑滑点和手续费,建议先在模拟盘跑2周以上,同时把手续费(现货0.1%,合约更高)计入回测模型,另外可以尝试在欧易官方提供的交易所下载页面下载客户端,查看Taker/Maker手续费标准。
写在最后:写交易脚本的门槛远不止写代码那么简单,你还要考虑止损、资金管理、异常处理(网络抖动导致下单失败怎么办?),建议从最小交易量(例如0.001 BTC)开始,跑通全流程后再逐步加仓,如果你的策略产生了稳定盈利,欢迎把它分享到社区——毕竟,量化交易最大的魅力在于用机器纪律战胜人性波动。
标签: API接口 Python交易机器人