ZBLOG

-1.配置您的API信息

OKX/OKEx钱包API使用指南:从入门到实战,轻松实现自动化交易


在数字货币交易领域,手动操作往往难以跟上瞬息万变的市场行情,为了实现更高效的交易策略、自动化执行以及更精细化的资产管理,越来越多的高级用户和开发者开始关注和使用交易所提供的API(应用程序编程接口),OKX(原OKEx)作为全球领先的加密货币交易所,其钱包API功能强大,为用户提供了强大的自动化工具。

本文将为您详细解析OKX钱包API的使用方法,从准备工作到代码实战,帮助您快速上手,解锁交易新可能。

什么是OKX钱包API?

OKX钱包API就像是您与OKX账户之间的“信使”和“翻译官”,它允许您通过编写代码(如Python、JavaScript等)来发送指令,直接与OKX的服务器进行交互,从而完成原本需要在网页或App上手动操作的任务。

主要功能包括:

  • 查询账户信息: 实时获取您的资产余额、交易历史等。
  • 执行交易操作: 创建市价单、限价单、取消订单等。
  • 管理API密钥: 对不同的API密钥进行权限设置和管理。
  • 获取市场数据: 获取K线数据、市场深度、交易记录等。

准备工作:获取您的API密钥

在使用API之前,您必须先在OKX平台上创建并获取API密钥,这是最关键的一步,请务必妥善保管。

  1. 登录OKX账户: 访问OKX官网并登录您的账户。
  2. 进入API管理页面: 在右上角头像菜单中,找到并点击【API管理】。
  3. 创建API Key:
    • 点击【创建API Key】。
    • 为您的API命名: 给它一个易于识别的名字,我的Python交易机器人”。
    • 设置权限(至关重要!):
      • 只读权限: 只能查询账户信息、市场数据,无法进行任何交易或提币,适合用于数据分析或监控。
      • 交易权限: 除了查询,还可以进行买卖交易,但不能提币,这是进行自动化交易最常用的权限。
      • 提币权限: 包含交易权限,并允许通过API进行提币。此权限风险极高,请谨慎使用,除非您有绝对的安全保障。
    • 设置IP白名单(强烈推荐): 为了安全,您可以限制您的API密钥只能从特定的IP地址访问,如果您只在家里的电脑上使用,就添加您家里的公网IP,这样可以有效防止密钥泄露后被他人滥用。
  4. 保存密钥信息: 创建成功后,系统会显示您的 API KeySecret KeyPassphrase(口令)。请立即截图或复制并安全保存这三项信息,页面关闭后将无法再次查看Secret Key和Passphrase!

核心概念:API请求与身份验证

所有与OKX API的交互本质上都是发送HTTP请求,为了保证安全和验证您的身份,每个请求都必须包含特定的认证信息,OKX使用HMAC-SHA256算法进行签名认证。

一个完整的API请求通常包含以下要素:

  1. 请求方法:GET(查询数据)、POST(提交操作)。
  2. 请求路径:/api/v5/account/balance(查询账户余额)。
  3. 请求体: 对于POST请求,需要发送JSON格式的参数。
  4. 请求头: 这是身份验证的关键,需要包含:
    • OK-ACCESS-KEY: 您的API Key。
    • OK-ACCESS-SIGN: 使用您的Secret Key对请求进行HMAC-SHA256签名后生成的字符串。
    • OK-ACCESS-TIMESTAMP: 发送请求时的时间戳(UTC格式,如 2023-01-01T12:00:00.000Z)。
    • OK-ACCESS-PASSPHRASE: 您设置的API口令。
    • Content-Type: 请求体的格式,通常为 application/json

签名生成逻辑(简化版): signature = HMAC-SHA256(secret_key, timestamp + method + request_path + body)

这个过程通常由您的代码库自动完成,但理解其原理有助于排查问题。

实战演练:使用Python调用OKX API

下面我们以Python为例,演示如何查询账户余额和创建一个限价买单。

第一步:安装必要的库

您需要安装 requests 库来发送HTTP请求,以及 hmachashlib 库(Python内置)来生成签名。

pip install requests

第二步:编写Python代码

import requests
import json
import time
import hmac
import hashlib
from urllib.parse import urlencode
# !!! 请将以下替换为您自己的真实信息 !!!
API_KEY = '你的API Key'
SECRET_KEY = '你的Secret Key'
PASSPHRASE = '你的API口令'
BASE_URL = 'https://www.okx.com'  # OKX API主网地址
# --- 2. 定义签名生成函数 ---
def get_sign(method, request_path, body, timestamp):
    # 如果body是字典,先转为字符串并按key排序
    if isinstance(body, dict):
        body_str = urlencode(body)
    else:
        body_str = body
    # 待签名字符串
    sign_string = f'{timestamp}{method}{request_path}{body_str}'
    # 使用HMAC-SHA256进行签名
    signature = hmac.new(
        SECRET_KEY.encode('utf-8'),
        sign_string.encode('utf-8'),
        hashlib.sha256
    ).digest()
    # 返回Base64编码后的签名
    import base64
    return base64.b64encode(signature).decode()
# --- 3. 定义API请求通用函数 ---
def okx_request(method, request_path, params=None):
    timestamp = time.strftime("%Y-%m-%dT%H:%M:%S.000Z", time.gmtime())
    body = json.dumps(params, separators=(',', ':')) if params else ''
    sign = get_sign(method, request_path, body, timestamp)
    headers = {
        'OK-ACCESS-KEY': API_KEY,
        'OK-ACCESS-SIGN': sign,
        'OK-ACCESS-TIMESTAMP': timestamp,
        'OK-ACCESS-PASSPHRASE': PASSPHRASE,
        'Content-Type': 'application/json'
    }
    url = f"{BASE_URL}{request_path}"
    try:
        if method == 'GET':
            response = requests.get(url, headers=headers, params=params)
        elif method == 'POST':
            response = requests.post(url, headers=headers, data=body)
        response.raise_for_status()  # 如果请求失败,抛出异常
        return response.json()
    except requests.exceptions.RequestException as e:
        print(f"请求失败: {e}")
        return None
# --- 4. 调用API示例 ---
# 示例1:查询账户余额
print("--- 查询账户余额 ---")
balance_params = {
    "ccy": "BTC" # 可选,指定币种,不指定则返回所有
}
balance_data = okx_request('GET', '/api/v5/account/balance', balance_params)
if balance_data and balance_data.get('code') == '0':
    print(json.dumps(balance_data['data'], indent=2, ensure_ascii=False))
else:
    print("查询余额失败")
print("\n" + "="*50 + "\n")
# 示例2:创建一个限价买单 (假设有交易权限)
# 注意:这只是一个示例,实际交易请谨慎操作!
print("--- 创建限价买单 (示例) ---")
order_params = {
    "instId": "BTC-USDT",  # 交易对
    "tdMode": "cash",      # 交易模式:cash(币币现货)
    "side": "buy",         # 买卖方向:buy
    "ordType": "limit",    # 订单类型:limit(限价)
    "px": "30000",         # 限价价格
    "sz": "0.001"          # 委托数量
}
# 注意:实际下单请取消下面这行注释,并确保您有足够资金
# order_data = okx_request('POST', '/api/v5/trade/order', order_params)
# if order_data and order_data.get('code') == '0':
#     print("下单成功!")
#     print(json.dumps(order_data['data'], indent=2, ensure_ascii=False))
# else:
#     print("下单失败")
#     print(json.dumps(order_data, indent=2, ensure_ascii=False))
print("\n--- 完整的API文档请参考OKX官方文档 ---")
print("https://www.okx.com/docs-v5/zh/")

安全注意事项

分享:
扫描分享到社交APP