欧易交易所官网API接口申请教程,如何用Python写出你的第一个自动交易脚本?

admin okx快讯 2

目录导读

  1. 为什么你需要一个欧易API接口?
  2. 欧易交易所官网API申请全流程(附避坑指南)
  3. Python环境准备与依赖安装
  4. 手把手教你写第一个交易脚本(含完整代码)
  5. 常见问题问答(Q&A)
  6. 风险提示与进阶建议

为什么你需要一个欧易API接口?

先别急着看代码,问自己一个问题:你每天盯盘手动买卖,累不累?如果你有几百块的仓位,手动操作无所谓;但如果你资金稍微多点,或者想跑量化策略,欧易API接口就是你的“自动驾驶仪”

欧易交易所官网API接口申请教程,如何用Python写出你的第一个自动交易脚本?-第1张图片-欧易交易所

简单说,通过API,你可以让程序代替你下单选币、查余额、看行情,而且欧易交易所官网提供的API文档非常清晰,支持现货、合约、杠杆等多种交易类型,关键是——延迟比手动操作低几十倍,适合抢反弹、挂网格单等场景。

小提示:很多人担心API不安全,其实欧易API支持IP白名单、只读权限设置,你甚至可以生成一个只有“下单权限”的密钥,交易完就禁用,非常灵活。

欧易交易所官网API申请全流程(避坑指南)

第一步:登录欧易交易所官网(如果你还没账号,先去 okeh.com.cn 注册,这个过程顺便可以完成欧易交易所下载最新客户端,因为部分高级功能网页版不开放)。

第二步:进入API管理页面
找到“账户中心” -> “API” -> “创建新的API”,注意,这里有个坑:创建时系统会让你选择“权限类型”,很多人直接勾选“全开”,但我不建议,建议你只勾选“读取”和“交易”,然后单独设置“提现”为关闭状态,万一密钥泄露,黑客也提不走币。

第三步:绑定IP白名单(强烈推荐)
如果你用的是固定IP(家庭宽带或云服务器),填上你的IP地址,这样即使密钥泄露,非白名单IP也无法调用API,动态IP用户可以不填,但务必开启“绑定设备”选项。

第四步:保存好你的API Key和Secret Key
Secret Key只显示一次,一定要复制到本地加密保存(比如用KeePass),如果你忘了,只能删除重建,没有找回途径。

第五步:通过短信/邮箱验证后,API就生成了。

我在欧易交易所下载的移动端也试过同样的流程,界面略有不同,但逻辑一致,建议在电脑端操作,浏览器复制粘贴更方便。

Python环境准备与依赖安装

假设你已经安装了Python 3.8+,我们需要两个关键库:

  • requests:用于发送HTTP请求
  • hmac + hashlib:用于签名加密(欧易API要求签名)

打开终端,执行一条命令:

pip install requests

不需要其他的重量级库,欧易API本身就是REST风格的JSON接口,不需要websocket也能做很多事。

额外建议:创建一个虚拟环境,避免污染全局Python环境。

python -m venv okx-env
source okx-env/bin/activate  # Windows是 okx-env\Scripts\activate

手把手写你的第一个交易脚本

下面我写一个简单的脚本:查询比特币(BTC/USDT)当前价格,并且下一个市价买入单(买10 USDT的BTC)。

1 初始化参数

import requests
import hmac
import hashlib
import base64
import json
import time
API_KEY = "你的API Key"
SECRET_KEY = "你的Secret Key"
PASSPHRASE = "你在创建API时设置的密码短语"  # 这个很容易忘!
BASE_URL = "https://www.okx.com"  # 如果你用欧易交易所官网接口,这里就是标准地址

2 签名函数(核心)

欧易API要求每个请求都要带一个签名头,规则是:

签名 = Base64(HMAC_SHA256(时间戳 + 方法 + 请求路径 + body, SecretKey))
def generate_signature(timestamp, method, request_path, body=""):
    message = timestamp + method + request_path + body
    mac = hmac.new(bytes(SECRET_KEY, "utf-8"), bytes(message, "utf-8"), digestmod=hashlib.sha256)
    return base64.b64encode(mac.digest()).decode("utf-8")

3 封装请求函数

def okx_request(method, path, body=""):
    timestamp = str(int(time.time() * 1000) / 1000)  # 精确到秒,带小数
    signature = generate_signature(timestamp, method, path, body)
    headers = {
        "OK-ACCESS-KEY": API_KEY,
        "OK-ACCESS-SIGN": signature,
        "OK-ACCESS-TIMESTAMP": timestamp,
        "OK-ACCESS-PASSPHRASE": PASSPHRASE,
        "Content-Type": "application/json"
    }
    if method == "GET":
        resp = requests.get(BASE_URL + path, headers=headers)
    else:
        resp = requests.post(BASE_URL + path, headers=headers, data=body)
    return resp.json()

4 获取BTC价格

def get_btc_price():
    # 公开接口,不需要签名,可以直接用GET
    path = "/api/v5/market/ticker?instId=BTC-USDT"
    resp = requests.get(BASE_URL + path)
    data = resp.json()["data"][0]
    return data["last"]  # 最新成交价

5 下一个市价买入单

def market_buy(instId, notional_usdt=10):
    path = "/api/v5/trade/order"
    body = json.dumps({
        "instId": instId,
        "tdMode": "cash",          # 现货交易
        "side": "buy",
        "ordType": "market",       # 市价单
        "sz": str(notional_usdt),  # 买入金额(USDT)
        "tgtCcy": "quote_ccy"      # 以报价货币(USDT)计价
    })
    result = okx_request("POST", path, body)
    if result["code"] == "0":
        print(f"下单成功!订单ID: {result['data'][0]['ordId']}")
    else:
        print(f"下单失败: {result['msg']}")
    return result

6 主程序

if __name__ == "__main__":
    print(f"当前BTC价格: {get_btc_price()} USDT")
    print("尝试买入10 USDT的BTC...")
    market_buy("BTC-USDT")

运行结果示例

当前BTC价格: 67234.5 USDT
尝试买入10 USDT的BTC...
下单成功!订单ID: 1234567890

7 关键点解释

  • 市价单不需要价格,直接填金额(sz)即可,但要注意tgtCcy: "quote_ccy"表示金额单位是USDT,如果省略这个参数,默认sz是币的数量,容易搞错。
  • 欧易API的限频规则是每秒钟最多20次请求(不同接口略有差异),你脚本里最好加个time.sleep(0.1)避免被临时封IP。
  • 所有POST请求的body必须为JSON字符串,且签名需要用原始body,不能格式化后再签。

常见问题问答(Q&A)

Q1:我申请API的时候没看到“密码短语”怎么办?
A:这个PASSPHRASE是你在创建API时自己设置的(不是API Key),如果你忘了,只能删除这个API重新创建。千万别用API Key当密码短语,那是两回事。

Q2:Python脚本运行时报“签名错误”怎么办?
A:99%是时间戳的问题,欧易要求时间戳是ISO8601格式,比如2025-01-15T08:30:00.500Z,我上面的代码用的是Unix时间戳转小数格式,实际官方更推荐datetime.datetime.now().strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z',改一下签名函数里的timestamp即可。

Q3:我只想查行情,不想交易,可以不申请API吗?
A:可以的!公开行情接口(比如/api/v5/market/ticker)不需要任何认证,直接GET就行,只有交易、查账户余额这些私有接口才需要API Key。

Q4:欧易API和OKX API是同一个吗?
A:是的,欧易国际站和欧易交易所官网现在统一用www.okx.com作为API端点,如果你在okeh.com.cn下载的客户端,用的是国内特供版,API可能有差异,建议仔细区分官方文档。

Q5:如何防止API密钥被滥用?
A:除了IP白名单,你还可以设置交易密码,每次下单都需要额外验证(API参数里加pwd字段),定期轮换密钥是个好习惯。

风险提示与进阶建议

风险提示:API脚本是双刃剑,如果代码逻辑有bug(比如循环下单没加条件),可能导致资金瞬间归零,我强烈建议你:

  • 先在模拟盘(demo)测试一周,欧易有专门的模拟环境域名。
  • 初版脚本只做只读操作,跑三天确认没问题再开交易权限。
  • 设置每日最大亏损线,比如累计亏损超过50 USDT就停止程序。

进阶建议:这个脚本只是“万里长征第一步”,真正的量化需要你掌握:

  • Websocket实时行情(欧易有公共频道,比轮询延迟低很多)
  • 定时任务调度(比如用schedule库实现网格交易)
  • 回测框架(比如backtrader配合历史数据)

如果你感兴趣,可以去欧易交易所官网的开发者文档里找他们官方的Python SDK(python-okx),比自己封装好看得多,但自己写一遍能更好理解底层逻辑。


最后提醒一句:文中所有代码仅供学习交流,入市需谨慎,如果你使用的是okeh.com.cn镜像站,请先确认API域名和文档是否一致,有些镜像站可能不开放API接口,遇到问题,优先查看欧易官方API文档的FAQ部分。

标签: 自动交易脚本

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