跳到主要内容

跨市场整合指南

本指南演示了如何构建一个协调 BigONE 现货合约 API 行为的复杂交易应用程序。

我们使用标准的 期现套利 (Cash and Carry Arbitrage) 场景作为案例研究。这个场景非常适合学习,因为它需要:

  1. 数据同步: 从两个不同的市场系统获取并比较价格。
  2. 类型处理: 管理现货(字符串)与合约(数字)的严格数据要求差异。
  3. 类原子执行: 同时在两个不同的引擎上执行订单。

注意: 本指南侧重于 API 整合的 技术实现。不构成财务建议。


整合逻辑

要成功连接现货和合约市场,您的应用程序必须处理每个 API 的不同行为:

  1. 现货 API: 使用 字符串 保持精度。账户是独立的。
  2. 合约 API: 使用 数字。需要“反向”计算逻辑。
  3. 协调: 您必须计算“基差”(价格差)以决定何时触发工作流。

第一课:准备工作 (数据与计算)

要正确执行此操作,您必须比较 现货价格合约标记价格

  • 现货 API: GET https://api.big.one/api/v3/asset_pairs/{pair}/ticker
  • 合约 API: GET https://api.big.one/api/contract/v2/instruments

获取数据

import requests

# 1. 获取现货价格 (BTC-USDT)
spot_res = requests.get("https://api.big.one/api/v3/asset_pairs/BTC-USDT/ticker")
spot_price = float(spot_res.json()['price'])

# 2. 获取合约数据 (BTCUSD - 反向永续)
contract_res = requests.get("https://api.big.one/api/contract/v2/instruments")
instruments = contract_res.json()
target_contract = next(i for i in instruments if i['symbol'] == 'BTCUSD')

mark_price = target_contract['markPrice']
funding_rate = target_contract['fundingRate']

print(f"Spot: ${spot_price}, Contract: ${mark_price}")
print(f"Current Funding Rate: {funding_rate * 100}%")

第二课:仓位大小 (数学计算)

关键: 这是大多数开发者容易出错的地方。您必须根据合约类型计算正确的空头头寸大小。

场景: BTCUSD (反向合约)

  • 类型: 币本位 (反向)。
  • 单位: 1 张合约 = 1 USD。
  • 目标: 对冲 1 BTC。

公式:

合约数量 (张) = BTC 数量 × BTC 价格

示例:

  • 您持有 0.5 BTC
  • 价格为 $50,000
  • 价值 = $25,000。
  • 您必须做空 25,000 张合约

代码实现

def calculate_hedge_size(btc_amount, price):
# 对于反向 BTCUSD (1 张 = 1 USD)
contract_size = int(btc_amount * price)
return contract_size

# 示例
amount_to_hedge = 0.5 # BTC
execution_price = 50000

contracts_to_short = calculate_hedge_size(amount_to_hedge, execution_price)
print(f"对冲 {amount_to_hedge} BTC, 做空 {contracts_to_short} 张合约。")
# 输出: Short 25000 Contracts

第三课:执行 (对冲)

现在我们执行这两条腿。注意 API Payload 格式的差异。

步骤 1: 买入现货 (多头腿)

  • API: 现货 V3
  • 数据类型: 字符串 (严格精度)。
# 现货 Payload (买入 0.5 BTC)
spot_payload = {
"asset_pair_name": "BTC-USDT",
"side": "BID",
"type": "MARKET",
"amount": "0.5" # 字符串!
}
# requests.post(..., json=spot_payload)

步骤 2: 做空合约 (空头腿)

  • API: 合约 V2
  • 数据类型: 数字 (标准 JSON 数字)。
  • 动作: 先将 BTC 划转到合约账户!
# 合约 Payload (做空 25,000 张)
contract_payload = {
"symbol": "BTCUSD",
"side": "SELL", # 做空
"type": "MARKET",
"size": 25000, # 整数/数字!
"reduceOnly": False
}
# requests.post(..., json=contract_payload)
数据类型不匹配

注意,现货 API 要求 amount字符串 ("0.5"),而合约 API 接受 size数字 (25000)。混淆这两者是错误的常见来源。


第四课:维护与风险

套利是低风险,并非零风险。

1. 强平风险

即使您进行了对冲,您的合约仓位也有强平价格。

  • 反向合约: 如果价格 上涨,您的空头仓位会亏损 BTC。
  • 风险: 如果您的 BTC 保证金耗尽,您会在卖出现货 BTC 补仓 之前 被强平。
  • 解决方案: 保持低杠杆(例如 1倍 或 2倍)。套利不要使用 100倍杠杆。

2. 资金费率反转

  • 如果资金费率变为 负值,空头需要向多头支付费用。您将开始亏损。
  • 动作: 监控 fundingRate。如果持续为负,平掉双边仓位(卖出现货,买入平仓合约)。

3. 再平衡

  • 随着价格变化,由于反向合约与线性现货资产的非线性特性,您的对冲比率可能会略有漂移(虽然 1倍对冲通常很稳定)。
  • 定期重新计算 价值 = 数量 * 价格 并调整合约数量。

完整示例

此脚本计算正确的对冲比率并执行 期现套利 交易(做多现货 + 做空合约)。

import requests
import time
import jwt

# --- 配置 ---
SPOT_BASE = "https://api.big.one/api/v3"
CONTRACT_BASE = "https://api.big.one/api/contract/v2"
API_KEY = "YOUR_KEY"
SECRET_KEY = "YOUR_SECRET"

# 目标: 对冲 0.01 BTC
TARGET_BTC = 0.01
SPOT_PAIR = "BTC-USDT"
CONTRACT_SYM = "BTCUSD"

def get_headers():
token = jwt.encode({
"sub": API_KEY,
"nonce": int(time.time() * 1000000),
"iat": int(time.time()),
"exp": int(time.time()) + 60
}, SECRET_KEY, algorithm="HS256")
return {"Authorization": f"Bearer {token}", "Content-Type": "application/json"}

def run_arbitrage():
print("--- 开始套利执行 ---")

# 1. 获取价格
print("1. 获取市场数据...")
spot_ticker = requests.get(f"{SPOT_BASE}/asset_pairs/{SPOT_PAIR}/ticker").json()
spot_price = float(spot_ticker['price'])

contract_inst = requests.get(f"{CONTRACT_BASE}/instruments").json()
contract = next(i for i in contract_inst if i['symbol'] == CONTRACT_SYM)
mark_price = contract['markPrice']

basis = (mark_price - spot_price) / spot_price
print(f" 现货: {spot_price}, 标记: {mark_price}, 基差: {basis*100:.2f}%")

# 2. 计算数量
# 现货: 字符串, 精确数量
spot_qty_str = f"{TARGET_BTC:.6f}"

# 合约 (反向): 数量 = BTC * 价格
# 对冲价值 = 0.01 BTC * $50000 = $500 = 500 张
contract_qty_int = int(TARGET_BTC * mark_price)

print(f"2. 计算:")
print(f" 现货腿: 买入 {spot_qty_str} BTC")
print(f" 合约腿: 做空 {contract_qty_int} 张合约")

# 3. 执行 (类同时)
print("3. 执行中...")

# 腿 A: 买入现货
spot_payload = {
"asset_pair_name": SPOT_PAIR,
"side": "BID",
"type": "MARKET",
"amount": spot_qty_str # 字符串!
}
spot_res = requests.post(f"{SPOT_BASE}/viewer/orders", json=spot_payload, headers=get_headers())
print(f" 现货订单: {spot_res.status_code}")

# 腿 B: 做空合约
contract_payload = {
"symbol": CONTRACT_SYM,
"side": "SELL", # 做空
"type": "MARKET",
"size": contract_qty_int, # 整数!
"reduceOnly": False
}
cont_res = requests.post(f"{CONTRACT_BASE}/orders", json=contract_payload, headers=get_headers())
print(f" 合约订单: {cont_res.status_code}")

# 在生产环境中,检查部分成交并进行调整!

if __name__ == "__main__":
run_arbitrage()

结论

期现套利 策略是从加密市场赚取收益的经典低风险方法。成功取决于精确的执行和对 反向合约 机制的理解。

要点:

  • 数学很重要: 对于反向合约(如 BTCUSD),持仓数量 = BTC 数量 * 价格
  • API 差异: 记住现货 API 期望字符串,而合约 API 期望数字。
  • 监控: 关注 资金费率。如果长期为负,该策略可能会失去盈利能力。

下一步:

  • 自动化“再平衡”逻辑,随着资产价格变化调整您的对冲。
  • 探索使用 正向合约 (USDT 本位) 进行期现套利,计算更简单 (1 BTC = 1 Contract)。