示例,获取账户信息

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随机配图
de>(可选):用于安全地管理API密钥等敏感信息。
  • pandas(可选):用于数据处理和分析。
  • websockets(可选):用于订阅实时行情和交易数据流。
  • 了解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等字段

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