示例,获取账户信息

OKX合约开发入门到实践:一份详尽教程**


OKX(欧易)作为全球领先的数字资产交易平台,为开发者提供了功能强大的API接口,使得进行合约交易、策略开发等操作成为可能,本教程将带你从零开始,了解OKX合约开发的基本流程、核心概念及实践步骤,助你快速上手。

OKX合约类型概览

在开始开发之前,首先需要了解OKX支持的合约类型:

  1. U本位合约:以USDT等稳定币作为保证金和结算单位的合约,包括永续合约、交割合约,交易标的为BTC/USDT、ETH/USDT等。
  2. 币本位合约:以BTC、ETH等主流数字货币作为保证金和结算单位的合
    随机配图
    约,同样包括永续合约和交割合约,交易标的为BTC-USDT、ETH-USDT等(此处USDT为计价单位,但保证金和结算为币)。
  3. 期权合约:赋予买方在特定时间以特定价格买入或卖出标的资产的权利,但不是义务。

本教程将以更常用的U本位合约为主要示例进行讲解,核心逻辑同样适用于其他合约类型。

开发前准备

  1. 注册OKX账户

    • 访问OKX官方网站(www.okx.com)完成注册,并通过身份认证(KYC)。
    • 确保账户已开通合约交易权限。
  2. 创建API Key

    • 登录OKX账户,进入“API管理”页面。
    • 创建一个新的API Key,设置权限(建议根据需求最小化权限,如仅开启“交易”和“读取”)。
    • 妥善保管你的API KeySecret KeyPassphrase(如果设置了),这些信息是进行API调用的凭证,切勿泄露。
  3. 选择开发工具和环境

    • 编程语言:Python是量化开发和API调用的常用语言,拥有丰富的库支持,本教程将以Python为例。
    • 关键库
      • requests:用于发送HTTP请求。
      • python-dotenv(可选):用于安全地管理API密钥等敏感信息。
      • pandas(可选):用于数据处理和分析。
      • websockets(可选):用于订阅实时行情和交易数据流。
  4. 了解OKX API文档

    • OKX官方API文档是开发的权威参考,务必熟悉其结构和各个接口的详细说明。
    • 文档地址:OKX API文档

核心API接口与示例

OKX API RESTful接口涵盖了账户信息、交易、行情、公共数据等多个方面。

连接与认证

所有API请求都需要进行签名认证以验证身份,OKX使用HMAC-SHA256算法进行签名。

  • 请求头(Headers)
    • OK-ACCESS-KEY: 你的API Key
    • OK-ACCESS-SIGN: 使用Secret Key对请求方法、请求路径、时间戳、请求体(如果有)进行HMAC-SHA256签名后的字符串。
    • OK-ACCESS-TIMESTAMP: 请求的时间戳(ISO 8601格式,UTC时间)
    • OK-ACCESS-PASSPHRASE: 你的API Passphrase(如果设置)
    • Content-Type: application/json (POST/PUT请求通常需要)

Python签名示例(简化版):

import hmac
import base64
import hashlib
import time
import requests
API_KEY = "你的API_KEY"
SECRET_KEY = "你的SECRET_KEY"
PASSPHRASE = "你的PASSPHRASE"  # 如果设置了
BASE_URL = "https://www.okx.com"  # 测试网可能不同,请查阅文档
def get_timestamp():
    return time.strftime("%Y-%m-%dT%H:%M:%S.000Z", time.gmtime())
def sign(method, request_path, body, secret_key):
    timestamp = get_timestamp()
    message = timestamp + method.upper() + request_path + body
    signature = base64.b64encode(
        hmac.new(secret_key.encode('utf-8'), message.encode('utf-8'), hashlib.sha256).digest()
    )
    return signature.decode('utf-8')
def get_headers(method, request_path, body=''):
    signature = sign(method, request_path, body, SECRET_KEY)
    headers = {
        "OK-ACCESS-KEY": API_KEY,
        "OK-ACCESS-SIGN": signature,
        "OK-ACCESS-TIMESTAMP": get_timestamp(),
        "OK-ACCESS-PASSPHRASE": PASSPHRASE,
        "Content-Type": "application/json"
    }
    return headers
request_path = "/api/v5/account/balance"
method = "GET"
body = ""  # GET请求通常没有body
headers = get_headers(method, request_path, body)
response = requests.get(BASE_URL + request_path, headers=headers)
print(response.json())

获取账户信息

  • 接口GET /api/v5/account/balance
  • 说明:获取账户资产余额,包括各个币种的可用、冻结数量。
  • 示例:如上代码所示。

获取合约行情

  • 接口GET /api/v5/market/ticker
  • 说明:获取指定合约的最新行情信息。
  • 示例:获取BTC-USDT永续合约的最新价格
request_path = "/api/v5/market/ticker?instId=BTC-USDT-SWAP"  # U本位永续合约
method = "GET"
headers = get_headers(method, request_path)
response = requests.get(BASE_URL + request_path, headers=headers)
print(response.json())

下单交易

合约下单是核心操作,包括开仓、平仓、全平等。

  • 接口POST /api/v5/trade/order
  • 说明:创建并提交订单。
  • 关键参数
    • instId: 合约产品代码,如BTC-USDT-SWAP
    • tdMode: 交易模式,如cross(全仓)、fixed(逐仓)
    • side: 买卖方向,buy(做多)、sell(做空)
    • ordType: 订单类型,market(市价单)、limit(限价单)
    • sz: 订单数量(张数)
    • posSide: 持仓方向,long(多头)、short(空头)、net(净持仓,某些合约支持)

示例:市价开多1张BTC-USDT永续合约

import json
request_path = "/api/v5/trade/order"
method = "POST"
order_data = {
    "instId": "BTC-USDT-SWAP",
    "tdMode": "cross",  # 全仓
    "side": "buy",
    "ordType": "market",
    "sz": "1",
    "posSide": "long"  # 多头
}
body = json.dumps(order_data)
headers = get_headers(method, request_path, body)
response = requests.post(BASE_URL + request_path, headers=headers, data=body)
print(response.json())

查询订单

  • 接口GET /api/v5/trade/order
  • 说明:查询订单状态。
  • 关键参数
    • ordId: 订单ID
    • instId: 合约产品代码(可选)

示例:查询特定订单

request_path = f"/api/v5/trade/order?ordId=你的订单ID&instId=BTC-USDT-SWAP"
method = "GET"
headers = get_headers(method, request_path)
response = requests.get(BASE_URL + request_path, headers=headers)
print(response.json())

获取持仓信息

  • 接口GET /api/v5/account/positions
  • 说明:获取当前所有合约持仓信息。
  • 示例
request_path = "/api/v5/account/positions?instId=BTC-USDT-SWAP"  # 可选instId
method = "GET"
headers = get_headers(method, request_path)
response = requests.get(BASE_URL + request_path, headers=headers)
print(response.json())

实时数据订阅(WebSocket)

对于需要实时行情和交易数据的策略,WebSocket是更高效的选择。

  1. 连接WebSocket
    • 公共频道(如行情):无需认证。
    • 私有频道(如账户资产、订单状态):需要使用API Key进行认证,通常在连接时发送opargscid等字段

本文由用户投稿上传,若侵权请提供版权资料并联系删除!