交易新手如何玩转Upbit API?独家秘籍大公开!

时间:2025-03-08 分类:前沿 浏览:55

Upbit 交易所 API 教程

1. 简介

Upbit 交易所是韩国领先的加密货币交易所之一,在韩国市场拥有举足轻重的地位,为全球用户提供广泛的数字资产交易服务。Upbit 以其安全性、用户友好的界面和创新的交易功能而闻名。它不仅提供包括比特币 (BTC)、以太坊 (ETH) 等主流加密货币的交易,还支持众多新兴的数字资产,拥有丰富的交易对,满足不同投资者的需求。其挂单薄深度和流动性在亚洲交易所中也具备优势,是专业交易者和机构投资者的重要选择。

本详细 Upbit API 教程专为开发者量身定制,旨在提供全面的指导和技术支持,帮助他们充分利用 Upbit 的 API 接口。API (应用程序编程接口) 允许开发者通过编程方式访问 Upbit 的交易平台,从而实现自动化交易策略、数据分析和集成到其他应用程序。本教程将深入探讨 Upbit API 的各个方面,包括身份验证、市场数据获取、订单管理和账户信息查询等。通过学习本教程,开发者可以快速掌握 Upbit API 的使用方法,并构建高效、稳定的交易应用程序,最大限度地利用 Upbit 平台提供的各种功能。

2. 准备工作

在使用Upbit API进行交易或数据分析之前,必须完成一系列准备工作,以确保安全且高效地访问Upbit平台的功能。

  • Upbit账户: 要充分利用Upbit API,您需要注册并验证一个Upbit账户。 账户验证可能需要提供身份证明文件,以符合交易所的安全和合规要求。请确保您的账户已完成必要的身份验证流程。
  • API Key和Secret Key: 在Upbit网站的API管理页面生成API Key和Secret Key。API Key用于标识您的应用程序,Secret Key则用于对您的请求进行签名,确保请求的安全性。 请务必极其谨慎地保管您的Secret Key,切勿将其泄露给任何第三方。 泄露Secret Key可能导致您的账户被恶意访问和资金损失。建议您定期更换API Key和Secret Key,以提高安全性。考虑使用环境变量或安全的密钥管理系统来存储您的密钥,而不是直接在代码中硬编码。
  • 编程环境: 选择一个适合您的编程语言和需求的编程环境。常用的选择包括Python、Node.js、Java、Go等。根据您的选择,安装相应的开发工具包(SDK)和依赖项。例如,对于Python,您可能需要安装 pip 包管理器;对于Node.js,您需要 npm yarn 包管理器。确保您的编程环境已正确配置,以便能够顺利地编写和运行API调用代码。
  • 必要的HTTP请求库: 使用Upbit API需要通过HTTP请求与Upbit服务器进行通信。根据您选择的编程语言,安装相应的HTTP请求库。例如,在Python中,常用的库是 requests aiohttp (用于异步请求);在Node.js中,常用的库是 axios node-fetch 。安装这些库后,您可以使用它们发送GET、POST、PUT、DELETE等HTTP请求,并处理来自Upbit服务器的响应。确保您熟悉所选库的用法,例如设置请求头、处理JSON数据、处理错误等。考虑使用具有重试机制和速率限制功能的库,以提高API调用的稳定性和可靠性。

3. API 认证

Upbit API采用基于JWT(JSON Web Token)的认证机制,确保接口调用的安全性与合法性。要访问Upbit的API,您需要生成并使用一个有效的JWT,该JWT由您的API Key和Secret Key生成。API Key和Secret Key是您在Upbit平台注册并创建API密钥后获得的唯一凭证。

JWT的生成过程通常包括以下步骤:

  1. 获取API Key和Secret Key: 在Upbit开发者平台注册并创建API密钥,获得API Key(用于标识您的应用程序)和Secret Key(用于签名JWT)。请妥善保管您的Secret Key,避免泄露。
  2. 构建JWT Payload: Payload是JWT中包含声明的部分,通常包含一些与用户或应用程序相关的信息,例如用户ID、权限等。对于Upbit API,可能需要包含一些特定的声明,例如API请求的权限范围。
  3. 使用Secret Key签名JWT: 使用Secret Key对JWT的Header和Payload进行签名,生成JWT签名。签名算法通常是HMAC SHA256 (HS256)。
  4. 构建完整的JWT: 将Header、Payload和签名组合成一个完整的JWT字符串。

生成JWT后,您需要在每个API请求的HTTP Header中携带该JWT。通常,您会将JWT放在 Authorization Header中,并使用 Bearer scheme。例如:

Authorization: Bearer YOUR_GENERATED_JWT

请注意,JWT具有有效期,过期后将无法使用。您需要定期刷新JWT以确保API请求的有效性。Upbit API文档中会详细说明JWT的有效期以及刷新机制。

通过使用JWT认证,Upbit API能够安全地验证请求的来源,并确保只有经过授权的应用程序才能访问API资源。请务必仔细阅读Upbit API文档,了解有关JWT认证的详细信息和最佳实践。

生成JWT (Python示例):

使用Python生成JSON Web Token (JWT) 的示例代码,展示了如何利用 jwt 库创建包含声明和签名的安全令牌。

import jwt
import uuid
import hashlib

导入必要的Python库。 jwt 用于JWT的编码和解码, uuid 用于生成唯一标识符, hashlib (虽然示例中未直接使用,但在实际应用中常用于增强安全性) 用于哈希处理。

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

定义用于签名JWT的Access Key和Secret Key。 请务必将 YOUR_ACCESS_KEY YOUR_SECRET_KEY 替换为您自己的安全凭证。 Access Key通常用于标识您的应用程序,而Secret Key则是用于验证令牌完整性的密钥,必须妥善保管,避免泄露。

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

定义一个名为 generate_jwt() 的函数,该函数负责生成JWT。 在 payload 字典中,定义了JWT的声明(claims)。 access_key 是一个声明,通常用于标识客户端或应用程序。 nonce (Number used once) 是一个随机的、唯一的字符串,用于防止重放攻击。每次生成JWT时都应生成一个新的 nonce 值。 使用 uuid.uuid4() 生成UUID (Universally Unique Identifier),并将其转换为字符串。

jwt_token = jwt.encode(payload, secret_key, algorithm='HS256')
return jwt_token

使用 jwt.encode() 函数对 payload 进行编码,生成JWT。 该函数接受三个参数: payload (要编码的数据), secret_key (用于签名的密钥), 和 algorithm (签名算法)。 在本例中,使用 HMAC-SHA256 ( HS256 ) 算法。 HS256是一种对称加密算法,意味着用于签名和验证令牌的密钥是相同的。 函数返回编码后的JWT字符串,并将其赋值给 jwt_token 变量。然后,该函数返回 jwt_token

jwt_token = generate_jwt()

调用 generate_jwt() 函数生成JWT,并将结果存储在 jwt_token 变量中。

print(jwt_token)

将生成的JWT打印到控制台。 该JWT可以用于身份验证和授权,例如,在HTTP请求的 Authorization 头部中发送JWT,服务器可以验证JWT的签名,并根据JWT中的声明来确定用户的身份和权限。

请求头格式:

Authorization 请求头用于在 HTTP 请求中传递认证信息,遵循 "Bearer" 方案,后跟 JSON Web Token (JWT)。JWT 令牌是经过编码的字符串,包含了经过签名验证的用户身份和授权信息。服务器会验证 JWT 的签名,并从中提取信息以确认用户的身份以及该用户被授予的访问权限。此头部对于需要用户认证才能访问的 API 接口至关重要,确保只有经过授权的用户才能执行操作。

完整的请求头格式如下:

Authorization: Bearer {jwt_token}

其中, {jwt_token} 需要替换为实际的 JWT 字符串。JWT 令牌通常由三部分组成:头部(Header)、载荷(Payload)和签名(Signature),它们通过句点(.)分隔。每个部分都经过 Base64 编码。

4. 常用API接口

以下是一些常用的Upbit API接口,这些接口允许开发者访问Upbit平台的数据和功能,进行自动化交易、数据分析等操作。正确使用API密钥和遵守Upbit的使用条款至关重要。

4.1 获取市场行情

  • GET /v1/market/all: 获取交易所提供的所有交易对的市场行情快照。该接口提供实时更新的市场数据,包括但不限于最高价、最低价、开盘价、收盘价、成交量、成交额等关键指标。 通过调用此接口,用户可以全面了解当前市场的整体交易动态,为投资决策提供基础数据支持。

示例: 获取Upbit市场代码

使用Python的requests库,可以轻松获取Upbit交易所支持的所有交易市场代码。

import requests

定义API的URL和请求头。Upbit API的基准URL是 https://api.upbit.com/v1 。 我们将使用 /market/all 端点来获取所有市场信息。 设置请求头以指定我们期望的响应格式为JSON。

url = "https://api.upbit.com/v1/market/all"
headers = {"Accept": "application/"}

使用 requests.get() 方法发送GET请求到Upbit API。将定义的URL和headers作为参数传递给该方法。 这将发送一个HTTP请求到Upbit服务器,请求所有市场信息。

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

打印响应内容。 response.() 方法将服务器返回的JSON格式的响应数据解析为Python字典或列表,方便进一步处理。 输出结果将包含Upbit支持的所有交易市场的详细信息,例如市场代码、市场名称等。 注意处理可能出现的异常,例如网络错误或API调用错误,以确保程序的健壮性。

print(response.())

响应示例:

JSON 数组,包含市场信息:

[ { "market": "KRW-BTC", "korean name": "비트코인", "english name": "Bitcoin", "market_warning": "NONE/CAUTION/WATCHING", "trade_id": 123456789, "trade_timestamp": 1678886400000, "trade_price": 45000000.0, "trade_volume": 0.001, "prev_closing_price": 44000000.0, "change": "RISE/FALL/EVEN", "change_price": 1000000.0, "signed_change_price": 1000000.0, "change_rate": 0.0227, "signed_change_rate": 0.0227, "high_price": 45500000.0, "low_price": 43500000.0, "trade_date": "20230315", "trade_time": "000000", "trade_date_kst": "20230315", "trade_time_kst": "090000", "trade_ticks": [ { "sequential_id": 1, "timestamp": 1678886400000, "price": 45000000.0, "volume": 0.001, "side": "ASK/BID" } ] }, { "market": "KRW-ETH", "korean name": "이더리움", "english name": "Ethereum", "market_warning": "NONE/CAUTION/WATCHING", "trade_id": 987654321, "trade_timestamp": 1678886400000, "trade_price": 3000000.0, "trade_volume": 0.01, "prev_closing_price": 2900000.0, "change": "RISE/FALL/EVEN", "change_price": 100000.0, "signed_change_price": 100000.0, "change_rate": 0.0345, "signed_change_rate": 0.0345, "high_price": 3100000.0, "low_price": 2800000.0, "trade_date": "20230315", "trade_time": "000000", "trade_date_kst": "20230315", "trade_time_kst": "090000", "trade_ticks":[ { "sequential_id": 2, "timestamp": 1678886400000, "price": 3000000.0, "volume": 0.01, "side": "ASK/BID" } ] }, ... ]

  • GET /v1/candles/{candle_type}: 获取指定类型的K线数据。 candle_type 参数用于指定K线类型,具体说明如下:
    • minutes/{unit} : 分钟K线。 unit 表示分钟数,例如 minutes/1 表示 1 分钟 K 线, minutes/5 表示 5 分钟 K 线。支持的 unit 包括 1, 3, 5, 15, 30, 60, 240。
    • days : 日K线。表示一天的开盘价、收盘价、最高价和最低价。
    • weeks : 周K线。表示一周的开盘价、收盘价、最高价和最低价。
    • months : 月K线。表示一个月的开盘价、收盘价、最高价和最低价。

    请求参数包括: market (市场代码,例如 KRW-BTC)、 to (结束时间,UTC 时间,格式为 yyyy-MM-ddTHH:mm:ssZ 或 yyyy-MM-dd HH:mm:ss)、 count (K 线数量,最多 200 根)。 如果未指定 to ,则返回最新的 K 线数据。 例如: ?market=KRW-BTC&to=2023-10-26T00:00:00Z&count=50

    响应数据包含: market , candle_date_time_utc (UTC 时间), candle_date_time_kst (KST 时间), opening_price (开盘价), high_price (最高价), low_price (最低价), trade_price (收盘价), timestamp (时间戳), candle_acc_trade_price (累计交易金额), candle_acc_trade_volume (累计交易量), unit (分钟봉 단위).

  • 示例 (获取5分钟K线):

    import requests

    market = "KRW-BTC" :定义交易市场,这里是韩元计价的比特币市场。您可以根据需要修改为其他交易对,例如 "ETH-BTC" (以太坊/比特币)。
    unit = 5 :指定K线的时间周期,单位为分钟。例如, unit = 1 表示1分钟K线, unit = 15 表示15分钟K线。
    url = f"https://api.upbit.com/v1/candles/minutes/{unit}?market={market}&count=200" :构造API请求URL。 Upbit API允许请求不同时间粒度的K线数据。 /minutes/{unit} 指定了请求分钟K线, market 参数指定交易市场, count 参数限制了返回K线数据的数量。Upbit API 对单次请求返回的数据条数有限制,通常 count 最大值为200。如果需要更多数据,需要分页请求。
    headers = {"Accept": "application/"} :设置HTTP请求头,声明接受JSON格式的响应数据。 建议明确指定 Accept 头部,确保服务器返回期望的数据格式。

    response = requests.get(url, headers=headers) :使用 requests 库发送GET请求到Upbit API,并传递请求头信息。 确保安装了 requests 库 ( pip install requests )。

    print(response.()) :解析并打印API响应的JSON数据。 response.() 方法将响应内容转换为Python字典或列表,方便后续处理。 请注意处理API请求可能出现的异常,例如网络错误或API返回错误码,以便程序能够正确处理这些情况。

    响应示例:

    以下示例展示了加密货币交易所API可能返回的蜡烛图(K线图)数据结构,数据以JSON格式呈现,方便解析和处理:

    [

    {

    "market": "KRW-BTC" ,
    解释: 交易市场代码。这里表示韩元(KRW)与比特币(BTC)的交易对。 交易所使用此代码来唯一标识交易对。

    "candle_date_time_utc": "2023-10-27T07:55:00" ,
    解释: 蜡烛图的起始时间(UTC时间)。 这是格林尼治标准时间,是全球标准时间。 此时间戳标志着该蜡烛图代表的时间段的开始。

    "candle_date_time_kst": "2023-10-27T16:55:00" ,
    解释: 蜡烛图的起始时间(韩国标准时间)。 KST 比 UTC 快 9 小时。 显示本地时区对于韩国交易者来说更为方便。

    "opening_price": 48760000.0 ,
    解释: 该时间段内第一个交易的价格。 开盘价是确定特定时间段内价格走势方向的重要指标。

    "high_price": 48784000.0 ,
    解释: 该时间段内达到的最高价格。 最高价可以帮助识别阻力位和潜在的突破点。

    "low_price": 48727000.0 ,
    解释: 该时间段内达到的最低价格。 最低价可以帮助识别支撑位和潜在的回调。

    "trade_price": 48762000.0 ,
    解释: 该时间段内最后一笔交易的价格,也称为收盘价。 收盘价是分析价格走势最重要的价格之一。

    "timestamp": 1698396926271 ,
    解释: 数据生成的时间戳(Unix 时间戳,毫秒)。 这表示服务器生成此数据的时间。

    "candle_acc_trade_price": 170974634.6653 ,
    解释: 该时间段内所有交易的总成交额(韩元)。 总成交额反映了该时间段内的市场活动强度。

    "candle_acc_trade_volume": 3.50617819 ,
    解释: 该时间段内交易的总交易量(比特币)。 总交易量表示交易了多少比特币。

    "unit": 5
    解释: 蜡烛图的时间单位。 这里表示 5 分钟的蜡烛图,意味着每个蜡烛图代表 5 分钟的交易数据。常见的单位包括 1 分钟、3 分钟、5 分钟、15 分钟、30 分钟、1 小时、4 小时、1 天、1 周、1 月等。

    },

    ...(更多蜡烛图数据)

    ]

    4.2 交易相关

    • GET /v1/accounts: 获取账户信息。此接口用于检索与特定用户或 API 密钥关联的账户的详细信息。返回的信息通常包括账户余额、可用资金、已用保证金以及其他与账户相关的属性。在使用此接口时,通常需要提供身份验证信息,例如 API 密钥或访问令牌,以确保只有授权用户才能访问账户数据。响应数据通常以 JSON 格式返回,包含账户 ID、账户类型、币种以及各种余额信息。

    示例:

    以下Python代码演示了如何使用JWT(JSON Web Token)对Upbit API进行身份验证。 它依赖于 requests jwt 库。 在开始之前,请确保已安装这些依赖项: pip install requests pyjwt pip install pyjwt[crypto]

    import requests import jwt import uuid

    access_key = "YOUR_ACCESS_KEY" # 替换为您的Access Key。Access Key在Upbit开放API管理页面中创建和获取。 secret_key = "YOUR_SECRET_KEY" # 替换为您的Secret Key。Secret Key与Access Key成对出现,务必妥善保管。

    def generate_jwt(): """ 生成用于身份验证的JWT令牌。 """ payload = { 'access_key': access_key, 'nonce': str(uuid.uuid4()), # nonce用于防止重放攻击,每次请求都应生成唯一的UUID。 }

    jwt_token = jwt.encode(payload, secret_key, algorithm='HS256')
    return jwt_token
    

    上述代码使用HS256算法对payload进行签名,生成JWT令牌。 HS256是一种对称加密算法,因此需要使用Secret Key进行签名和验证。

    jwt_token = generate_jwt()

    url = "https://api.upbit.com/v1/accounts" # Upbit API的账户信息端点。 headers = {"Authorization": f"Bearer {jwt_token}"} # 将JWT令牌添加到Authorization头部,指定Bearer认证方案。

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

    使用 requests 库发送GET请求,并包含包含JWT令牌的授权头部。

    print(response.())

    打印服务器响应的JSON内容。 通常,它包含您的Upbit账户信息。 确保检查 response.status_code 以处理潜在的错误,例如401未授权或429请求过多。

    响应示例:

    [ { "currency": "KRW", "balance": "1000000.0", "locked": "0.0", "avg buy price": 0, "avg buy price modified": false, "unit currency": "KRW" }, { "currency": "BTC", "balance": "0.001", "locked": "0.0", "avg buy price": 50000000, "avg buy price modified": false, "unit currency": "KRW" } ]

    上述响应示例展示了一个账户的余额信息,包含韩元 (KRW) 和比特币 (BTC) 两种加密货币的账户状态。

    • currency : 表示币种代码,例如 KRW 代表韩元,BTC 代表比特币。
    • balance : 表示可用余额,即用户可以自由支配的币种数量。例如,KRW 的可用余额为 1,000,000.0,BTC 的可用余额为 0.001。
    • locked : 表示锁定余额,通常是由于挂单或其他交易活动而冻结的币种数量。 在此示例中,两种货币的锁定余额均为 0.0,表示没有被冻结的资金。
    • avg buy price : 表示平均购买价格,用于计算盈亏。 此值可能为 0,表示没有历史购买记录,或者该币种是通过其他方式获得的。
    • avg buy price modified : 布尔值,指示平均购买价格是否被手动修改过。 false 表示未修改, true 表示已修改。
    • unit currency : 表示计价货币,即用于计算平均购买价格的货币。 在此示例中,计价货币均为 KRW。

    这些信息对于追踪账户资产、计算盈亏以及管理加密货币投资组合至关重要。 请注意,实际的 API 响应可能包含更多字段,具体取决于交易所或平台的实现方式。

  • POST /v1/orders: 下单。 此 API 端点用于提交新的交易订单,允许用户买入或卖出加密货币。 下单请求通常需要指定交易对、订单类型(例如市价单、限价单)、数量和价格(如果适用)。
  • 请求参数:

    • market : 市场代码 。 这是用于指定交易对的唯一标识符。例如, KRW-BTC 表示韩元 (KRW) 交易比特币 (BTC) 的市场。 请确保市场代码的准确性,因为它直接决定了交易的执行标的。
    • side : 订单类型 。指示您希望执行的交易方向。 bid 代表买入订单,即您希望以指定价格购买加密货币。 ask 代表卖出订单,即您希望以指定价格出售加密货币。 选择正确的订单类型对于成功执行您的交易至关重要。
    • volume : 数量 。 指定您希望买入或卖出的加密货币数量。当 side 设置为 ask (卖出) 时, volume 是必填参数,表示您希望出售的加密货币数量。请注意,数量必须是正数,并符合交易所规定的最小交易数量限制。
    • price : 价格 。 指示您希望买入或卖出加密货币的价格。 当 side 设置为 bid (买入) 时, price 是必填参数,表示您愿意支付的最高价格。 对于限价单,这是您希望成交的价格;对于市价单,此参数可能被忽略,因为交易将以当前市场最优价格执行。
    • ord_type : 订单类型 。 定义了订单的执行方式。 limit 表示限价单,以指定的价格或更好的价格执行。 price 表示市价买入订单,以当前市场最优价格立即买入指定数量的加密货币。 market 表示市价卖出订单,以当前市场最优价格立即卖出指定数量的加密货币。 选择合适的订单类型取决于您的交易策略和对价格滑点的容忍度。
    • identifier : 订单ID (可选) 。 允许您为订单指定一个自定义的唯一标识符。这对于跟踪和管理您的订单非常有用,尤其是在您同时提交多个订单时。 如果未提供,交易所通常会自动生成一个唯一的订单ID。

    示例:使用Python进行Upbit API交易身份验证

    本示例展示如何使用Python生成JSON Web Token (JWT) 以对Upbit API进行身份验证并执行交易操作。其中包括必要的库导入,密钥配置,JWT生成函数的实现以及发送订单请求的完整代码示例。

    导入必要的Python库:

    import requests  # 用于发送HTTP请求
    import jwt       # 用于生成JWT
    import uuid      # 用于生成唯一ID
    import hashlib   # 用于哈希运算 (虽然在此示例中未使用,但在实际应用中可能需要)
    

    接下来,配置您的Access Key和Secret Key。请务必妥善保管您的Secret Key,避免泄露。

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

    定义一个函数来生成JWT。该函数创建一个包含Access Key和随机nonce的payload,然后使用Secret Key对其进行签名。

    def generate_jwt():
        """生成用于Upbit API身份验证的JWT."""
        payload = {
            'access_key': access_key,
            'nonce': str(uuid.uuid4()),  # 使用UUID生成唯一的nonce
        }
        jwt_token = jwt.encode(payload, secret_key, algorithm='HS256')  # 使用HS256算法进行签名
        return jwt_token
    

    调用该函数以生成JWT Token:

    jwt_token = generate_jwt()
    

    现在,您可以构建API请求。以下是一个示例,展示如何使用生成的JWT Token下达限价买单。

    url = "https://api.upbit.com/v1/orders"  # Upbit订单API endpoint
    headers = {"Authorization": f"Bearer {jwt_token}"}  # 在请求头中包含JWT Token
    
    data = {
        "market": "KRW-BTC",       # 市场代码 (例如: 韩元-比特币)
        "side": "bid",            # 订单类型 (bid: 买入, ask: 卖出)
        "price": "50000000",      # 订单价格 (韩元)
        "ord_type": "limit",       # 订单类型 (limit: 限价单, price: 市价单)
        "volume": "0.0001",       # 订单数量 (比特币)
        "identifier": str(uuid.uuid4())  # 客户端生成的唯一ID,用于区分订单
    }
    

    使用 requests 库发送POST请求:

    response = requests.post(url, headers=headers, data=data)
    

    打印响应结果。这将显示API调用是否成功以及返回的任何信息。

    print(response.())  # 打印JSON格式的响应内容
    

    响应示例:

    一个成功的订单创建或查询请求会返回一个 JSON 对象,该对象包含了订单的详细信息。以下是一个响应示例,展示了订单的各项关键属性:

    { "uuid": "cdd9d897-4f38-4e48-9911-db6c4e3d7a32", "side": "bid", "ord type": "limit", "price": "50000000.0", "avg price": "0.0", "state": "wait", "market": "KRW-BTC", "created at": "2023-10-27T08:25:38+00:00", "volume": "0.0001", "remaining volume": "0.0001", "reserved fee": "0.005", "remaining fee": "0.005", "paid fee": "0.0", "locked": "5005.0", "executed volume": "0.0", "trades_count": 0 }

    字段解释:

    • uuid : 订单的唯一标识符,是一个UUID格式的字符串。
    • side : 订单方向,"bid" 表示买入(买单),"ask" 表示卖出(卖单)。
    • ord type : 订单类型,"limit" 表示限价单。其他常见的订单类型包括 "market" (市价单)。
    • price : 订单的指定价格,仅在限价单中有效。 市价单此项通常为null.
    • avg price : 订单的平均成交价格。 在订单完全成交前通常为 0.0。
    • state : 订单状态,"wait" 表示等待成交。 其他状态可能包括 "done" (已完成), "cancel" (已取消)。
    • market : 交易市场,例如 "KRW-BTC" 表示韩元交易比特币市场。
    • created at : 订单创建时间,采用 ISO 8601 格式。
    • volume : 订单的原始数量。
    • remaining volume : 订单的剩余未成交数量。
    • reserved fee : 预留的手续费。
    • remaining fee : 剩余未支付的手续费。
    • paid fee : 已支付的手续费。
    • locked : 锁定金额,通常是订单价格乘以数量加上手续费。
    • executed volume : 已成交数量。
    • trades_count : 成交笔数。
  • GET /v1/order: 查询订单信息。 使用此接口可以根据订单 UUID 查询订单的详细信息。 请求参数包括订单的 UUID。 成功响应将返回包含订单详细信息的 JSON 对象,如上所示。 查询特定订单信息对于追踪订单状态和历史记录至关重要。
  • 请求参数:

    • uuid : 订单的唯一通用识别码 (UUID)。UUID 是一个 128 位的标识符,用于在系统中唯一标识一个订单,例如:`a1b2c3d4-e5f6-7890-1234-567890abcdef`。 使用 UUID 查询可以保证订单的唯一性和准确性。 (或)
    • identifier : 订单的系统内部ID。 这个ID是系统自动生成的唯一数字标识符,用于在数据库中定位订单记录。例如: `123456789`。 虽然使用 ID 可以快速查找订单,但在分布式系统中,建议优先使用 UUID,以避免ID冲突和数据一致性问题。

    示例: 使用Python生成JWT并取消Upbit订单

    本示例展示如何使用Python生成JSON Web Token (JWT) 并通过Upbit API取消指定订单。请确保您已安装必要的Python库: requests PyJWT

    pip install requests pyjwt
    

    代码示例:

    import requests
    import jwt
    import uuid
    import hashlib
    
    access_key = "YOUR_ACCESS_KEY"  # 替换为您的Upbit Access Key
    secret_key = "YOUR_SECRET_KEY"  # 替换为您的Upbit Secret Key
    

    以上代码段导入必要的库,并设置了 access_key secret_key 。请务必替换为您在Upbit交易所申请的真实密钥。确保密钥的安全性,避免泄露。

    def generate_jwt():
        """
        生成用于Upbit API认证的JWT.
        """
        payload = {
            'access_key': access_key,
            'nonce': str(uuid.uuid4()), # 使用UUID生成唯一随机数
        }
        jwt_token = jwt.encode(payload, secret_key, algorithm='HS256')
        return jwt_token
    

    generate_jwt() 函数创建包含 access_key nonce (用于防止重放攻击)的payload。然后,它使用 secret_key HS256 算法对payload进行签名,生成JWT。 nonce 字段使用UUID确保每次请求的唯一性,增强安全性。

    jwt_token = generate_jwt()
    

    调用 generate_jwt() 函数获取生成的 JWT token.

    order_uuid = "YOUR_ORDER_UUID"  # 替换为要取消的订单 UUID
    url = f"https://api.upbit.com/v1/order?uuid={order_uuid}"
    headers = {"Authorization": f"Bearer {jwt_token}"}
    

    这里需要替换 order_uuid 为您需要取消的订单的UUID。 构建请求URL,其中包含订单UUID。 请求头包含Authorization字段,其值为 "Bearer " 后跟生成的JWT token。

    response = requests.delete(url, headers=headers)
    

    发送DELETE请求到Upbit API以取消订单。 使用 requests.delete() 函数发送DELETE请求,并传递包含JWT的请求头。

    print(response.())
    

    打印服务器的响应。 使用 response.() 解析JSON响应,并将其打印到控制台。 响应将包含有关取消订单操作是否成功的详细信息。

    注意:

    • 请务必使用有效的Access Key和Secret Key。
    • 确保您的Access Key具有取消订单的权限。
    • 订单UUID必须是有效的,并且属于您。
    • API请求频率有限制,请注意Upbit的API文档以避免触发限流。

    此代码示例展示了使用JWT进行身份验证并取消Upbit订单的基本流程。您可以根据您的具体需求进行修改和扩展。

    请求参数:

    • uuid : 订单 UUID(通用唯一识别码)。这是用于唯一标识订单的字符串,通常由系统自动生成,可以确保在全球范围内订单的唯一性。使用 UUID 可以在不暴露内部订单 ID 的情况下引用特定订单。 (或)
    • identifier : 订单 ID。这是一个内部使用的订单标识符,通常是一个整数或字符串,由系统按照一定的规则生成。开发者可以使用订单 ID 更直接地访问和操作订单数据,这通常用于系统内部的订单管理和查询。

    示例: 使用Python生成JWT并调用Upbit API取消订单

    该示例展示了如何使用Python生成JSON Web Token (JWT) 并利用其调用Upbit API取消指定订单。

    需要安装必要的Python库: requests PyJWT 。可以使用以下命令进行安装:

    pip install requests pyjwt

    以下代码展示了生成JWT并调用Upbit API的完整流程:

    import requests
    import jwt
    import uuid
    
    access_key = "YOUR_ACCESS_KEY"  # 替换为您的Access Key
    secret_key = "YOUR_SECRET_KEY" # 替换为您的Secret Key
    
    def generate_jwt():
        """
        生成用于身份验证的JWT。
    
        Returns:
            str: 生成的JWT字符串。
        """
        payload = {
            'access_key': access_key,
            'nonce': str(uuid.uuid4()),  # 确保nonce的唯一性,防止重放攻击
        }
    
        jwt_token = jwt.encode(payload, secret_key, algorithm='HS256')
        return jwt_token
    
    jwt_token = generate_jwt()
    
    # 替换为要取消的订单的UUID
    order_uuid = "cdd9d897-4f38-4e48-9911-db6c4e3d7a32"
    url = f"https://api.upbit.com/v1/order?uuid={order_uuid}"
    headers = {"Authorization": f"Bearer {jwt_token}"}
    
    try:
        response = requests.delete(url, headers=headers)
        response.raise_for_status()  # 检查HTTP状态码,如果不是200则抛出异常
        print(response.())  # 打印API响应,通常会包含取消订单的结果
    except requests.exceptions.RequestException as e:
        print(f"请求失败: {e}")
    except jwt.exceptions.JWTError as e:
        print(f"JWT生成失败: {e}")
    

    代码解释:

    • access_key secret_key : 必须替换为您的Upbit API Access Key和Secret Key。 这些密钥用于生成JWT以进行身份验证。
    • generate_jwt() 函数: 该函数创建一个包含 access_key 和唯一 nonce 的payload, 然后使用 secret_key HS256 算法对其进行签名, 生成JWT。 nonce 是一个随机生成的UUID, 用于防止重放攻击。
    • jwt.encode() : 使用PyJWT库对payload进行编码,生成JWT。
    • requests.delete() : 向Upbit API发送DELETE请求,以取消指定UUID的订单。 Authorization header 包含生成的JWT,用于身份验证。
    • response.raise_for_status() : 该方法在响应状态码不是2xx的情况下抛出HTTPError异常,方便进行错误处理。
    • 异常处理: 代码包含try-except块来处理可能的 requests jwt 异常。

    注意:请务必妥善保管您的Access Key和Secret Key,避免泄露。

    5. WebSocket API

    Upbit交易所还提供强大的WebSocket API,专为需要实时、低延迟市场行情数据的高级用户和交易机器人设计。与REST API的轮询模式不同,WebSocket API采用推送模式,服务器主动向客户端发送数据更新,从而显著降低了延迟并提高了效率。

    WebSocket API的使用相较于REST API更为复杂,需要建立持久的连接和维护订阅关系。用户必须首先建立一个WebSocket连接,然后通过发送特定的订阅消息来选择需要接收的数据频道,例如交易、行情深度或最新成交价等。Upbit WebSocket API支持多种数据频道,允许用户根据自身需求定制数据流。

    开发者需要仔细阅读Upbit的WebSocket API文档,了解连接建立、消息格式、订阅规则以及错误处理等细节。不同的编程语言和环境可能需要不同的WebSocket客户端库来实现连接和数据处理。正确配置心跳机制对于保持连接的稳定至关重要。

    通过WebSocket API,用户可以构建高性能的交易策略,实时监控市场动态,并快速响应价格变化。然而,需要注意的是,WebSocket连接的数量和数据请求频率可能会受到限制,开发者需要合理规划资源使用,以避免触发限流或其他限制。

    6. 错误处理

    Upbit API 遵循标准的 HTTP 状态码约定,以便清晰地指示 API 请求的处理结果。理解并正确处理这些状态码对于构建健壮的应用程序至关重要。以下列举了一些常见的错误状态码及其含义:

    • 400 Bad Request(错误请求): 此状态码表明客户端发送的请求存在语法错误或缺少必要的参数。常见原因包括:请求体格式不正确、参数类型不匹配、参数值超出有效范围、缺少必需的请求头等。开发者应仔细检查请求参数,确保符合API文档的规范。API的响应体通常会包含更详细的错误信息,指出具体的错误字段和原因,以便快速定位问题。
    • 401 Unauthorized(未授权): 此状态码表示客户端未经过身份验证或提供的身份验证信息无效,无法访问受保护的API资源。通常是因为API密钥无效、过期或者没有足够的权限。开发者应检查API密钥是否正确配置,并确保已获得访问所需资源的授权。有些API可能会返回包含授权相关信息的响应头,例如`WWW-Authenticate`,可以帮助开发者了解具体的认证方式。
    • 429 Too Many Requests(请求过多): 此状态码表明客户端在单位时间内发送的请求数量超过了 Upbit API 规定的请求频率限制(Rate Limit)。为了保证服务的稳定性和公平性,Upbit对API请求的频率进行了限制。当客户端达到限制时,会返回此状态码。开发者应根据API文档中规定的频率限制,合理控制请求的发送频率,并实现重试机制,例如使用指数退避算法,以避免频繁触发此错误。响应头通常会包含 `Retry-After` 字段,指示客户端应该在多长时间后重试请求。

    针对不同的 HTTP 状态码,您需要采取相应的错误处理策略。 比如,对于 400 错误,需要修复请求参数;对于 401 错误,需要检查身份验证信息;对于 429 错误,需要降低请求频率。除了上述常见的状态码外,还可能遇到其他状态码,例如 500 Internal Server Error(服务器内部错误),表示服务器在处理请求时发生了未知的错误。API 的返回信息(通常是 JSON 格式)通常会包含更具体的错误细节,包括错误代码、错误消息以及可能的解决方案,这对于开发者进行调试和排查问题至关重要。务必仔细阅读API文档,了解各种错误状态码的含义以及相应的处理方法,以便构建健壮可靠的应用程序。

    7. 频率限制与API调用规范

    Upbit API 实施了严格的频率限制机制,旨在保障平台的稳定性和安全性,防止恶意滥用行为。 为了确保您的应用程序能够稳定运行,并避免因违反频率限制而被临时或永久禁用API访问权限,务必仔细阅读并严格遵守Upbit官方API文档中详细规定的频率限制策略。

    Upbit API的频率限制通常会根据不同的API端点、用户的认证级别以及时间窗口等因素进行调整。 您需要根据具体的API接口类型和您的账户级别,合理规划您的API请求频率。 常见的限制可能包括每分钟、每小时或每天允许的最大请求次数。 超过这些限制可能会导致API返回错误代码,例如 429 Too Many Requests,表明请求过多,需要稍后重试。

    为了有效地管理API请求频率,建议采取以下措施:

    • 阅读官方文档: 仔细阅读Upbit官方API文档,了解每个API端点的具体频率限制。
    • 实施请求队列: 创建一个请求队列,将需要发送的API请求放入队列中,并按照一定的速率从队列中取出请求进行发送。
    • 使用延迟策略: 在每次API请求后,增加一个短暂的延迟时间,以控制请求的发送速率。
    • 缓存API响应: 对于不经常变化的数据,可以考虑缓存API响应结果,避免频繁请求相同的API。
    • 处理错误代码: 当API返回错误代码 429 时,应用程序应该能够正确处理,例如等待一段时间后重试,或者降低请求频率。
    • 监控API使用情况: 监控您的应用程序的API使用情况,及时发现并解决潜在的频率限制问题。

    除了频率限制外,Upbit API还可能对请求的内容和格式进行限制。 请务必确保您的API请求符合Upbit的规范,避免发送无效或恶意请求。 频繁发送不符合规范的请求也可能导致您的API访问权限被限制。

    请务必注意,本文档仅提供一些常用的API接口示例,以及关于频率限制的一般性建议。为了获取最准确、最全面的API信息和参数说明,以及最新的频率限制策略,请务必参考Upbit官方API文档。 Upbit可能会定期更新其API文档和频率限制,因此建议您定期查阅官方文档,以确保您的应用程序始终符合最新的要求。

    相关推荐