替换为实际订单ID

admin19 2026-02-19 12:57

OKX API使用指南:从零开始掌握加密货币交易自动化

在加密货币交易中,自动化交易、策略执行和高效管理是提升交易效率的关键,OKX作为全球领先的数字资产交易平台,提供了功能强大的API(应用程序接口),允许开发者通过编程方式实现交易、数据查询、账户管理等操作,本文将详细介绍OKX API的使用方法,从申请到实战,助你快速上手。

OKX API简介:什么是API?为什么需要它?

API是应用程序接口,相当于OKX交易平台与你的交易程序之间的“桥梁”,通过API,你可以:

  • 自动化交易:执行预设的交易策略(如网格交易、定投),无需手动盯盘;
  • 批量操作:快速查询账户资产、订单历史、市场数据等,提升数据处理效率;
  • 策略回测:获取历史K线数据,验证交易策略的有效性;
  • 多账户管理:通过程序统一管理多个OKX账户的交易行为。

OKX API支持现货交易、合约交易、期权交易等全业务场景,并提供RESTful API(用于数据查询和订单提交)和WebSocket API(用于实时数据推送),满足不同需求。

准备工作:申请API密钥与配置权限

在使用OKX API前,需完成以下准备工作:

注册并登录OKX账户

确保已完成身份认证(KYC),未认证账户可能无法使用API功能。

创建API密钥

  • 登录OKX官网,进入【账户】→【API管理】;
  • 点击【创建API】,设置API名称(如“网格交易机器人”)、权限(需根据需求勾选,见下文);
  • 验证身份(如短信/邮箱验证),生成API Key(密钥)Secret Key(秘钥)Passphrase(密码短语)
    注意:这三项信息需妥善保存,一旦丢失无法找回,建议使用密码管理工具存储。

配置API权限

OKX API权限分为只读交易提现三类,需按需勾选(建议最小权限原则):

  • 只读:查询账户资产、订单、市场数据等,适合数据分析和策略回测;
  • 交易:提交/取消订单、查询订单状态,适合自动化交易;
  • 提现:执行提现操作(需额外开启IP白名单,避免安全风险)。

设置IP白名单(推荐)

为提升安全性,可在创建API时限制允许访问的IP地址(仅填写的IP可调用API),避免密钥泄露被恶意使用,若需临时更换IP,可随时在API管理页面修改。

OKX API核心功能与调用方法

OKX API主要通过RESTful接口实现操作,以下是核心功能的使用示例(以Python为例,需先安装requests库:pip install requests)。

认证机制:如何生成请求签名?

OKX API使用HMAC-SHA256算法对请求进行签名,确保请求的合法性和安全性,签名步骤如下:

  • 将请求方法(GET/POST)、请求路径(如/api/v5/account/balance)、请求参数(按字母序排序)拼接成字符串;
  • 使用Secret Key对字符串进行HMAC-SHA256加密,生成签名;
  • 将签名、API Key、Passphrase等信息添加到请求头中。

示例代码:生成签名

import hmac
import base64
import hashlib
import time
def generate_signature(api_key, secret_key, passphrase, method, path, query_string=None, body=None):
    timestamp = str(int(time.time()))
    message = timestamp + method.upper() + path + (query_string or "") + (body or "")
    signature = base64.b64encode(
        hmac.new(secret_key.encode(), message.encode(), hashlib.sha256).digest()
    ).decode()
    return signature

查询账户资产(只读权限)

接口:GET /api/v5/account/balance
功能:获取账户余额(包括现货、合约等资产)。

示例代码

import requests
api_key = "your_api_key"
secret_key = "your_secret_key"
passphrase = "your_passphrase"
base_url = "https://www.okx.com"
def get_account_balance():
    path = "/api/v5/account/balance"
    timestamp = str(int(time.time()))
    method = "GET"
    body = ""
    signature = generate_signature(api_key, secret_key, passphrase, method, path, body=body)
    headers = {
        "OK-ACCESS-KEY": api_key,
        "OK-ACCESS-SIGN": signature,
        "OK-ACCESS-PASSPHRASE": passphrase,
        "OK-ACCESS-TIMESTAMP": timestamp,
        "Content-Type": "application/json"
    }
    response = requests.get(base_url + path, headers=headers)
    return response.json()
print(get_account_balance())

下单交易(交易权限)

接口:POST /api/v5/trade/order
功能:提交限价单、市价单等。

请求参数说明
| 参数名 | 类型 | 必填 | 说明 |
|--------------|--------|------|--------------------------|
| instId | string | 是 | 交易产品,如BTC-USDT |
| tdMode | string | 是 | 交易模式:cash(现货)cross(全仓合约)isolated(逐仓合约) |
| side | string | 是 | 买卖方向:buy/sell |
| ordType | string | 是 | 订单类型:limit(限价)market(市价) |
| sz | string | 是 | 委托数量(张或币数) |
| px | string | 否 | 限价单价格(市价单无需) |

示例代码:买入BTC限价单

def place_order():
    path = "/api/v5/trade/order"
    timestamp = str(int(time.time()))
    method = "POST"
    body = json.dumps({
        "instId": "BTC-USDT",
        "tdMode": "cash",
        "side": "buy",
        "ordType": "limit",
        "sz": "0.001",
        "px": "30000"
    })
    signature = generate_signature(api_key, secret_key, passphrase, method, path, body=body)
    headers = {
        "OK-ACCESS-KEY": api_key,
        "OK-ACCESS-SIGN": signature,
        "OK-ACCESS-PASSPHRASE": passphrase,
        "OK-ACCESS-TIMESTAMP": timestamp,
        "Content-Type": "application/json"
    }
    response = requests.post(base_url + path, headers=headers, data=body)
    return response.json()
print(place_order())

查询订单状态(交易权限)

接口:GET /api/v5/trade/order
功能:通过订单ID查询订单详情(如成交状态、剩余数量)。

请求参数

  • ordId:订单ID(必填)
  • instId:交易产品(可选,建议填写)

示例代码

def get_order_status(ord_id):
    path = "/api/v5/trade/order"
    timestamp = str(int(time.time()))
    method = "GET"
    query_string = f"ordId={ord_id}&instId=BTC-USDT"
    signature = generate_signature(api_key, secret_key, passphrase, method, path, query_string=query_string)
    headers = {
        "OK-ACCESS-KEY": api_key,
        "OK-ACCESS-SIGN": signature,
        "OK-ACCESS-PASSPHRASE": passphrase,
        "OK-ACCESS-TIMESTAMP": timestamp,
        "Content-Type": "application/json"
    }
    response = requests.get(base_url + path + "?" + query_string, headers=headers)
    return response.json()
随机配图
print(get_order_status("your_order_id"))

WebSocket API:实时数据推送

对于需要实时数据的场景(如行情监控、高频交易),可使用WebSocket API。

示例代码:订阅BTC-USDT实时K线

import websockets
import asyncio
async def subscribe_kline():
    ws_url = "wss://ws.okx.com:8443/ws/v5/public"
    async with websockets.connect(ws_url) as websocket:
        subscribe_msg = {
            "op": "subscribe",
            "args": [{
                "channel": "candle1m",
                "instId": "BTC-USDT"
            }]
        }
        await websocket.send(json.dumps(subscribe_msg))
        while True:
            response = await websocket.recv()
            print(response)
asyncio.run(subscribe_kline())

常见问题与注意事项

1

本文转载自互联网,具体来源未知,或在文章中已说明来源,若有权利人发现,请联系我们更正。本站尊重原创,转载文章仅为传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如其他媒体、网站或个人从本网站转载使用,请保留本站注明的文章来源,并自负版权等法律责任。如有关于文章内容的疑问或投诉,请及时联系我们。我们转载此文的目的在于传递更多信息,同时也希望找到原作者,感谢各位读者的支持!
最近发表
随机文章
随机文章