欧易交易所官网API接口申请教程,手把手教你用Python写交易脚本

admin okx快讯 1

目录导读

  1. 为什么要用API交易?新手也能懂的底层逻辑
  2. 欧易交易所API申请全流程(附避坑指南)
  3. Python环境搭建与依赖库安装
  4. 从零开始:编写第一个行情获取脚本
  5. 实战进阶:自动下单与风控逻辑
  6. 常见问题问答(FAQ)

为什么要用API交易?新手也能懂的底层逻辑

很多人刚开始接触数字货币交易时,习惯在欧易交易所官网手动点鼠标买卖,但当你需要同时监控10个币种、设置止盈止损、或者凌晨3点行情异动时,手动操作就会变成噩梦,这时候,API(应用程序接口)就是你的“交易机器人”。

欧易交易所官网API接口申请教程,手把手教你用Python写交易脚本-第1张图片-欧易交易所

简单理解:API相当于一个“传话筒”,你的Python代码通过API告诉交易所“我要查询BTC价格”或“以市价买入0.1个ETH”,交易所再把结果返回给你的代码,整个过程不需要打开浏览器,全自动化执行。

核心优势:

  • 0延迟响应:行情变化0.5秒内触发策略
  • 24小时运行:睡觉时也能自动交易
  • 多策略并行:同时跑网格、套利、趋势跟踪

欧易交易所API申请全流程

第一步:登录账户并进入API管理

  1. 打开欧易交易所官网(注意认准域名,建议收藏okeh.com.cn避免钓鱼网站)。
  2. 登录后,鼠标悬停在右上角头像处,点击“API”选项。
  3. 如果是首次使用,系统会提示“创建API密钥”。

第二步:填写API信息(关键!)

  • 权限勾选建议: 只勾选“交易”和“读取”(千万别勾“提现”,否则一旦密钥泄露,资产会被转走)。
  • IP绑定: 输入你电脑或服务器的公网IP,这是最重要的安全措施,如果IP不固定,可以留空(不推荐)。
  • 备注名称: 随便写,Python交易机器人”。

第三步:获取密钥并保存

点击“创建”后,会得到三样东西:

  1. API Key(一串字符,如abcd-efgh-1234
  2. Secret Key(加密密钥,只显示一次)
  3. Passphrase(你设置的访问密码)

⚠️ 立即截图保存! Secret Key只有这次能看到,关掉页面后就再也找不回来了。


Python环境搭建与依赖库安装

假设你已经安装了Python 3.8以上版本(如果没装,去python.org下载),打开终端或命令提示符,执行以下命令:

pip install requests pandas time json

其中requests负责发送HTTP请求,pandas用于数据处理,time用来控制请求频率(避免被交易所限流)。

小技巧: 建议使用虚拟环境(venv),避免污染全局Python包。


从零开始:编写第一个行情获取脚本

我们写一个脚本,获取BTC/USDT的当前价格,先创建文件get_price.py

import requests
import json
import time
# 欧易交易所API端点(注意:合约和现货的URL不同)
BASE_URL = "https://www.okex.com"  # 实际需替换为okeh.com.cn
# 获取BTC现货行情
def get_btc_price():
    url = f"{BASE_URL}/api/v5/market/ticker?instId=BTC-USDT"
    try:
        response = requests.get(url, timeout=5)
        data = response.json()
        if data.get('code') == '0':
            price = data['data'][0]['last']
            print(f"当前BTC价格:{price} USDT")
            return price
        else:
            print(f"API错误:{data.get('msg')}")
    except Exception as e:
        print(f"请求失败:{str(e)}")
if __name__ == "__main__":
    while True:
        get_btc_price()
        time.sleep(5)  # 每5秒查一次,避免触发限流

运行结果:
每次运行会输出类似当前BTC价格:67890.1 USDT,按Ctrl+C停止。


实战进阶:自动下单与风控逻辑

接下来编写一个完整的交易脚本:当BTC价格跌破60000时,自动买入0.01个BTC(仅演示,请自行测试)。

创建文件auto_trade.py

import requests
import time
import hmac
import base64
import hashlib
from datetime import datetime
# 你的API密钥(务必换成你自己的!)
API_KEY = "你的APIKey"
SECRET_KEY = "你的SecretKey" 
PASSPHRASE = "你的Passphrase"
# 交易所域名(注意使用正确的URL)
BASE_URL = "https://okeh.com.cn"  # 已替换为指定域名
def generate_sign(timestamp, method, request_path, body=''):
    """生成签名(欧易API签名逻辑)"""
    message = timestamp + method + request_path + body
    mac = hmac.new(bytes(SECRET_KEY, encoding='utf8'), 
                   bytes(message, encoding='utf-8'), 
                   digestmod=hashlib.sha256)
    d = mac.digest()
    return base64.b64encode(d).decode()
def get_header(sign, timestamp):
    """生成请求头"""
    header = {
        'OK-ACCESS-KEY': API_KEY,
        'OK-ACCESS-SIGN': sign,
        'OK-ACCESS-TIMESTAMP': timestamp,
        'OK-ACCESS-PASSPHRASE': PASSPHRASE,
        'Content-Type': 'application/json'
    }
    return header
def place_order(side, sz, instId='BTC-USDT'):
    """下市价单"""
    timestamp = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z'
    body = {
        'instId': instId,
        'tdMode': 'cash',  # 现货交易
        'side': side,      # 'buy' 或 'sell'
        'ordType': 'market',
        'sz': str(sz)      # 数量,市价单按数量买入
    }
    body_json = json.dumps(body)
    sign = generate_sign(timestamp, 'POST', '/api/v5/trade/order', body_json)
    header = get_header(sign, timestamp)
    url = BASE_URL + '/api/v5/trade/order'
    try:
        response = requests.post(url, headers=header, data=body_json, timeout=5)
        result = response.json()
        if result.get('code') == '0':
            print(f"✅ 下单成功:{side.upper()} {sz} {instId}")
            return result['data'][0]['ordId']
        else:
            print(f"❌ 下单失败:{result.get('msg')}")
    except Exception as e:
        print(f"请求异常:{e}")
# 主策略:BTC低于60000时买入
if __name__ == "__main__":
    while True:
        # 获取当前价格(使用前文函数)
        url = BASE_URL + '/api/v5/market/ticker?instId=BTC-USDT'
        resp = requests.get(url, timeout=5)
        price_data = resp.json()
        if price_data['code'] == '0':
            current_price = float(price_data['data'][0]['last'])
            print(f"当前BTC价格:{current_price}")
            if current_price < 60000:
                print("🚨 触发买入条件!正在下单...")
                order_id = place_order('buy', 0.01)  # 买入0.01个BTC
                if order_id:
                    print(f"订单ID:{order_id}")
                    break  # 只执行一次,防止重复买入
            else:
                print("价格未满足条件,持续监控中...")
        time.sleep(10)  # 每10秒检查一次

使用说明:

  • 运行脚本前,一定要在欧易交易所官网进行小额测试(比如先买0.001个BTC)。
  • 建议把60000改成你期望的价位。
  • 安全提醒:千万不要将API密钥提交到GitHub等公开平台!

常见问题问答(FAQ)

Q1:申请API时提示“IP地址不匹配”怎么办?

A:如果你家里宽带IP会变化(比如重启路由器后IP改变),建议要么绑定一个固定IP的云服务器,要么在申请API时不勾选“IP绑定”选项,不过不绑定IP的风险较大,建议配合API Key权限设置为“仅交易”。

Q2:为什么我的脚本报错“签名无效”?

A:99%的原因是时间戳格式不对,欧易要求的时间戳格式是2024-01-01T12:00:00.123Z,请检查generate_sign函数里的时间戳生成逻辑,另一种情况是Secret Key复制时包含了空格或换行符。

Q3:市价单和限价单有什么区别?

A:市价单按当前市场最优价格立即成交,但实际成交价格可能滑点(比如快速行情时);限价单可以设定具体价格,但可能永远不会成交,新手建议先用市价单测试API连通性,再逐步尝试限价单。

Q4:脚本跑了一天后被交易所封IP了怎么办?

A:欧易交易所对API请求有频率限制(具体规则可查阅欧易交易所下载文档),解决方法是:在每次请求后加time.sleep(1),如果是高频策略,建议使用Websocket而非REST API,不要同时运行多个脚本用同一个API Key。

Q5:API密钥被泄露了如何紧急处理?

A:立刻登录欧易交易所官网,在API管理页面点击“删除”该密钥组,如果资产还在,大概率安全;如果发现异常交易,立即联系客服,养成习惯:每个API Key都限制“仅交易”且绑定固定IP。


最后提示: 数字货币交易风险极高,自动化交易更是放大盈亏的利器,本文所有代码仅供学习交流,切勿使用真实资金在未经充分测试的脚本上操作,建议先在欧易交易所下载的模拟盘(如有)或小额资金验证逻辑后,再考虑实盘部署,祝你在交易路上少踩坑,多盈利!

标签: Python交易脚本

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