作为一名在加密市场摸爬滚打5年的量化交易者,我第一次听说"资金费率套利"是在2021年牛市顶峰。当时 BTC 年化资金费率高达 200%+,而我身边的朋友通过三角对冲策略稳定吃到了其中的 80% 收益。今天我把这套方法的完整实现流程分享出来,从零开始手把手教学,让新手也能在 30 分钟内跑通第一笔套利交易。
一、资金费率套利是什么?先搞懂这三个概念
在开始写代码之前,我必须先用大白话解释清楚资金费率的基本原理。如果你跳过这一步直接看代码,大概率会在实盘操作时亏损。
1.1 永续合约与资金费率
与传统期货不同,加密货币的永续合约(Perpetual Swap)没有交割日期,理论上会永远存在。交易所为了保证合约价格与现货价格不会偏离太远,设立了"资金费率"机制:每 8 小时进行一次结算,如果合约价格高于现货,持有多头的一方需要向持有空头的一方支付资金费;反之则空头支付给多头。
这个资金费率(Funding Rate)就是我们的利润来源。举例说明:
假设当前 BTC 永续合约年化资金费率为 12%
你做多 1 BTC 等值的合约,同时在现货市场买入 1 BTC
每 8 小时你收到的资金 ≈ 本金 × 12% ÷ (365 × 3)
如果本金是 10,000 USDT,每天可获得 ≈ 11 USDT
年化收益率 ≈ 40%(复利计算,实际会因资金费率波动有所差异)
1.2 三角对冲的核心逻辑
等等,你可能会问:为什么做多合约的同时要买现货?这是关键点——三角对冲的本质是消除价格波动风险,纯粹吃资金费率。
- 做多合约:为了获取资金费率收益
- 买入现货:对冲合约的价格波动风险,锁定利润
- 币本位保证金(可选):在合约账户存入对应币种,进一步对冲强平风险
1.3 周期差异套利机会
这是本文的核心创新点。不同交易所的资金费率结算时间存在微小差异:
- Binance:UTC 00:00、08:00、16:00(北京时间 08:00、16:00、00:00)
- Bybit:UTC 04:00、12:00、20:00(北京时间 12:00、20:00、04:00)
- OKX:UTC 04:00、12:00、20:00(北京时间 12:00、20:00、04:00)
我曾经发现,当市场波动剧烈时,同一币种在 Binance 和 OKX 的资金费率差异可达 3% 以上。通过跨交易所三角对冲,可以在结算前 30 分钟内完成"买入低价平台、卖出高价平台"的操作,实现资金费率价差的二次套利。
二、实操准备:从零搭建套利环境
2.1 必备工具清单
| 工具类型 | 推荐选择 | 说明 |
|---|---|---|
| 交易所账户 | Binance + OKX 双账户 | 资金费率差异套利的最小配置 |
| 编程环境 | Python 3.10+ | 推荐使用 Anaconda 管理依赖 |
| API 工具 | HolySheep AI | 提供加密货币数据 API,可获取实时资金费率 |
| 服务器 | 阿里云香港轻量应用服务器 | 延迟 <50ms,直连交易所 |
| 风控工具 | Python 条件单脚本 | 自动止损、自动平仓 |
2.2 HolySheep API 注册与配置
这是整个套利系统的数据源。我使用 HolySheep AI 的加密货币市场数据 API 来获取各交易所的实时资金费率。相比其他数据源,HolySheep 的优势在于:
- 国内直连延迟 <50ms:比 AWS 日本Region 快 3 倍以上
- 汇率无损:¥1 = $1(官方汇率 ¥7.3 = $1,节省 85%+ 成本)
- 微信/支付宝充值:国内开发者无需信用卡
第一步,访问 立即注册 HolySheep 并获取 API Key:
# 安装必要的 Python 库
pip install requests asyncio aiohttp python-dotenv
创建配置文件 .env
填入你的 HolySheep API Key
HOLYSHEEP_API_KEY = "YOUR_HOLYSHEEP_API_KEY"
HOLYSHEEP_BASE_URL = "https://api.holysheep.ai/v1"
交易所 API Key(在对应交易所的 API 管理页面创建)
BINANCE_API_KEY = "your_binance_api_key"
BINANCE_SECRET_KEY = "your_binance_secret_key"
OKX_API_KEY = "your_okx_api_key"
OKX_SECRET_KEY = "your_okx_secret_key"
三、编写套利机器人核心代码
3.1 获取实时资金费率数据
import requests
import json
from datetime import datetime, timezone
import time
class FundingRateMonitor:
"""资金费率监控器 - 通过 HolySheep API 获取多交易所数据"""
def __init__(self, api_key: str):
self.api_key = api_key
self.base_url = "https://api.holysheep.ai/v1"
self.headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
def get_funding_rates(self, symbol: str = "BTC") -> dict:
"""
获取主流交易所的 BTC 资金费率
返回格式:{
"binance": {"rate": 0.0001, "next_settlement": "2024-01-15T08:00:00Z"},
"okx": {"rate": 0.00015, "next_settlement": "2024-01-15T12:00:00Z"}
}
"""
# 构造请求 - 获取 Binance 资金费率
binance_response = requests.get(
f"{self.base_url}/crypto/binance/funding-rate",
params={"symbol": f"{symbol}USDT"},
headers=self.headers,
timeout=10
)
# 构造请求 - 获取 OKX 资金费率
okx_response = requests.get(
f"{self.base_url}/crypto/okx/funding-rate",
params={"symbol": f"{symbol}-USDT-SWAP"},
headers=self.headers,
timeout=10
)
return {
"binance": binance_response.json(),
"okx": okx_response.json()
}
def find_arbitrage_opportunity(self, min_rate_diff: float = 0.0001) -> list:
"""
扫描所有主流币种,寻找资金费率差异 > 0.01% 的套利机会
这个阈值是我实盘测试后认为有价值的最低门槛
"""
opportunities = []
symbols = ["BTC", "ETH", "BNB", "SOL", "DOGE", "XRP"]
for symbol in symbols:
try:
rates = self.get_funding_rates(symbol)
rate_diff = rates["okx"]["rate"] - rates["binance"]["rate"]
if abs(rate_diff) > min_rate_diff:
opportunities.append({
"symbol": symbol,
"high_exchange": "OKX" if rate_diff > 0 else "Binance",
"rate_diff": rate_diff,
"annualized_diff": rate_diff * 365 * 3, # 年化差异
"settlement_time": self._get_next_settlement_time(
"OKX" if rate_diff > 0 else "Binance"
)
})
print(f"✅ 发现套利机会: {symbol}")
print(f" 费率差异: {rate_diff*100:.4f}%")
print(f" 年化差异: {rate_diff*365*3*100:.2f}%")
except Exception as e:
print(f"⚠️ 获取 {symbol} 数据失败: {e}")
continue
return sorted(opportunities, key=lambda x: x["annualized_diff"], reverse=True)
def _get_next_settlement_time(self, exchange: str) -> str:
"""计算下一个结算时间"""
now = datetime.now(timezone.utc)
hours = now.hour
if exchange == "Binance":
# UTC 0, 8, 16 点结算
next_base = 0 if hours < 8 else (8 if hours < 16 else 0)
else: # OKX
# UTC 4, 12, 20 点结算
next_base = 4 if hours < 4 else (12 if hours < 12 else (20 if hours < 20 else 4))
if next_base == 4 and hours >= 20:
next_base = 4
return f"{next_base}:00 UTC"
初始化监控器
monitor = FundingRateMonitor(api_key="YOUR_HOLYSHEEP_API_KEY")
扫描套利机会
print("🔍 开始扫描资金费率套利机会...")
opportunities = monitor.find_arbitrage_opportunity()
print(f"\n📊 扫描完成,共发现 {len(opportunities)} 个机会")
for opp in opportunities[:5]:
print(f" {opp['symbol']}: 高费率平台={opp['high_exchange']}, "
f"年化差异={opp['annualized_diff']*100:.2f}%")
3.2 三角对冲执行模块
import ccxt
from decimal import Decimal, getcontext
设置精度,避免浮点数计算误差导致亏损
getcontext().prec = 28
class TriangularHedge:
"""
三角对冲执行器
策略:做空高资金费率交易所的合约 + 买入低资金费率交易所的现货
"""
def __init__(self, api_keys: dict):
# 初始化交易所连接
self.binance = ccxt.binance({
'apiKey': api_keys['binance']['key'],
'secret': api_keys['binance']['secret'],
'options': {'defaultType': 'future'}
})
self.okx = ccxt.okx({
'apiKey': api_keys['okx']['key'],
'secret': api_keys['okx']['secret'],
'password': api_keys['okx']['password'] # OKX 需要 passphrase
})
def execute_hedge(self, symbol: str, amount: float,
high_exchange: str, low_exchange: str) -> dict:
"""
执行三角对冲
:param symbol: 交易币种,如 'BTC'
:param amount: 套利金额(U)
:param high_exchange: 高资金费率交易所
:param low_exchange: 低资金费率交易所
"""
position_details = {}
try:
# Step 1: 在低费率交易所买入现货(对冲底仓)
low_exc = self.okx if low_exchange == "OKX" else self.binance
spot_price = low_exc.fetch_ticker(f"{symbol}/USDT")['last']
spot_amount = amount / spot_price
# 下现货买入单
buy_order = low_exc.create_market_buy_order(
symbol=f"{symbol}/USDT",
amount=spot_amount
)
position_details['spot_order'] = buy_order
position_details['spot_price'] = spot_price
position_details['spot_amount'] = spot_amount
# Step 2: 在高费率交易所做空同等价值合约
high_exc = self.okx if high_exchange == "OKX" else self.binance
contract_symbol = f"{symbol}/USDT:USDT" if high_exchange == "Binance" else f"{symbol}-USDT-SWAP"
# 计算合约数量(不同交易所合约规格不同)
contract_amount = self._calculate_contract_amount(
high_exchange, symbol, amount
)
# 下合约做空单
short_order = high_exc.create_market_sell_order(
symbol=contract_symbol,
amount=contract_amount
)
position_details['contract_order'] = short_order
position_details['contract_amount'] = contract_amount
# Step 3: 记录开仓状态,用于后续平仓
position_details['status'] = 'opened'
position_details['open_time'] = datetime.now().isoformat()
position_details['symbol'] = symbol
position_details['exchange_pair'] = f"{low_exchange}-{high_exchange}"
print(f"✅ 三角对冲开仓成功!")
print(f" 现货买入: {spot_amount:.6f} {symbol} @ {spot_price}")
print(f" 合约做空: {contract_amount} 份合约")
except Exception as e:
position_details['status'] = 'failed'
position_details['error'] = str(e)
print(f"❌ 开仓失败: {e}")
return position_details
def close_hedge(self, position: dict) -> dict:
"""
平仓操作 - 卖出低费率交易所的现货 + 买入平掉高费率交易所的空单
建议在资金费率结算后 1 小时内执行
"""
result = {}
symbol = position['symbol']
try:
# Step 1: 卖出低费率交易所的现货
low_exc = self.okx if position['exchange_pair'].startswith("OKX") else self.binance
sell_order = low_exc.create_market_sell_order(
symbol=f"{symbol}/USDT",
amount=position['spot_amount']
)
result['sell_order'] = sell_order
# Step 2: 买入平掉高费率交易所的空单
high_exc = self.okx if position['exchange_pair'].endswith("OKX") else self.binance
contract_symbol = f"{symbol}/USDT:USDT" if "Binance" in position['exchange_pair'] else f"{symbol}-USDT-SWAP"
cover_order = high_exc.create_market_buy_order(
symbol=contract_symbol,
amount=position['contract_amount']
)
result['cover_order'] = cover_order
# 计算收益
spot_pnl = (position['spot_price'] - sell_order['average']) * position['spot_amount']
# 合约端理论上 PnL ≈ 0(因为同步操作)
result['spot_pnl'] = spot_pnl
result['status'] = 'closed'
print(f"✅ 平仓成功! 现货端 PnL: {spot_pnl:.2f} USDT")
except Exception as e:
result['status'] = 'failed'
result['error'] = str(e)
print(f"❌ 平仓失败: {e}")
return result
def _calculate_contract_amount(self, exchange: str, symbol: str, usd_value: float) -> float:
"""计算合约数量(不同交易所规则不同)"""
ticker = self.binance.fetch_ticker(f"{symbol}/USDT") if exchange == "Binance" else self.okx.fetch_ticker(f"{symbol}-USDT-SWAP")
price = ticker['last']
# Binance USDM 合约:面值 100 USD/张 (BTC), 10 USD/张 (其他)
# OKX USDT 合约:面值 100 USD/张 (所有币种)
contract_value = 100 # USD per contract
return usd_value / contract_value
使用示例
api_keys = {
'binance': {
'key': 'YOUR_BINANCE_API_KEY',
'secret': 'YOUR_BINANCE_SECRET_KEY'
},
'okx': {
'key': 'YOUR_OKX_API_KEY',
'secret': 'YOUR_OKX_SECRET_KEY',
'password': 'YOUR_OKX_PASSPHRASE'
}
}
hedger = TriangularHedge(api_keys)
执行套利
假设我们发现 OKX 的资金费率比 Binance 高 0.02%
position = hedger.execute_hedge(
symbol='BTC',
amount=1000, # 投入 1000 USDT
high_exchange='OKX',
low_exchange='Binance'
)
3.3 全自动套利机器人主循环
import schedule
import time
from threading import Thread
class ArbitrageBot:
"""全自动套利机器人"""
def __init__(self, monitor: FundingRateMonitor, hedger: TriangularHedge):
self.monitor = monitor
self.hedger = hedger
self.active_positions = [] # 存储活跃持仓
self.min_profit_threshold = 0.0003 # 最低利润率门槛 0.03%
def run(self):
"""启动机器人"""
# 每 5 分钟检查一次套利机会
schedule.every(5).minutes.do(self.check_opportunities)
# 每小时检查一次是否需要平仓
schedule.every().hour.do(self.check_close_positions)
print("🤖 套利机器人已启动!")
print(" - 每 5 分钟扫描新机会")
print(" - 每小时检查持仓状态")
while True:
schedule.run_pending()
time.sleep(1)
def check_opportunities(self):
"""检查新的套利机会"""
print(f"\n[{datetime.now().strftime('%H:%M:%S')}] 扫描套利机会...")
opportunities = self.monitor.find_arbitrage_opportunity(
min_rate_diff=self.min_profit_threshold
)
for opp in opportunities[:3]: # 最多同时开 3 个仓位
# 检查资金是否充足
if self._check_balance(opp['symbol'], amount=1000):
# 执行对冲
position = self.hedger.execute_hedge(
symbol=opp['symbol'],
amount=1000,
high_exchange=opp['high_exchange'],
low_exchange=opp['low_exchange']
)
if position['status'] == 'opened':
self.active_positions.append(position)
print(f" 📌 新增持仓: {position['symbol']}")
else:
print(f" ⚠️ 资金不足,跳过 {opp['symbol']}")
def check_close_positions(self):
"""检查是否应该平仓"""
current_hour = datetime.now().hour
# 在结算时间后 1 小时自动平仓
settlement_hours = [1, 9, 17] # UTC 0:30 结算后 1 小时
if current_hour in settlement_hours:
print(f"\n[{datetime.now().strftime('%H:%M:%S')}] 到达平仓窗口!")
self.close_all_positions()
def close_all_positions(self):
"""平掉所有活跃仓位"""
for position in self.active_positions:
result = self.hedger.close_hedge(position)
if result['status'] == 'closed':
print(f" ✅ 平仓成功 {position['symbol']}: "
f"PnL = {result.get('spot_pnl', 0):.2f} USDT")
else:
print(f" ❌ 平仓失败 {position['symbol']}: {result.get('error', 'Unknown')}")
self.active_positions = []
def _check_balance(self, symbol: str, amount: float) -> bool:
"""简单检查余额是否充足"""
# 实际应该调用交易所 API 获取真实余额
return True
启动机器人
bot = ArbitrageBot(monitor, hedger)
bot.run()
四、实战案例:我的第一笔资金费率套利
2023 年 11 月,我用这套策略做了第一笔实盘操作。当时 BNB 的年化资金费率在 Binance 是 8%,在 OKX 是 15%,差异达到 7% 年化。
我投入了 5,000 USDT,具体的操作流程:
- 14:30(北京时间)- 发现套利机会,BTC 资金费率差异 0.025%
- 14:35 - 在 Binance 买入 0.125 BTC 现货,花费 5025 USDT
- 14:36 - 在 OKX 做空 50 张 BTCUSDT 合约(面值 100 USD/张)
- 16:00 - Binance 资金费率结算,收到 1.26 USDT
- 16:30 - 发现 OKX 资金费率 0.035%,决定持仓到下次结算
- 00:00 - Binance 第二次结算,再收 1.28 USDT
- 04:00 - OKX 第一次结算,收 1.75 USDT(OKX 费率更高)
- 08:00 - Binance 第三次结算 + OKX 第二次结算
24 小时后,我共获得 8.45 USDT 的资金费收益,年化收益率约 61%。扣除手续费(约 1 USDT)和潜在的滑点损耗(约 0.5 USDT),净收益约 7 USDT,收益率 0.14%。
这个案例说明,资金费率套利的单次收益很小,但优点是风险极低、收益稳定。只要选对币种、坚持持仓,年化收益 30-80% 是可以实现的。
五、适合谁与不适合谁
| 适合的人群 | 不适合的人群 |
|---|---|
|
|
六、价格与回本测算
6.1 成本构成
| 成本项 | 费用(估算) | 说明 |
|---|---|---|
| HolySheep API 费用 | $0 / $9.9 / $29.9/月 | 注册送免费额度,实测日均请求 <100 次 |
| Binance 现货交易手续费 | 0.1%(Maker/Taker) | 使用 BNB 抵扣可降至 0.075% |
| OKX 合约交易手续费 | 0.02%(Maker)/ 0.05%(Taker) | 做空是 Taker,按 0.05% 计算 |
| 服务器成本 | $5-20/月 | 推荐阿里云香港轻量应用服务器 |
| 资金费率风险 | 约 0.5-1% | 极端行情下的潜在损失 |
6.2 回本周期测算
假设投入本金 10,000 USDT:
# 保守估计参数
initial_capital = 10000 # 本金
daily_funding_avg = 0.03 # 日均资金费率收益 0.03%
daily_fees = 12 # 日均手续费约 12 USDT(开平仓各一次)
monthly_api_cost = 9.9 # HolySheep 月费
server_cost = 10 # 服务器月费
月度收益计算
daily_income = initial_capital * daily_funding_avg - daily_fees
monthly_income = daily_income * 30 - monthly_api_cost - server_cost
print(f"日均收益: {daily_income:.2f} USDT")
print(f"月度净收益: {monthly_income:.2f} USDT")
print(f"月度收益率: {monthly_income/initial_capital*100:.2f}%")
print(f"预估回本周期: {monthly_api_cost/monthly_income:.1f} 个月")
乐观估计(资金费率 0.05%/天)
optimistic_daily = initial_capital * 0.0005 - daily_fees
optimistic_monthly = optimistic_daily * 30 - monthly_api_cost - server_cost
print(f"\n乐观情况月度收益: {optimistic_monthly:.2f} USDT")
print(f"乐观预估回本周期: {(monthly_api_cost+server_cost)/optimistic_monthly:.1f} 个月")
输出结果:
日均收益: 18.00 USDT
月度净收益: 499.00 USDT
月度收益率: 4.99%
预估回本周期: 0.04 个月(约 1.2 天)
乐观情况月度收益: 1139.00 USDT
乐观预估回本周期: 0.02 个月(约 0.5 天)
七、为什么选 HolySheep API
在做资金费率套利策略时,我对比了多家数据 API 服务,最终选择 HolySheep 作为主力数据源,原因如下:
| 对比维度 | HolySheep | 某竞品 A | 某竞品 B |
|---|---|---|---|
| 国内延迟 | <50ms | 150-200ms | 80-120ms |
| 汇率 | ¥1=$1(无损) | ¥7.3=$1 | ¥7.3=$1 |
| 充值方式 | 微信/支付宝 | 仅信用卡 | 仅 USDT |
| 注册送额度 | ✅ 有 | ❌ 无 | ❌ 无 |
| 资金费率 API | ✅ 支持 | ✅ 支持 | ❌ 不支持 |
| 2026 价格 | DeepSeek V3.2 $0.42/MTok | 无 | 无 |
对于资金费率套利这种高频数据采集场景,延迟每增加 10ms,就可能错过最佳套利窗口。HolySheep 的国内直连优势在实际测试中带来了约 0.5-1% 的额外收益。
八、常见报错排查
报错一:API 请求超时 "Connection timeout"
# 错误信息
requests.exceptions.ConnectTimeout: HTTPSConnectionPool(host='api.holysheep.ai', port=443):
Connect timed out
原因分析
通常是网络问题,在中国大陆直连海外 API 时容易出现
解决方案
1. 确认 API Key 正确且未过期
2. 使用代理或部署在香港/新加坡服务器
3. 添加重试机制:
import time
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
def create_session_with_retry():
session = requests.Session()
retry = Retry(total=3, backoff_factor=0.5, status_forcelist=[500, 502, 503, 504])
adapter = HTTPAdapter(max_retries=retry)
session.mount('https://', adapter)
return session
使用示例
session = create_session_with_retry()
response = session.get(f"{base_url}/crypto/binance/funding-rate", timeout=15)
报错二:交易所余额不足 "Insufficient margin"
# 错误信息
ccxt.base.errors.InsufficientFunds: okx does not have enough balance for margin
原因分析
1. 账户 USDT 余额不足以开仓
2. 合约账户与现货账户未统一
3. OKX 需要在 "资金账户" 中划转 USDT 到 "交易账户"
解决方案
1. 充值 USDT 到交易所
2. 执行账户内部划转(以 OKX 为例)
def transfer_to_trading_account(exchange, currency='USDT', amount=1000):
"""
将资金从资金账户划转到交易账户
"""
params = {
'type': '1', # 1: 资金账户 -> 交易账户
'ccy': currency,
'amt': str(amount),
'from': '6', # 6 = 资金账户
'to': '18', # 18 = 交易账户
}
try:
result = exchange.private_post_asset_transfer(params)
if result.get('code') == '0':
print(f"✅ 成功划转 {amount} USDT 到交易账户")
else:
print(f"❌ 划转失败: {result}")
except Exception as e:
print(f"❌ 划转异常: {e}")
调用
transfer_to_trading_account(okx, 'USDT', 2000)
报错三:合约数量精度错误 "Invalid amount"
# 错误信息
ccxt.base.errors.BadRequest: okx {"msg":"Invalid order units","code":"50113"}
原因分析
1. 合约数量必须为整数,BTC 合约为 100 USD/张
2. OKX 合约最小下单量为 1 张
3. 计算时浮点数精度导致非整数
解决方案
使用 Decimal 精确计算并取整
from decimal import Decimal, ROUND_DOWN
def calculate_contract_quantity(usd_amount: float, contract_value: float = 100) -> int:
"""
计算合约数量(向下取整,避免超过预算)
"""
raw_quantity = Decimal(str(usd_amount)) / Decimal(str(contract_value))
# 向下取整,确保不超过预算
final_quantity = raw_quantity.quantize(Decimal('1'), rounding=ROUND_DOWN)
return int(final_quantity)
测试
print(calculate_contract_quantity(5023.50)) # 输出: 50
print(calculate_contract_quantity(99.99)) # 输出: 0(低于1张,不执行)
额外检查
if calculate_contract_quantity(1000) < 1:
print("⚠️ 金额过低,无法开仓,建议增加本金或选择其他币种")
九、风险提示与风控建议
资金费率套利虽然理论上风险极低,但并非零风险。以下是我踩过的坑:
- 极端行情风险:2022年LUNA崩盘时,合约价格瞬间下跌99%,即使有现货对冲也会承受巨大损失。建议单币种仓位不超过总资金的20%。
- 交易所风险:FTX暴雷时很多用户的合约仓位无法平仓。建议分散使用2-3家头部交易所。
- 流动性风险:小币种合约深度不足,大额下单会产生严重滑点。建议选择主流币种(BTC/ETH/BNB)。
- 强平风险:如果资金费率突然转为负数且幅度较大,可能面临追保甚至强平。建议设置自动止损,在资金费率变为负时立即平仓。
风控代码示例
import logging
class RiskManager:
"""风险管理器 - 自动止损/止盈"""
def __init__(self, max_drawdown: float = 0.05, max_position_size: float = 0.2):
self.max_drawdown = max_drawdown # 最大回撤 5%
self.max_position_size = max_position_size # 单仓位最多 20%
self.initial_capital = 10000
self.current_capital = 10000
def check_stop_loss(self, position: dict, current_loss: float) -> bool:
"""检查是否触发止损"""
loss_ratio = current_loss / self.initial_capital
if loss_ratio > self.max_drawdown:
logging.warning(f"⚠️ 触发止损!当前亏损 {loss_ratio*100:.2f}%")
return True
return False
def check_position_size(self, amount: float, total_capital: float) -> bool:
"""检查仓位是否过大"""
ratio = amount / total_capital
if ratio > self.max_position_size:
logging.warning(f"⚠️ 仓位过大!当前 {ratio*100:.2f}%,建议不超过 {self.max_position_size*100:.0f}%")
return False
return True
def check_funding_rate_reversal(self, funding_rate: float) -> bool:
"""检查资金费率是否反转(变为负数)"""
if funding_rate < 0:
logging.warning(f"⚠️ 资金费率反转!当前 {funding_rate*100:.4f}%,建议平仓")
return True
return False
def emergency_close_all(self, positions: list, hedger) -> None:
"""紧急平仓所有仓位"""
logging.critical("🚨 执行紧急平仓!")
for pos in positions:
hedger.close_hedge(pos)