Upbit API接入指南:构建你的交易策略引擎

Upbit API是构建自动化交易策略、数据分析工具的强大引擎。本文提供详细的接入指南,从账户准备到代码示例,助你快速上手。

Upbit API 接入指南:交易策略的加速引擎

API 简介

Upbit 作为韩国领先的加密货币交易所,提供一套全面的 API (Application Programming Interface),赋能开发者构建复杂的自动化交易策略、深度数据分析工具以及各种与加密货币交易相关的应用程序。此API接口为开发者提供程序化的方式与Upbit交易所进行交互,无需手动操作Upbit网站或App。通过 API,开发者能够实时获取Upbit交易所提供的详细市场数据,包括订单簿信息、最新成交价格、历史交易数据等,并根据这些数据制定交易策略。开发者还可以通过API接口执行包括市价单、限价单等多种类型的交易指令,实现自动化交易。API还允许开发者便捷地管理账户信息,如查询账户余额、获取交易历史、进行资金划转等,从而极大地提高交易效率和灵活性,并降低人为操作的错误风险。

准备工作

在开始接入 Upbit API 之前,你需要完成以下准备工作,确保能够顺利访问和利用 Upbit 的交易数据和功能:

  • Upbit 账户与 KYC 验证: 必须在 Upbit 交易所注册一个账户。完成注册后,按照 Upbit 的要求进行 KYC(了解你的客户)验证。 KYC 验证通常需要提供身份证明文件和地址证明等信息。只有通过 KYC 验证的账户才能获得 API 使用权限,这符合交易所的反洗钱(AML)政策。
  • API 密钥的生成与保管: 登录 Upbit 账户后,前往 API 密钥管理页面。 该页面通常位于账户设置的安全设置部分。在此,你可以生成一对 API 密钥:访问密钥 (Access Key) 和安全密钥 (Secret Key)。Access Key 用于标识你的应用程序,而 Secret Key 用于验证你的请求。 极其重要的是,必须以最高安全级别保管你的 Secret Key。切勿将其存储在公共代码仓库中,不要通过不安全的渠道传输,更不要泄露给任何第三方。 如果 Secret Key 泄露,应立即撤销该密钥并生成新的密钥对。建议启用 Upbit 提供的 API 密钥权限控制功能,根据你的应用程序需求,限制 API 密钥的访问权限(例如,只允许读取交易数据,不允许进行交易操作),从而降低潜在的安全风险。
  • 编程环境的搭建: 选择一种你精通的编程语言,如 Python、Java、JavaScript、Go 或 C#,并配置相应的开发环境。对于 Python,推荐使用 pip 安装必要的库,例如 requests (用于发送 HTTP 请求)和 (用于处理 JSON 数据)。 对于其他语言,请选择合适的 HTTP 客户端库和 JSON 解析库。安装完成后,配置好 IDE 或代码编辑器,确保可以顺利编写、运行和调试代码。建议使用虚拟环境隔离不同项目的依赖,避免版本冲突。
  • Upbit API 文档的深入学习: 深入研读 Upbit 官方 API 文档。API 文档详细描述了所有可用的 API 端点、请求参数、请求方法(例如 GET、POST、PUT、DELETE)、响应格式和错误代码。理解文档是成功接入 API 的基石。重点关注以下几个方面:
    • 端点 (Endpoints): 确定你需要使用的 API 端点,例如获取市场行情、下单、查询账户余额等。
    • 参数 (Parameters): 了解每个端点所需的参数,包括必选参数和可选参数,以及参数的类型和格式。
    • 请求方法 (Request Methods): 确定每个端点使用的 HTTP 请求方法,例如 GET 用于获取数据,POST 用于提交数据。
    • 响应格式 (Response Format): 了解 API 返回的数据格式,通常是 JSON 格式。你需要编写代码解析 JSON 数据,提取所需的信息。
    • 错误代码 (Error Codes): 了解 API 可能会返回的错误代码,以及对应的含义。你需要编写错误处理代码,以便在发生错误时进行适当的处理。
    • 速率限制 (Rate Limits): 了解 API 的速率限制,即在一定时间内允许发送的请求数量。你需要编写代码控制请求频率,避免超过速率限制而被 API 拒绝。
    • 身份验证 (Authentication): 了解如何使用 API 密钥进行身份验证,确保你的请求被授权访问 API。

接入步骤

以下是一个使用 Python 语言接入 Upbit API 的示例步骤,以便您开始进行交易、获取市场数据或管理您的账户:

1. 安装必要的 Python 库:

使用 pip 包管理器安装 upbitpy 库。该库简化了与 Upbit API 的交互。在终端或命令提示符中运行以下命令:

pip install upbitpy

2. 获取 Upbit API 密钥:

登录您的 Upbit 账户,进入 API 密钥管理页面。创建新的 API 密钥,并妥善保管您的 Access Key 和 Secret Key。请注意,Secret Key 必须严格保密,切勿泄露给他人。建议启用双重验证(2FA)以增强账户安全性。

3. 编写 Python 代码:

在您的 Python 脚本中,导入 upbitpy 库,并使用您的 Access Key 和 Secret Key 初始化 Upbit 客户端。以下是一个简单的示例:

import upbit

access_key = "YOUR_ACCESS_KEY"  # 替换为您的 Access Key
secret_key = "YOUR_SECRET_KEY"  # 替换为您的 Secret Key

upbit_client = upbit.Upbit(access_key, secret_key)

4. 调用 API 接口:

使用 upbit_client 对象调用各种 Upbit API 接口。例如,要获取当前 BTC/KRW 市场的价格,可以使用以下代码:

ticker = upbit_client.get_ticker("KRW-BTC")
print(ticker)

您可以根据 Upbit API 文档,调用其他接口来获取账户信息、下单、取消订单等。例如,查询账户余额:

accounts = upbit_client.get_accounts()
print(accounts)

5. 错误处理:

在使用 API 时,务必进行错误处理。Upbit API 可能会返回各种错误,例如身份验证错误、参数错误、服务器错误等。使用 try-except 块捕获这些错误,并进行适当的处理,例如重试请求或记录错误日志。

try:
    ticker = upbit_client.get_ticker("KRW-BTC")
    print(ticker)
except Exception as e:
    print(f"An error occurred: {e}")

6. 安全注意事项:

  • 切勿将您的 Secret Key 存储在代码中,建议使用环境变量或配置文件。
  • 限制 API 密钥的权限,仅授予必要的权限。
  • 定期轮换 API 密钥。
  • 监控您的 API 使用情况,以防止滥用。

1. 安装必要的Python库:

为了与Upbit API进行交互,并处理身份验证流程,你需要安装两个关键的Python库。 requests 库用于发送HTTP请求,这是与API服务器通信的基础。 pyjwt 库则用于生成和解码JWT(JSON Web Token),这是Upbit API使用的身份验证机制。

使用pip安装命令:

pip install requests pyjwt

requests : 这是一个流行的Python库,允许你发送各种类型的HTTP请求,例如GET、POST、PUT和DELETE等。 它简化了与Web服务器的交互,并处理了诸如连接管理、HTTP头部和响应解析等底层细节。

pyjwt : 这个库实现了JWT(JSON Web Token)的标准。 JWT是一种用于在各方之间安全地传输信息的开放标准(RFC 7519)。 在Upbit API的上下文中,你需要使用你的API密钥和秘密密钥生成一个JWT,并将其作为身份验证凭据发送给API服务器。

确保在执行此命令之前,你已经安装了Python和pip。 如果在安装过程中遇到任何问题,请检查你的Python环境配置,并确保pip是最新的版本。 你可以使用以下命令更新pip:

pip install --upgrade pip

2. 导入库:

在你的 Python 代码中,导入进行 REST API 调用以及生成和处理 JWT (JSON Web Tokens) 等操作所需的必要库。

jwt 库用于创建和验证 JSON Web Tokens,这是与交易所进行安全身份验证的关键。 uuid 库用于生成唯一的标识符,例如客户端 ID,确保每个请求的唯一性。 hashlib 库提供了多种哈希算法,例如 SHA256,用于消息签名和数据完整性校验。 urllib.parse 中的 urlencode 函数用于将参数编码到 URL 查询字符串中,方便构建 API 请求。 requests 库是Python中发起HTTP请求的标准库,用于与交易所的REST API端点进行交互,发送交易指令、查询账户信息等。

import jwt
import uuid
import hashlib
from urllib.parse import urlencode
import requests

3. 设置 API 密钥:

在访问加密货币交易所或其他相关服务的API时,API密钥是身份验证的关键。它们由Access Key(访问密钥)和Secret Key(私密密钥)组成。Access Key 用于识别您的账户,而Secret Key 则用于验证请求的签名,确保请求的真实性和完整性。务必安全地存储这些密钥,防止泄露,因为泄露可能导致账户被盗用或资金损失。

推荐将您的 Access Key 和 Secret Key 存储在安全的地方,例如操作系统的环境变量中。环境变量可以避免将敏感信息直接硬编码在代码中,提高安全性。使用专门的密钥管理工具(如HashiCorp Vault)可以提供更高级别的保护。

access_key = "YOUR_ACCESS_KEY" # 替换为你的 Access Key
secret_key = "YOUR_SECRET_KEY" # 替换为你的 Secret Key

请务必将 YOUR_ACCESS_KEY YOUR_SECRET_KEY 替换为您实际的 Access Key 和 Secret Key。示例代码展示了如何将密钥赋值给变量。在实际应用中,您可能需要根据您使用的编程语言和框架,选择合适的方法来读取和使用环境变量中的密钥。例如,在Python中,您可以使用 os.environ.get("YOUR_ACCESS_KEY_ENV_VAR") 来获取名为 YOUR_ACCESS_KEY_ENV_VAR 的环境变量的值。

请注意,在开发和测试环境中,您可以暂时将密钥存储在本地文件中。但是,在生产环境中,强烈建议使用更安全的存储方式,例如环境变量或密钥管理工具。

4. 生成 JWT 令牌:

Upbit API 采用 JWT (JSON Web Token) 作为标准的身份验证机制。 为了安全地访问 Upbit API,您需要使用您的 Access Key 和 Secret Key 生成一个合法的 JWT 令牌,并在每个 API 请求的 HTTP 头部中包含该令牌,以便服务器验证您的身份并授权访问。

JWT 令牌的生成过程涉及创建一个包含必要声明(Claims)的 JSON 对象,这个 JSON 对象被称为 payload。 对于 Upbit API 而言,payload 必须包含以下关键信息:

  • access_key : 您的 Upbit Access Key,用于标识您的账户。
  • nonce : 一个唯一的一次性字符串,用于防止重放攻击。每次生成 JWT 令牌时,都必须使用一个新的、唯一的 nonce 值。通常使用 UUID (Universally Unique Identifier) 生成器来创建 nonce 值。

以下 Python 代码示例展示了如何构建 payload:


payload = {
    'access_key': access_key,
    'nonce': str(uuid.uuid4()),
}

在创建 payload 之后,您需要使用您的 Secret Key 对其进行签名,生成最终的 JWT 令牌。 Upbit API 采用 HMAC SHA256 (HS256) 算法进行签名。 确保使用安全可靠的 JWT 库来执行签名操作。

以下 Python 代码示例展示了如何使用 PyJWT 库生成 JWT 令牌:


import jwt
import uuid

# 假设 access_key 和 secret_key 已经定义
access_key = "YOUR_ACCESS_KEY"
secret_key = "YOUR_SECRET_KEY"

payload = {
    'access_key': access_key,
    'nonce': str(uuid.uuid4()),
}

jwt_token = jwt.encode(payload, secret_key, algorithm='HS256')
authorization = f'Bearer {jwt_token}'

在成功生成 JWT 令牌后,您需要将其添加到 HTTP 请求的 Authorization 头部。 头部的值应以 Bearer 开头,后跟一个空格,然后是 JWT 令牌本身。 这样,Upbit API 服务器就可以验证您的身份并授权您的请求。

5. 发送 API 请求:

使用 Python 的 requests 库可以方便地发送 HTTP 请求,与 Upbit API 进行交互。为了访问 Upbit 的私有 API (如获取账户信息),需要在请求头中包含授权信息。

以下代码展示了如何使用 API 密钥和 secret 密钥生成授权令牌,并通过 requests 库向 Upbit API 发送 GET 请求以获取账户信息。请注意,API 基地址为 "https://api.upbit.com/v1"。

定义请求的 URL:

url = "https://api.upbit.com/v1/accounts"

然后,构建包含 JWT 授权信息的请求头。 authorization 变量包含了使用你的 API 密钥和 secret 密钥生成的 JWT 令牌:

headers = {"Authorization": authorization}

使用 requests.get() 方法发送 GET 请求,并将包含授权信息的请求头传递给 headers 参数。服务器返回的响应存储在 res 变量中:

res = requests.get(url, headers=headers)

res.() 方法将服务器返回的 JSON 格式响应数据转换为 Python 字典或列表,便于后续处理和分析。 print(res.()) 语句将解析后的 JSON 数据打印到控制台:

print(res.())

务必妥善保管你的 API 密钥和 secret 密钥,避免泄露。同时,仔细阅读 Upbit API 文档,了解每个 API 接口的具体参数、请求方法和响应格式,以便正确地使用 API。

6. 处理 API 响应:

接收到API服务器的响应后,必须严格按照API文档的规范进行处理。API响应中包含状态码、头部信息以及数据主体,其中状态码是判断请求是否成功的关键指标。常见的成功状态码包括 200 (OK),而常见的错误状态码则有 400 (Bad Request), 401 (Unauthorized), 403 (Forbidden), 404 (Not Found), 500 (Internal Server Error) 等。根据不同的状态码,采取相应的处理逻辑,例如,重试、记录日志或者向用户显示错误信息。

对于成功的请求(例如状态码为200),通常API服务器会返回包含加密货币账户信息的JSON数据。此时,需要使用JSON解析器将响应数据转换为程序可用的数据结构,例如字典或列表。随后,可以遍历这些数据结构,提取出需要的账户信息,例如币种、可用余额和锁定余额。锁定余额是指由于挂单或其他原因暂时无法使用的资金。

示例代码 (Python):


if res.status_code == 200:
    try:
        accounts = res.()
        for account in accounts:
            currency = account.get('currency', '未知币种')  # 获取币种,若不存在则默认为 "未知币种"
            balance = account.get('balance', 0.0)          # 获取可用余额,若不存在则默认为 0.0
            locked = account.get('locked', 0.0)            # 获取锁定余额,若不存在则默认为 0.0
            print(f"币种: {currency}, 可用余额: {balance}, 锁定余额: {locked}")
    except .JSONDecodeError:
        print("JSON 解析失败: 响应数据格式不正确")
else:
    print(f"请求失败: 状态码 {res.status_code}, 错误信息: {res.text}")

在处理API响应时,还需要注意以下几点:

  • 错误处理: 完善错误处理机制,捕获可能出现的异常,例如网络错误、JSON解析错误等。
  • 数据验证: 对API返回的数据进行验证,确保数据的类型和格式符合预期。
  • 日志记录: 记录API请求和响应的详细信息,方便排查问题。
  • 速率限制: 许多API都有速率限制,即在一定时间内允许的最大请求次数。需要注意处理速率限制,避免被API服务器封禁。 可以通过检查响应头部的 X-RateLimit-Remaining , X-RateLimit-Limit 等字段来获取速率限制信息.
  • 分页处理: 如果API返回的数据量很大,通常会采用分页的方式。需要根据API文档的说明,处理分页数据,获取所有需要的信息。

常用 API 端点

以下是一些常用的 Upbit API 端点,它们是访问和交互 Upbit 交易所的关键入口:

  • /v1/accounts: 获取账户信息。这个端点允许用户查询其Upbit账户的详细信息,包括各种币种的可用余额和锁定余额。可用余额是指用户可以立即用于交易的资金,而锁定余额通常是指已用于挂单或处于其他交易活动中的资金。需要注意的是,访问此端点通常需要有效的API密钥和相应的权限。
  • /v1/orders: 订单管理。此端点用于下单(买入或卖出指定数量的加密货币)、查询现有订单的状态、以及取消未成交的订单。通过这个端点,开发者可以构建自动化交易策略和订单管理系统。详细的订单参数,如订单类型(市价单、限价单等)、价格、数量等,都需要在请求中正确指定。
  • /v1/candles/{market}: 获取蜡烛图数据。这个端点提供历史价格数据,以蜡烛图的形式呈现。 {market} 需要替换为具体的市场代码,例如 KRW-BTC 表示韩元交易的比特币市场。蜡烛图数据对于技术分析至关重要,可以帮助交易者识别趋势和潜在的交易机会。不同时间周期的蜡烛图(如1分钟、5分钟、1小时、1天)可以通过不同的API参数进行指定。
  • /v1/ticker: 获取当前市场行情信息。这个端点提供指定市场(如 KRW-BTC )的实时行情数据,包括最新成交价、最高价、最低价、成交量等。这些数据对于快速了解市场动态和做出交易决策至关重要。返回的数据通常是快照式的,反映了当前时刻的市场状态。
  • /v1/trades/ticks: 获取最近成交记录。此端点提供最近发生的交易记录列表,包括成交时间、成交价格、成交数量等信息。通过分析这些成交记录,可以了解市场的活跃度和供需情况。交易记录的排序通常是按照成交时间倒序排列,最近成交的记录会显示在前面。可以通过参数来限制返回的交易记录数量。

常见问题与注意事项

  • 速率限制与请求优化: Upbit API 为了保障服务器稳定运行,实施了速率限制机制,对用户在特定时间窗口内可以发送的请求数量进行了严格限制。这意味着您的交易机器人或数据抓取程序必须谨慎管理其请求频率,以避免超出限制并被暂时或永久阻止访问。详细的速率限制规则在 Upbit 官方 API 文档中针对每个不同的端点进行了明确说明。例如,获取市场行情的端点可能允许更高的请求频率,而下单交易的端点则可能更为严格。为了优化您的请求策略,建议实施以下策略:
    • 缓存机制: 对于不经常变动的数据,例如交易对信息,可以本地缓存,减少重复请求。
    • 批量请求: 如果 API 支持,尽量将多个请求合并为一个批量请求,减少总的请求次数。
    • 指数退避: 一旦遇到速率限制,采用指数退避算法进行重试,逐步增加重试间隔,避免持续触发限制。
    • 负载均衡: 如果有多个 API 密钥,可以将请求分散到不同的密钥上,从而提高整体吞吐量。
  • 错误处理与异常应对: 在使用 Upbit API 的过程中,API 请求并非总能成功执行,可能会因为各种原因失败,例如网络问题、服务器错误、无效的 API 密钥等。因此,建立完善的错误处理机制至关重要。正确的错误处理不仅可以保证程序的健壮性,还可以帮助您快速定位和解决问题。建议您:
    • 记录详细日志: 记录每次 API 请求的详细信息,包括请求参数、响应状态码、响应内容等,方便日后排查问题。
    • 区分错误类型: 根据 API 返回的状态码和错误信息,区分不同类型的错误,例如速率限制错误、认证错误、参数错误等,并采取相应的处理措施。
    • 实施重试机制: 对于一些可以重试的错误,例如网络错误或服务器错误,可以设置一定的重试次数和重试间隔。
    • 报警机制: 对于一些严重的错误,例如认证错误或交易失败,可以发送报警通知,提醒您及时处理。
  • 数据安全与密钥保护: 您的 Upbit API 密钥是访问您的 Upbit 账户的凭证,必须像对待银行密码一样妥善保管。一旦密钥泄露,他人就可以利用您的密钥进行交易或提取资金,给您造成经济损失。请务必采取以下措施保护您的 API 密钥:
    • 不要在公开场合泄露密钥: 不要将密钥发布到公共论坛、社交媒体或代码仓库中。
    • 使用环境变量存储密钥: 不要将密钥硬编码到代码中,而是使用环境变量或配置文件存储密钥。
    • 定期更换密钥: 定期更换您的 API 密钥,即使密钥没有泄露,也可以降低风险。
    • 启用 IP 限制: 在 Upbit 账户设置中,可以限制 API 密钥只能从特定的 IP 地址访问,防止他人利用您的密钥从其他 IP 地址进行攻击。
  • 市场代码规范与有效性验证: 在 Upbit API 中,市场代码用于唯一标识一个交易对,例如 KRW-BTC 表示韩元计价的比特币交易对, BTC-ETH 表示比特币计价的以太坊交易对。市场代码的正确性至关重要,如果使用错误的 market code,API 请求可能会失败,或者返回错误的数据。在使用市场代码时,请务必注意以下几点:
    • 区分计价货币和标的货币: 市场代码由两部分组成,分别是计价货币和标的货币,中间用短横线分隔。计价货币在前,标的货币在后。例如, KRW-BTC 中, KRW 是计价货币, BTC 是标的货币。
    • 参考官方市场代码列表: Upbit 官方会定期更新市场代码列表,请务必参考最新的市场代码列表,确保使用的市场代码有效。
    • 验证市场代码的有效性: 在发送 API 请求之前,可以先调用 Upbit 提供的 API 接口验证市场代码的有效性。
  • 参数类型一致性与数据格式校验: Upbit API 对请求参数的类型有严格的要求,例如整数、浮点数、字符串等。如果传递的参数类型不正确,API 请求可能会失败。为了避免参数类型错误,建议您:
    • 仔细阅读 API 文档: API 文档中会明确说明每个参数的类型和取值范围。
    • 使用类型安全的编程语言: 使用类型安全的编程语言,例如 Java 或 C#,可以在编译时检查参数类型错误。
    • 进行数据格式校验: 在发送 API 请求之前,对参数进行数据格式校验,确保参数符合 API 的要求。可以使用正则表达式或其他校验工具进行校验。
  • 签名验证流程与安全交易保障: 对于一些敏感操作,例如下单、撤单等,Upbit API 需要进行额外的签名验证,以确保请求的合法性和安全性。签名验证的目的是防止他人伪造您的请求,保护您的账户安全。签名验证的具体方法在 Upbit API 文档中有详细说明。一般来说,签名验证的流程如下:
    • 构造请求字符串: 将请求参数按照一定的规则排序,并拼接成一个字符串。
    • 使用私钥对字符串进行签名: 使用您的 Upbit 私钥对请求字符串进行签名。
    • 将签名添加到请求头中: 将签名添加到 API 请求的请求头中。
    请务必仔细阅读 API 文档,了解签名验证的具体方法,并确保您的签名算法正确无误。
  • WebSocket API 实时数据流: Upbit 除了提供 REST API 外,还提供了 WebSocket API,用于实时推送市场数据,例如实时行情、实时成交等。如果您需要实时数据,WebSocket API 是一个更好的选择。使用 WebSocket API 可以避免频繁轮询 REST API,减少服务器压力,提高数据更新速度。使用 WebSocket API 的步骤如下:
    • 建立 WebSocket 连接: 使用 WebSocket 客户端连接到 Upbit 的 WebSocket 服务器。
    • 订阅数据频道: 向 WebSocket 服务器发送订阅请求,订阅您需要的数据频道,例如行情频道、成交频道等。
    • 接收实时数据: WebSocket 服务器会实时推送数据到您的客户端。
  • 官方文档权威性与持续学习: Upbit API 文档是您使用 Upbit API 的最佳指南。API 文档中包含了 API 的所有信息,包括 API 端点、请求参数、响应格式、错误代码等。请务必仔细阅读官方文档,了解 API 的最新信息和使用方法。由于 Upbit API 可能会不定期更新,因此建议您定期查看官方文档,了解 API 的最新变化。
  • 调试工具与问题诊断: 在开发 Upbit API 应用时,调试是一个必不可少的环节。使用调试工具可以帮助您快速定位和解决问题。常用的调试工具包括:
    • Postman: Postman 是一个强大的 API 调试工具,可以用于发送 API 请求、查看 API 响应、设置请求头等。
    • Wireshark: Wireshark 是一个网络抓包工具,可以用于捕获网络数据包,分析 API 请求和响应的详细信息。
    • 浏览器开发者工具: 浏览器开发者工具可以用于查看 API 请求和响应的详细信息,以及调试 JavaScript 代码。

示例代码:下单

以下是一个使用 Python 语言通过 Upbit API 下单的示例。此示例演示了如何构建身份验证令牌并发送 POST 请求到 Upbit 的订单 API 端点。

import jwt import uuid import hashlib from urllib.parse import urlencode import requests

access key = "YOUR ACCESS KEY" # 替换为你的 Upbit 访问密钥 secret key = "YOUR SECRET KEY" # 替换为你的 Upbit 安全密钥

market = "KRW-BTC" # 市场代码,例如韩元交易对的比特币 (KRW-BTC),务必根据实际交易对修改 side = "bid" # 买入 (bid) 或 卖出 (ask),指定订单类型 volume = 0.0001 # 数量,例如购买或出售的 BTC 数量 price = 50000000 # 价格,指定订单的价格 order_method = "limit" # 市价 (price) 或 限价 (limit),市价单会立即以最佳可用价格成交,限价单会在指定价格或更好价格成交

query = { 'market': market, 'side': side, 'volume': str(volume), 'price': str(price), 'ord type': order method, } # 构建订单查询参数

query_string = urlencode(query).encode() # 将查询参数编码为 URL 格式并转换为字节

m = hashlib.sha512() m.update(query string) query hash = m.hexdigest() # 计算查询参数的 SHA512 哈希值,用于身份验证

payload = { 'access key': access key, 'nonce': str(uuid.uuid4()), 'query hash': query hash, 'query hash alg': 'SHA512', } # 构建 JWT 载荷,包含访问密钥、随机数和查询哈希值

jwt token = jwt.encode(payload, secret key, algorithm='HS256') authorization = f'Bearer {jwt_token}' # 使用 HS256 算法和安全密钥对载荷进行编码,生成 JWT 令牌,并构建授权头部

url = "https://api.upbit.com/v1/orders" # Upbit 订单 API 端点

headers = {"Authorization": authorization} # 设置请求头部,包含授权令牌

data = query # 将查询参数作为数据发送到 API

res = requests.post(url, headers=headers, data=data) # 发送 POST 请求到 Upbit API

print(res.status_code) # 打印HTTP状态码

if res.status code == 201: order info = res.() print(f"订单已提交,订单 ID: {order info['uuid']}") # 如果订单提交成功,则打印订单 ID else: print(f"下单失败: {res.status code}, {res.text}") # 如果订单提交失败,则打印错误消息

请注意,以上代码仅为示例,你需要根据你的实际需求进行修改,例如处理不同的订单类型(市价单、限价单等)、交易对和数量。务必妥善保管你的 API 密钥,避免泄露。在进行真实交易前,建议使用 Upbit 提供的沙盒环境进行测试,以确保代码的正确性和安全性。在实际使用中,应加入错误处理机制,例如捕获网络异常、API 速率限制等,并进行适当的重试或告警。风险控制至关重要,请务必谨慎处理,设置合理的止损止盈策略。