基于币本位合约的对冲套利和高密度网格策略
/ 29 min read
Table of Contents
这个策略最初是从方舟基金(ARK)里提取出来的资金管理模块(这里的 ARK 只是同名,并非木头姐的 Ark Invest),后来被独立成“底舱策略”。它并不是为了替代主策略,而是为了解决资金利用率问题:主策略在多数时间并不满足开仓条件,导致大量资金闲置。于是,我们让这部分闲置资金在不干扰主策略风险框架的前提下,持续套取一部分波动利润,用来缓解整体资金成本压力。
基本原理
这套策略是一个“双层结构”:
- 底层是套期保值层,核心任务是把方向性风险压低,尽量让账户价值稳定。
- 上层是交易执行层,核心任务是在震荡中反复做小价差闭环,把波动转化为现金流。
换句话说,它不依赖“预测下一步涨跌”,而是依赖两件事: 先把净暴露控制住,再把市场噪声做成可重复兑现的利润单元。
套期保值
套期保值是这套策略的地基。
在币本位账户里,资产和保证金都以币计价。 这意味着只要你持有币,哪怕不交易,账户法币价值也会随币价剧烈波动。 所以第一目标不是“赚钱”,而是先把净方向暴露压下来。
这套策略采用的是最直接的组合:现货多头 + 合约空头(约 1x 等值)。
可以把它理解成一个 Delta 对冲:
- 现货腿提供正 Delta(价格涨,现货价值上升;价格跌,现货价值下降)。
- 空头腿提供负 Delta(价格涨,空头亏损;价格跌,空头盈利)。
- 两条腿名义价值尽量相等时,净 Delta 接近 0,组合法币价值波动明显收敛。
直观示例:
- 初始:1 BTC 现货,价格 50,000;同时开等值 1x 空单。
- 若价格跌到 25,000:现货缩水,但空单盈利,二者在法币口径上相互抵消。
- 若价格涨到 100,000:现货增值,但空单亏损,二者同样相互抵消。
所以它的核心价值不是“放大收益”,而是把账户从单边暴露,改造成近似“合成美元仓位”。
资金费率套利
什么是资金费率
资金费率(Funding Rate)是永续合约市场里的周期性结算机制,目的是让永续合约价格尽量贴近现货价格。 因为永续合约没有到期交割日,交易所需要通过“多空之间的资金交换”去约束价格偏离。
它有几个关键特征:
- 资金费不是交易所额外收走的手续费,而是多头和空头之间相互支付。
- 结算按固定周期发生(例如 8 小时一次,具体以交易所规则为准)。
- 结算金额近似等于:
持仓名义价值 × 当期资金费率。 - 只有在结算时点仍持有仓位,才会产生资金费收付。
方向规则如下:
- 资金费率为正:通常多头付费给空头。
- 资金费率为负:通常空头付费给多头。
它之所以能把永续价格往现货价格拉回,核心在于“偏离就会产生额外持仓成本/收益”,从而触发套利资金介入:
- 当永续价格高于现货(市场偏多)时,资金费率通常转正,多头需要持续付费,做多成本上升;同时会激励“做空永续 + 做多现货”的套利盘入场,推动永续下行、现货上行,价差收敛。
- 当永续价格低于现货(市场偏空)时,资金费率通常转负,空头需要持续付费;同时会激励“做多永续 + 做空现货”的套利盘入场,推动永续上行、现货下行,价差收敛。
因此,资金费率本质上是一种动态反馈机制:偏离越明显,套利激励通常越强,价格回归动力越大。
费率套利
费率套利的核心,不是预测涨跌,而是在尽量中性的持仓结构下,赚取资金费结算带来的现金流。 在这套策略里,对应的是“现货多头 + 永续空头”的组合。
资金费率
资金费率常见写法为:
其中:
- :第 个结算周期的资金费率。
- :溢价指数(可近似理解为合约价格相对现货指数价格的偏离)。
- :利率项(由交易所规则给定或动态调整)。
- :夹限函数,把结果限制在区间 内,避免单周期费率失真过大。
这条公式表达的意思是: 资金费率由“价格偏离(溢价)”和“利率基准”共同决定,并通过上下限控制极端值。
这里需要单独解释利率项 是什么。 它不是“市场情绪项”,而是资金时间价值的基准项,可以理解为“计价货币与标的货币之间的持有成本差”的简化表达。 常见写法可以近似理解为:
其中 是计价货币资金成本, 是标的资产资金收益/成本, 是结算周期。
以币安常见默认口径为例,利率项 采用固定值:0.03%/天。 按 8 小时结算折算后,就是 0.01%/8小时(即 )。
可写成:
为什么它通常是“固定且为正”:
- 固定:交易所用固定基准替代实时利率曲线,简化结算并降低噪声。
- 为正:在长期假设下,计价货币资金成本通常高于标的资产收益,基准差值倾向为正。
- 作用:给资金费率一个稳定锚点,防止在溢价接近 0 时缺乏回归约束。
资金费用
在得到 后,再计算资金费金额。对空头视角,在每个结算时点 :
其中:
- 资金费率为正,空头收钱。
- 资金费率为负,空头付钱。
- 其中 表示该时点空头名义价值,通常可按
合约张数 × 合约面值近似(本项目里 1 张约等于 100 USD 名义)。
一个周期内的资金费累计可以写成:
为什么资金费率长期为正
假设溢价长期总和为 0(也就是合约价格长期围绕现货上下对称波动),为什么资金费率长期仍可能为正。
设结算周期总数为 ,并假设:
-
情形 A:夹限不触发(最常见的近似推导)
如果每个周期都满足 ,则:
代回资金费率公式:
因此长期平均资金费率为:
这说明在“溢价长期均值为 0”且“夹限未触发”的条件下,资金费率长期由正的利率项直接主导,结论就是长期为正。
-
情形 B:夹限偶尔触发(更贴近实盘)
定义夹限修正项:
则有:
长期平均变为:
所以只要 ,长期平均资金费率依然为正。 当溢价围绕 0 对称波动且极端偏离不频繁时, 通常接近 0,此时 仍近似等于 并保持正值。
基于上面的 A/B 推导,可以得到一个策略结论:在给定假设下,长期平均资金费率保持正值。 这时再结合套期保值结构(现货多头 + 等值永续空头),价格方向带来的主要波动被对冲掉,收益重心就会转移到资金费现金流上。
把这一点写成收益分解,可以近似表示为:
其中 是阶段总收益, 包括手续费、滑点和调仓成本。 因此,当长期资金费收入稳定为正,且成本可控时,套保结构就能解释我们为什么可以持续做费率套利。
高密度网格策略
什么是高密度网格
高密度网格的核心,不是追求单笔大利润,而是把一个价格区间拆成大量更细的小区间,让交易触发更连续、闭环更频繁。
它有三个关键特征:
- 网格间距小:单格目标通常是很小的百分比利润,强调高周转而不是厚利润。
- 单格独立:每一格都有独立的触发与止盈,不需要等整条网格联动才能结算。
- 区间内重复:只要价格在区间内来回波动,就能不断重复“触发 -> 闭环 -> 再触发”。
所以高密度网格本质上是在做“波动切片”:把原本粗颗粒的行情波动拆成大量可重复兑现的小利润单元。
等比网格 + 独立空腔的构建
这一套网格不是等差分层,而是“等比买入 + 固定百分比卖出”的组合。
先定义参数:
- :网格下界(
low_price) - :网格上界(
high_price) - :网格数量(
count) - :单格目标利润率(
profit,小数形式)
第一步,先算最高买入价(保证最上层卖出不超过上界):
第二步,把 按等比分成 个买入点:
第三步,给每个买入点配置独立卖出目标:
这就是“独立空腔”的核心: 每个网格都有自己的买入触发价和卖出目标价,单格闭环后即可独立结算,不需要等待其他网格同步完成。
参数化示例
为了让上面的构建过程更直观,我们假设如下参数:
low_price = 105000high_price = 120000count = 50profit = 0.5%(即 )
先得到:
这意味着相邻网格买入价之间的相对步进约为 0.26268%,而每一格的卖出目标固定为买入价上浮 0.5%。
抽几档网格可以看到结构:
- Grid 0:
- Grid 1:
- Grid 2:
- Grid 10:
- Grid 20:
- Grid 30:
- Grid 40:
- Grid 49:
可以用一张简化的图理解这组参数下的网格形态:
价格轴(上高下低) ^ | S49 120000.0 | S40 117200.0 | S30 114165.4 | S20 111209.4 | S10 108329.9 <- 离当前最近的卖出(开空)目标 | | ---------- 当前价格附近 ---------- | | B10 107791.0 <- 离当前最近的买入(平空)触发 | B2 105552.3 | B1 105275.8 | B0 105000.0 v
说明:1. B_i 与 S_i 一一对应,单格利润固定为 p=0.5%。2. 价格下探触发 B_i(平空),反弹触发 S_i(开空),完成单格闭环。3. 网格是等比分布,相对间距稳定,越往上绝对价差越大。从这个示例可以看出两件事:
- 网格买入价是等比分布,越往上绝对价差越大,但相对步进保持稳定。
- 每格卖出价都由同一个利润率 决定,单格闭环标准完全一致,便于规模化执行。
和传统网格的差别
和传统网格相比,它的差别主要在三个地方:
- 密度不同:传统网格间距更大,追求单笔利润;高密度网格间距更小,追求成交频次。
- 结算方式不同:传统网格常见“阶梯接力”感更强;高密度网格强调单格独立闭环,局部可先结算。
- 收益结构不同:传统网格更依赖较大波段;高密度网格更依赖持续震荡中的微小来回。
从长期执行结果看,高密度网格的收益曲线通常会比传统网格更平滑,也会略高一些。 可以把两者理解为同一条目标曲线的两种离散化方式:
- 传统网格更像“台阶”,触发点稀疏,很多中间波动没有被充分利用。
- 高密度网格更像“滑滑梯”,触发点更密,能把中间波动切得更细。
如果把传统网格看成必须使用阶梯函数近似,那么高密度网格相当于用更细的分段去逼近连续曲线。 两者之间“多出来的那部分”,可以近似理解为把每个台阶上方/旁侧未覆盖的小三角形逐步填满后的总和。
用近似表达写就是:
其中 是第 段价格步长, 是对应的仓位/收益响应步长。 网格越密,步长越小,离散误差越小,执行曲线越接近连续曲线,长期表现通常也越平滑。
网格买卖与开空平空
在这套策略里,底层本来就持有对冲空单,因此网格里的“买/卖”并不是去加减现货,而是映射为空单的平仓与开仓:
- 网格“买入”对应平空:价格下行触发 时,回补(平掉)一部分空单。
- 网格“卖出”对应开空:价格反弹触发 时,再开回同等数量的空单。
- 单格闭环保持一致:同一格里先平空、后开空,数量一致,就完成一次网格利润兑现。
可以写成一格的执行流程:
忽略手续费和滑点时,单格收益近似为:
还有一个实盘层面的核心点是交易磨损。以币安常见费率档位举例(Regular User,具体以费率页实时显示为准):
- 现货:Maker/Taker 常见为
0.10% / 0.10%。 - 币本位合约:Maker/Taker 常见为
0.02% / 0.05%。
这套网格的订单都是挂单,因此按 Maker 口径估算。单格闭环需要两笔成交(平空一次 + 开空一次):
- 走现货双边(Maker+Maker):手续费约
0.20%。 - 走合约双边(Maker+Maker):手续费约
0.04%。
也就是说,同样的成交名义下,手续费磨损大约可以下降 80%。
伪代码示例
当前代码在 GitHub 托管,暂时没有开源计划;如果有需要请邮箱联系我。下面是部分伪代码示例:
# 执行网格def execute_grids(exit_handler: ExitHandler, tg_sender: TelegramSender, config: Configuration): logging.info("开始执行网格交易") # 币安客户端 client = create_client(config.api_key, config.api_secret, config.testnet)
# 获取仓位模式 hedge_position_mode = client.get_position_mode()["dualSidePosition"] if hedge_position_mode: logging.info("启用双向持仓模式")
# 获取交易对信息和单张合约的价值 symbol_info = get_symbol_info(client, config.symbol) contract_size = float(symbol_info["contractSize"])
# 计算网格 grids = compute_grids(config)
# 获取之前的状态 state = get_state() # 重新计算激活的网格 # 复用之前的网格 # 其他的全是算作过期的网格 # 省略:active/expired 合并细节 state = reconcile_state(state, grids) # 保存状态 save_state(state)
# 输出信息 tg_sender.send(f"""{config.symbol} 网格交易启动价格范围: {config.low_price} - {config.high_price}网格数量: {config.count}每格利润: {config.profit} %每格数量: {config.quantity}总交易量: {config.quantity * config.count}""")
# 订单缓存 order_cache = OrderCache(client, symbol=config.symbol) # 开始进入主循环 while exit_handler.is_running: # 刷新订单缓存 order_cache.refresh()
# 同步订单信息,只同步状态还有可能发生改变的订单 # 不会再发生改变的订单也可能被交易所清理而查询不到 # 省略:买入单/卖出单逐笔同步细节 sync_orders(state, order_cache)
# 清理过期的网格的买入订单 # 省略:逐单 cancel + 异常处理细节 cancel_expired_buy_orders(client, config, state)
# 长期订单刷新,防止被交易所自动取消(币安对超过1年的订单执行自动取消) # 买入单刷新 # 只刷新完全没有成交的,且挂单时间超过7天的 # 卖出单刷新 # 只刷新完全没有成交的 # 省略:撤旧单 -> 落新单 -> 持久化细节 refresh_old_orders(client, config, state, hedge_position_mode)
# 根据已经买入的数量同步挂出卖出单 # 已经卖出或者即将卖出的数量 # 还需要补充多少卖单,才能保持买卖平衡 # 省略:数量差计算与通知细节 sync_sell_orders(client, config, state, hedge_position_mode, tg_sender)
# 获取当前价格 price = get_price(client, symbol=config.symbol)
# 同步买入卖出单的状态 # 订单已经全部执行完成 # 拷贝一份放入历史记录中,只保留最近的100次 # 统计今日 # 发送TG通知 # 因为我们是轮询获取当前最新价格 # 有可能会出现一种情况,卖出单成功了,但是在下次获取价格的时候,当前价格低于本网格的卖出价格 # 从而导致这个网格的买入单无法重新挂入 # 所以这里使用两者最大值来作为当前价格(曾经达到的最大价格) # 省略:成交汇总消息拼装细节 price = settle_completed_grids(state, config, contract_size, tg_sender, price)
# 买入挂单 # 如果当前价格小于网格的卖出价格 # 表示当前价格在网格之下或者正处于网格之中 # 这种情况不买入 # 如果该网格的买入价格在已过期的网格内,则不开单 # 存在买入挂单,且订单状态正常(没有过期/取消),则不用管 # 如果买入挂单不存在,或者状态异常,则需要新建买入挂单 # 省略:下单参数与日志细节 place_buy_orders(client, config, state, hedge_position_mode, price)
# 清理过期的网格数据 state.expired = list(filter(lambda g: g.buy_order is not None, state.expired))
# 保存状态 save_state(state) time.sleep(1)
# 保存状态 logging.info("准备退出网格执行,保存状态") save_state(state)风险因子
这套方法的收益来源虽然清晰,但并不等于低风险或无风险。实盘里真正决定长期结果的,往往不是“策略是否有效”,而是能否持续控制下面这些风险因子。
单边行情破网风险
网格依赖的是区间内往复波动,一旦行情持续单边并走出网格区间(上破 或下破 ),就会发生“破网”:
- 原本的“触发 -> 触发 ”闭环节奏被打断,成交频率明显下降。
- 收益来源从可重复的小价差,转向被动持仓与等待区间重建。
ADL(自动减仓)风险
主流中心化合约交易所通常都有 ADL(Auto-Deleveraging,自动减仓)机制。它的核心不是“正常平仓”,而是系统在极端情况下的被动风险转移机制。
ADL 的典型触发链路可以理解为:
- 市场单边快速波动,大量对手盘仓位被强平。
- 强平仓位无法在市场上以理想价格完全成交,出现穿仓压力。
- 保险基金不足以覆盖全部损失时,系统会启动 ADL。
- 系统从对手方向的持仓里,按优先队列(通常与盈利水平、杠杆水平等有关)选择账户,执行强制减仓。
- 被选中的仓位会被动减少或平掉,哪怕用户并没有主动下单。
为什么会存在这个风险:
- 极端行情下,价格跳跃和流动性蒸发会让爆仓仓位难以及时成交,风险无法只靠撮合自然消化。
- 保险基金是有限缓冲,不可能无限覆盖所有穿仓损失。
- 为了避免系统性坏账扩散到平台整体,交易所需要用 ADL 把尾部损失快速出清。
对这套“现货 + 合约空单 + 网格”的影响在于:如果空头腿处于高盈利且高优先级,可能在你不想平仓的时候被 ADL 强制减仓,导致对冲结构被动失衡,后续网格执行与净暴露管理都会被打乱。
交易所与执行风险
- API 延迟、断连、限频或下单失败会造成网格断层,出现“该平未平、该开未开”。
- 极端行情下可能出现风控限制、临时参数调整或流动性异常,执行结果与预期偏离。
- 还需要考虑交易所信用与托管风险:如果交易所出现严重经营问题甚至“跑路”,账户内持有的是中心化平台上的合约空单与保证金,而不是去中心化自托管资产,存在资产受限或无法兑付的尾部风险。
资金费率风险
- 资金费率可能阶段性转负,空头腿会从“收资金费”变成“付资金费”。
- 费率在极端情绪时可能短期剧烈波动,单日现金流会明显偏离长期均值。
- 如果策略收益过度依赖正费率,遇到连续负费率阶段时,净收益会被快速侵蚀。
基差与对冲偏离风险
- 现货与永续并非严格同步,基差扩张/收敛会带来额外盈亏波动。
- 空头名义与现货名义若长期不等值(例如部分成交、仓位漂移),净 Delta 会偏离 0。
- 在快速单边行情中,这种偏离会被放大,导致组合不再“中性”。
总结
这个策略的核心可以归纳为三点:
- 先通过“现货 + 等值空头”构建套期保值底座,把主要方向风险压低。
- 再利用资金费率机制,在中性结构下获取长期资金费现金流。
- 最后叠加高密度网格,把震荡行情切成更细的可重复利润单元。
这套方法本质上是一个“对冲底座 + 费率套利 + 高频网格执行”的组合框架。其风险和收益基本等同于资金的无风险收益(利率)+ 流动性提供者收益(做市商收益)。 如果你想看完整实现细节、参数配置和代码逻辑, 请邮箱联系我索取仓库权限.
最后提醒:任何策略都不保证盈利。实盘仍然存在行情波动、执行与平台稳定性、以及杠杆和流动性等风险。请务必在充分理解风险并做好仓位控制的前提下参与交易。