目录导读

- 为什么要学欧易API交易?
- 欧易API接口申请全流程(附截图级指引)
- Python环境准备与库安装
- 从零编写你的第一个自动交易脚本
- 常见报错与解决方法(含问答)
- 安全提醒:API密钥管理必读
为什么要学欧易API交易?
很多朋友问我:“手动在欧易交易所官网买卖不也能赚钱吗?学API是不是多此一举?”
说实话,如果你只是偶尔买一点现货,手动操作确实够用,但如果你想:
- 在行情波动时0.1秒内完成挂单
- 同时监控多个交易对
- 实现网格、马丁格尔等策略
- 或者单纯想解放双手(不用熬夜盯盘)
那欧易API接口就是你的必备工具,通过程序自动调用欧易交易所的API,你能像下棋一样精准执行交易指令,而且完全无情绪干扰。
欧易API接口申请全流程
步骤1:登录欧易交易所官网
打开浏览器进入欧易官网(本文演示用 okeh.com.cn ),完成账号注册和KYC认证。
⚠️ 提醒:务必使用邮箱或手机号注册,并开启谷歌二次验证。
步骤2:进入API管理页面
登录后,鼠标悬停在右上角头像 → 点击【API】→ 进入API管理后台。
![API入口示意]
步骤3:创建API密钥
点击【创建API】→ 选择【交易API】→ 输入备注名(如“我的量化脚本”)→ 设置权限:
- 读取权限:必须勾选(查询账户和行情)
- 交易权限:必须勾选(才能下单)
- 提币权限:强烈建议不勾选(防止被黑后资产被盗)
创建成功后,你会看到两串关键信息:
- API Key:类似你的账号ID
- Secret Key:类似你的密码(只显示一次,务必截图保存!)
步骤4:绑定IP白名单(安全加分项)
在API详情页,可以设置仅允许特定IP地址访问该密钥,如果你用的是云服务器,填上服务器IP即可;如果本地用机,填你电脑的公网IP。
Python环境准备与库安装
确认你已经安装了Python 3.7以上版本,接着打开终端(CMD或Terminal),安装两个核心库:
pip install requests hashlib time json
这里requests负责发送HTTP请求到欧易服务器,hashlib用于签名验证。
如果遇到网络慢,可以加国内镜像源:
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
从零编写你的第一个自动交易脚本
创建基础结构
新建文件 okx_trading.py,引入库并定义API参数:
import requests
import hashlib
import json
import time
import base64
import hmac
# 从刚才保存的API信息中填入
api_key = "你的API_Key"
secret_key = "你的Secret_Key"
passphrase = "你的API密码" # 创建API时设置的
base_url = "https://www.okx.com" # 也可以换成okeh.com.cn测试
# 获取时间戳(欧易要求精确到毫秒)
def get_timestamp():
return str(int(time.time() * 1000))
编写签名函数(欧易API核心)
欧易要求每次请求都必须携带签名,防止被篡改:
def sign_request(method, request_path, body=''):
timestamp = get_timestamp()
message = timestamp + method.upper() + request_path + (body if body else '')
mac = hmac.new(
bytes(secret_key, encoding='utf-8'),
bytes(message, encoding='utf-8'),
digestmod='sha256'
).digest()
signature = base64.b64encode(mac).decode()
return timestamp, signature
查询账户余额(GET请求)
先试试能不能连上欧易交易所的服务器:
def get_account_balance():
request_path = "/api/v5/account/balance"
method = "GET"
timestamp, sign = sign_request(method, request_path)
headers = {
"OK-ACCESS-KEY": api_key,
"OK-ACCESS-SIGN": sign,
"OK-ACCESS-TIMESTAMP": timestamp,
"OK-ACCESS-PASSPHRASE": passphrase,
"Content-Type": "application/json"
}
response = requests.get(base_url + request_path, headers=headers)
return response.json()
# 执行测试
print(get_account_balance())
如果返回包含"code":"0",说明连接成功!
实现下单功能(POST请求)
创建一个市价买入ETH的函数:
def place_market_order(side, sz, instId="ETH-USDT"):
request_path = "/api/v5/trade/order"
method = "POST"
body = {
"instId": instId, # 交易对
"tdMode": "cash", # 保证金模式:现货用cash
"side": side, # buy/sell
"ordType": "market", # 市价单
"sz": str(sz) # 数量
}
body_json = json.dumps(body)
timestamp, sign = sign_request(method, request_path, body_json)
headers = {
"OK-ACCESS-KEY": api_key,
"OK-ACCESS-SIGN": sign,
"OK-ACCESS-TIMESTAMP": timestamp,
"OK-ACCESS-PASSPHRASE": passphrase,
"Content-Type": "application/json"
}
response = requests.post(base_url + request_path, data=body_json, headers=headers)
return response.json()
# 示例:用100 USDT市价买入ETH(假设ETH当前价格)
print(place_market_order("buy", 100, "ETH-USDT"))
💡 注意:市价单填写的是金额(USDT)还是币的数量?欧易官方文档明确指出:市价买单,sz代表买入金额(以报价币种计);市价卖单,sz代表卖出数量(以交易币种计),别搞反了!
循环监控与自动交易
加入一个简单的监控逻辑:当BTC跌幅超过5%时自动买入:
def check_and_buy():
# 获取BTC当前价格(简化版,可用get_ticker)
ticker = requests.get(base_url + "/api/v5/market/ticker?instId=BTC-USDT").json()
current_price = float(ticker['data'][0]['last'])
# 假设你的心理价位是45000,低于它就买
buy_threshold = 45000
if current_price < buy_threshold:
print(f"BTC跌到{current_price},准备买入!")
result = place_market_order("buy", 50, "BTC-USDT")
print("下单结果:", result)
else:
print(f"当前价格{current_price},未触发买入条件")
# 每10分钟检查一次
while True:
check_and_buy()
time.sleep(600)
常见报错与解决方法(含问答)
问:为什么返回“签名无效”错误?
答:大概率是时间戳不同步,先检查你电脑的时钟是否准确,误差超过30秒会被拒绝,Windows用户建议开启“自动同步时间”。
问:API一直提示“访问被拒绝”怎么办?
答:三步排查:① 确认API权限已勾选“交易”;② 检查IP白名单是否限制了你当前的IP;③ Secret Key是否粘贴正确(注意没有多余空格)。
问:我能用同一个API密钥在多个程序里运行吗?
答:可以,但不推荐,建议每个脚本单独创建一个API,方便追踪异常,另外建议去欧易交易所下载手机应用,随时接收API异常告警。
问:市价单滑点很大怎么办?
答:可以改用限价单,示例中替换ordType为"limit",并增加px字段指定价格,或者设置sz为较大的数量并分次执行。
安全提醒:API密钥管理必读
- 绝对不要在GitHub、博客、聊天记录里暴露你的Secret Key
- 定期在okeh.com.cn API管理页面轮换密钥
- 设置IP白名单,即使手机丢了也不怕
- 建议用只读权限的API进行测试,测试无误后再开交易权限
- 用
try...except包装所有交易请求,防止意外死循环爆仓
try:
result = place_market_order("buy", 100, "ETH-USDT")
except Exception as e:
print("下单失败,可能网络问题:", e)
# 发送告警到微信或Telegram
最后的话
从欧易交易所官网申请API到写出第一个自动交易脚本,整个过程其实不到半小时,关键在于理解签名机制和请求格式,当你看到代码自动完成了一笔盈利交易时,那种成就感是手动操作永远给不了的。
如果你在写代码时遇到具体报错,欢迎把错误代码贴到评论区,我会帮你分析,下一期我们聊聊如何用同一个API实现网格交易机器人,记得先去欧易交易所下载安装好客户端,方便随时调试。
(提醒:数字货币交易高风险,本文仅做技术教程,不构成投资建议)
标签: Python交易脚本