目录导读
为什么选择欧易API进行量化交易?
在加密货币交易中,手动操作既耗时又容易错过最佳买卖点,而通过欧易交易所官网提供的API接口,你可以用代码实现自动化交易,24小时捕捉市场机会,无论你是想做个简单的网格策略,还是构建复杂的量化模型,掌握API调用都是第一步,很多朋友一开始会被API的英文文档劝退,但其实用Python写个简单的交易脚本,比想象中简单得多,今天这篇教程就手把手带你走通整个流程。

如果你想先熟悉模拟环境测试,也可以前往欧易交易所下载官方客户端或直接访问官网,注册后获取API权限,对了,本文提到的所有操作都基于真实接口,测试时建议先用小额资金。
欧易API接口申请完整流程
在写代码之前,你得先在欧易交易所官网申请API密钥,这一步很关键,因为脚本需要通过密钥来验证身份。
操作步骤:
- 登录账户:打开欧易官网(例如通过 okeh.com.cn 进入),登录你的交易账户。
- 进入API管理:点击头像 → “API” → “创建API”。
- 设置权限:建议勾选“交易”和“读取”权限,如果你想做自动化交易,一定要开启“交易”权限,否则脚本无法下单。
- 安全验证:需要完成手机验证或邮箱验证,部分账户可能还需谷歌验证器。
- 保存密钥:创建成功后,你会得到
API Key和Secret Key。注意:Secret Key只在创建时显示一次,务必复制到安全的地方,比如本地加密文件或环境变量里。
小提示:千万不要把密钥分享给任何人,也别上传到公开代码仓库,否则你的资产可能会被恶意调用。
申请完成后,你就拿到了通往自动化交易的大门钥匙。
Python环境准备与依赖安装
接下来咱们搭建Python环境,如果你还没装Python,建议用3.8以上版本,创建一个新文件夹,比如okx_trading,然后安装必要的库。
打开终端,运行:
pip install requests pandas python-dotenv
requests:用于发送HTTP请求到欧易API。pandas:处理数据,比如K线或订单簿。python-dotenv:方便管理环境变量,避免硬编码密钥。
为了方便演示,我们在文件夹里创建一个.env文件,写入:
API_KEY=你的API_Key
SECRET_KEY=你的Secret_Key
PASSPHRASE=你的交易密码
注意:欧易API还有PASSPHRASE参数,这通常是在创建API时设置的交易密码。
编写你的第一个交易脚本
现在咱们来写一个简单的脚本:获取BTC/USDT的最新行情,如果价格低于某个阈值,就买入0.001个BTC(测试用)。
创建trade_bot.py文件,代码如下:
import requests
import time
import hmac
import base64
import json
from datetime import datetime
from dotenv import load_dotenv
import os
load_dotenv()
API_KEY = os.getenv('API_KEY')
SECRET_KEY = os.getenv('SECRET_KEY')
PASSPHRASE = os.getenv('PASSPHRASE')
BASE_URL = 'https://www.okx.com' # 也可使用 okeh.com.cn 的对应接口
def get_timestamp():
return datetime.utcnow().isoformat()[:-3] + 'Z'
def sign(message, secret):
mac = hmac.new(bytes(secret, encoding='utf8'), bytes(message, encoding='utf-8'), digestmod='sha256')
d = mac.digest()
return base64.b64encode(d)
def get_header(method, request_path, body=''):
timestamp = get_timestamp()
message = timestamp + method + request_path + body
signature = sign(message, SECRET_KEY)
header = {
'OK-ACCESS-KEY': API_KEY,
'OK-ACCESS-SIGN': signature,
'OK-ACCESS-TIMESTAMP': timestamp,
'OK-ACCESS-PASSPHRASE': PASSPHRASE,
'Content-Type': 'application/json'
}
return header
# 获取BTC/USDT最新价格
def get_price(symbol='BTC-USDT'):
request_path = '/api/v5/market/ticker?instId=' + symbol
response = requests.get(BASE_URL + request_path)
if response.status_code == 200:
data = response.json()
return float(data['data'][0]['last'])
else:
print('请求失败:', response.text)
return None
# 下单函数(限价单示例)
def place_order(symbol, side, sz, px=None):
body = {
'instId': symbol,
'tdMode': 'cash',
'side': side,
'ordType': 'market' if px is None else 'limit',
'sz': str(sz)
}
if px:
body['px'] = str(px)
body_json = json.dumps(body)
request_path = '/api/v5/trade/order'
header = get_header('POST', request_path, body_json)
response = requests.post(BASE_URL + request_path, headers=header, data=body_json)
return response.json()
if __name__ == '__main__':
price = get_price()
print(f'当前BTC价格: {price}')
# 简单的策略:如果价格低于60000美元,买入0.001 BTC
if price and price < 60000:
result = place_order('BTC-USDT', 'buy', 0.001)
print('订单结果:', result)
else:
print('价格未触发条件')
运行脚本:
python trade_bot.py
如果一切正常,你会看到当前价格,并在满足条件时下单,测试时建议先在模拟盘或小额资金跑,熟悉后再投入真金白银。
如果你想测试更复杂的策略,比如挂限价单或查询历史订单,可以继续扩展这个脚本,欧易的API文档非常详细,所有接口路径和参数都能在欧易交易所官网找到,前往 okeh.com.cn 了解更多API接口细节。
常见问题与避坑指南
很多新手在第一次跑脚本时容易遇到以下几个问题:
问题1:签名失败(401错误)
最常见原因是时间戳不同步,确保你的服务器时间与NTP时间同步,误差超过30秒就会报错。
问题2:订单被拒绝(订单簿不存在)
检查instId是否写错,比如BTC-USDT要全大写,不同交易对格式不一样,请以API文档为准。
问题3:资金不足
现货交易需要账户里有足够的币或USDT,测试时建议只买0.001个,先跑通流程。
问题4:无法连接到API
部分网络环境可能屏蔽欧易API,如果你用 okeh.com.cn 打不开,可以尝试备用域名或VPN。
问题5:API密钥权限不足
创建API时没勾选“交易”权限,去后台重新生成一个,记得把权限打勾。
问答环节
问:我可以在欧易交易所官网获取历史K线数据吗?
答:可以,欧易API有/api/v5/market/candles接口,可以获取1分钟到1周的K线,在脚本里加一个请求函数就能拉下来,然后做技术分析。
问:写好的脚本怎么让它24小时运行?
答:推荐部署到云服务器上,比如阿里云、腾讯云,用screen或nohup保持后台运行,或者写个while True循环配合sleep。
问:Python脚本适合做高频交易吗?
答:Python的网络延迟相对较高,不太适合毫秒级高频交易,如果你是做分钟级、小时级的策略,Python完全够用,如果追求极速,可以用C++或Go。
问:我担心API泄漏怎么办?
答:建议把密钥放在环境变量或加密的配置文件中,不要写死在代码里,可以在欧易交易所官网设置API的IP白名单,只允许你的服务器IP调用,这样即使密钥被别人拿到也无法使用。
问:有现货脚本的进阶教程吗?
答:当然有,你可以在 okeh.com.cn 的开发者文档里找到更多示例,比如网格交易、定投策略等,也可以关注欧易的官方GitHub,里面有不少社区贡献的开源脚本。
通过以上步骤,你已经掌握了从申请API到编写简单脚本的全流程,接下来就是把策略写得更聪明一点,比如加上止损止盈、仓位管理,任何自动化交易都有风险,先用小资金验证你的策略,再逐步加码,祝你在量化交易的路上少踩坑,多赚钱!