欧易API接口申请教程,如何使用Python编写简单的交易脚本?

admin ok快讯 2

📚 目录导读

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

前置准备:欧易API接口申请与配置

在开始编写Python交易脚本前,必须先完成欧易交易所的API接口申请,以下是详细步骤:

欧易API接口申请教程,如何使用Python编写简单的交易脚本?-第1张图片-欧易交易所

登录与进入API管理页面

登录您的欧易交易所账户,右上角点击“账户” → “API管理”,若未注册,可先完成欧易交易所下载并注册账户。

创建API密钥

点击“创建API”,按需勾选权限:

  • 读取权限:查询账户余额、订单状态等
  • 交易权限:下单、撤单等(建议仅勾选必要权限,降低风险)
  • 提现权限:默认关闭,保护资产安全

创建成功后,您将获得 apiKeysecretKey(注意: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交易脚本

抱歉,评论功能暂时关闭!