📚 目录导读
- 前置准备:欧易API接口申请与配置
- 注册与API密钥申请流程
- 权限设置与安全建议
- Python环境搭建与依赖库安装
- 推荐开发环境配置
- 关键库(requests、hmac、hashlib)安装
- 编写基础交易脚本:从获取行情到下单
- 获取实时价格与K线数据
- 实现限价单与市价单交易
- 脚本实战:一个简单的网格交易策略
- 逻辑设计要点
- 完整代码与运行演示
- 常见问题与解答(Q&A)
- API连接失败如何处理?
- 如何避免交易频率过高被封?
前置准备:欧易API接口申请与配置
在开始编写Python交易脚本前,必须先完成欧易交易所的API接口申请,以下是详细步骤:

登录与进入API管理页面
登录您的欧易交易所账户,右上角点击“账户” → “API管理”,若未注册,可先完成欧易交易所下载并注册账户。
创建API密钥
点击“创建API”,按需勾选权限:
- 读取权限:查询账户余额、订单状态等
- 交易权限:下单、撤单等(建议仅勾选必要权限,降低风险)
- 提现权限:默认关闭,保护资产安全
创建成功后,您将获得 apiKey 和 secretKey(注意:secretKey仅显示一次,请立即保存至安全位置)。
安全加固建议
- 为API绑定IP白名单(仅允许您的服务器IP访问)
- 定期轮换密钥(建议每月更新一次)
- 避免在公共网络或共享设备中保存密钥
Python环境搭建与依赖库安装
推荐环境
- Python 3.8+(建议使用Anaconda或虚拟环境管理)
- IDE:VS Code、PyCharm或Jupyter Notebook
安装核心依赖库
pip install requests hmac hashlib time json # 若需计算签名,还需安装:pip install base64
库作用说明:
requests:发送HTTP请求hmac+hashlib.sha256:生成签名,确保请求安全time:生成时间戳json:解析响应数据
编写基础交易脚本:从获取行情到下单
以下示例实现获取ETH/USDT实时价格并下单买入0.01 ETH。
获取实时价格(GET请求)
import requests
import time
import hmac
import hashlib
import json
BASE_URL = "https://ox-okbb.com.cn" # 欧易官方API域名
api_key = "您的apiKey"
secret_key = "您的secretKey"
passphrase = "您在API设置时输入的密码"
def get_timestamp():
return str(int(time.time()))
def get_signature(timestamp, method, request_path, body=""):
message = timestamp + method.upper() + request_path + (body or "")
mac = hmac.new(secret_key.encode(), message.encode(), hashlib.sha256).digest()
return base64.b64encode(mac).decode()
def get_headers(method, request_path, body=""):
timestamp = get_timestamp()
sign = get_signature(timestamp, method, request_path, body)
return {
"OK-ACCESS-KEY": api_key,
"OK-ACCESS-SIGN": sign,
"OK-ACCESS-TIMESTAMP": timestamp,
"OK-ACCESS-PASSPHRASE": passphrase,
"Content-Type": "application/json"
}
# 获取ETH/USDT最新成交价
def get_spot_price(symbol="ETH-USDT"):
request_path = "/api/v5/market/ticker"
params = {"instId": symbol}
response = requests.get(BASE_URL + request_path, headers=get_headers("GET", request_path), params=params)
if response.status_code == 200:
data = response.json()["data"][0]
print(f"最新价格:{data['last']} USDT")
return data['last']
else:
print("请求失败:", response.text)
return None
下单(POST请求)
def place_limit_order(symbol, side, size, price):
"""
side: 'buy' 或 'sell'
size: 交易数量(ETH)
price: 限价单价格(USDT)
"""
request_path = "/api/v5/trade/order"
body = {
"instId": symbol,
"tdMode": "cash", # 现货交易
"side": side,
"ordType": "limit",
"sz": str(size),
"px": str(price)
}
headers = get_headers("POST", request_path, json.dumps(body))
response = requests.post(BASE_URL + request_path, headers=headers, json=body)
if response.status_code == 200:
result = response.json()
print(f"订单已提交,订单ID:{result['data'][0]['ordId']}")
else:
print("下单失败:", response.text)
# 示例:以当前价格买入0.01 ETH
current_price = get_spot_price()
if current_price:
place_limit_order("ETH-USDT", "buy", 0.01, current_price)
注意:实际交易前请确保账户有足够的USDT余额,并在测试网或小额资金下先行验证。
脚本实战:一个简单的网格交易策略
策略逻辑
- 设定价格区间(如1800-2200 USDT)
- 每下跌2%买入0.01 ETH,每上涨2%卖出0.01 ETH
- 持续监控价格,自动执行
完整代码框架
class GridTrader:
def __init__(self, symbol, lower_price, upper_price, grid_num, base_qty):
self.symbol = symbol
self.lower = lower_price
self.upper = upper_price
self.grid_num = grid_num
self.base_qty = base_qty
self.grid_step = (upper_price - lower_price) / grid_num
self.last_price = get_spot_price(symbol)
# 计算当前价格对应的网格位置
def get_grid_level(self, price):
if price < self.lower or price > self.upper:
return -1
return int((price - self.lower) / self.grid_step)
def run(self):
while True:
current_price = get_spot_price(self.symbol)
current_level = self.get_grid_level(current_price)
last_level = self.get_grid_level(self.last_price)
if current_level != last_level:
if current_price > self.last_price:
place_limit_order(self.symbol, "sell", self.base_qty, current_price)
else:
place_limit_order(self.symbol, "buy", self.base_qty, current_price)
self.last_price = current_price
time.sleep(10) # 每10秒检查一次
# 启动网格交易(1800-2200 USDT,10个网格,每网格0.01 ETH)
trader = GridTrader("ETH-USDT", 1800, 2200, 10, 0.01)
trader.run()
提醒:请根据实际市场波动调整参数,并设置止损机制。
常见问题与解答(Q&A)
Q1:API连接失败,返回“405 Method Not Allowed”怎么办?
A:检查请求路径是否正确,确保使用了 HTTPS 协议,确认 GET 请求的 body 参数为空,POST 请求必须包含有效 JSON 体。
Q2:如何避免交易频率过高导致API被封?
A:
- 每个IP每秒请求不超过10次(推荐控制在5次以内)
- 下单间隔至少1秒
- 使用
time.sleep()控制循环频率 - 若需高频交易,建议申请VIP API权限
Q3:脚本运行后无订单成交?
A:
- 检查账户余额是否充足(现货交易需要对应资产)
- 限价单价格是否接近当前市价(若价格偏离太远会无法成交)
- 查看订单状态API:
/api/v5/trade/order加参数ordId查询
Q4:如何将脚本部署到服务器长期运行?
A:
- 使用
nohup python trade.py &后台运行 - 或使用系统服务(如systemd)管理进程
- 建议添加日志记录(
logging模块)以便复盘
本文详细介绍了欧易API接口的申请、Python环境搭建以及从获取行情到自动交易的完整脚本编写,通过掌握这些技能,您可以将交易策略自动化,减少手动操作误差,建议先使用模拟账户(沙箱环境)测试,确保逻辑无误后再投入真实资金,如需获取最新API文档和练习环境,可访问欧易交易所官网,别忘了完成欧易交易所下载以获取移动端支持,交易有风险,请谨慎操作,合理控制仓位。
标签: 欧易API Python交易脚本