做市商资金分配策略:多品种做市的资金分配模型
资金分配,说白了就是「把鸡蛋放在几个篮子里,每个篮子放多少」的问题。我做量化这些年,见过太多人一上来就把资金全砸进一个品种,结果流动性一抽风,直接爆仓。嗯,今天我们就聊聊怎么科学地分这笔钱。
一、多品种做市的资金分配模型
先问个问题:如果你同时做市 BTC、ETH 和 SOL,资金怎么分?
最简单的思路是按市值比例分。但我在项目中踩过坑——市值大的品种不一定适合你。比如某个币市值很高,但它的买卖价差特别窄,你根本吃不到多少利润。这时候你分给它太多资金,反而是浪费。
我个人习惯用「风险平价」的思路来做分配。核心公式很简单:
# 风险平价资金分配示例
import numpy as np
# 假设三个品种的日波动率
volatilities = np.array([0.03, 0.05, 0.02]) # BTC, ETH, SOL
# 总资金
total_capital = 1_000_000
# 风险平价:资金比例与波动率成反比
weights = 1 / volatilities
weights = weights / weights.sum()
capital_allocation = total_capital * weights
print("各品种分配资金:", capital_allocation)
# 输出: [约 322,581 193,548 483,871]
你看,波动率越大的品种,分配的资金越少。这样每个品种对总账户的风险贡献是相等的。
核心要点:风险平价不是让每个品种赚一样多,而是让每个品种「亏起来」一样疼。这样你才不会因为一个品种的黑天鹅而全军覆没。
二、基于波动率的动态资金调整
市场是活的,波动率会变。你不能一套参数用一年。
我记得2021年5月那次大跌,BTC的日波动率从2%飙到8%。如果我不调整资金,按原来的分配,BTC仓位会亏到吐血。所以我写了个动态调整模块:
def dynamic_adjust(current_vol, base_vol, allocated_capital, sensitivity=2.0):
"""
基于波动率变化动态调整资金
:param current_vol: 当前波动率
:param base_vol: 基准波动率(比如20日均值)
:param allocated_capital: 当前分配资金
:param sensitivity: 调整敏感度
"""
ratio = base_vol / current_vol
# 限制调整幅度,防止频繁大进大出
ratio = np.clip(ratio, 0.5, 2.0)
new_capital = allocated_capital * (ratio ** sensitivity)
return new_capital
# 举个例子
current_vol = 0.08 # 当前波动率8%
base_vol = 0.03 # 基准波动率3%
allocated = 322_581
new_alloc = dynamic_adjust(current_vol, base_vol, allocated)
print("调整后资金:", new_alloc)
# 输出: 约 120,968 (大幅减仓)
为什么会这样?因为波动率飙升时,你的风险敞口其实在放大。如果不减仓,一个极端行情就能把你打穿。
避坑指南:我曾经把敏感度设成3.0,结果波动率稍微一波动就频繁调仓,手续费吃掉了一大半利润。后来我加了「调整阈值」——波动率变化不超过20%就不动。记住,调仓本身也有成本。
三、流动性分层与资金配比
不是所有品种都值得你投入同样的精力。我把做市品种分成三层:
| 层级 | 特征 | 资金配比 | 我的经验 |
|---|---|---|---|
| L1 核心层 | 深度好、价差小、交易量大 | 50%-60% | BTC/ETH 这种,稳但利润薄 |
| L2 成长层 | 中等流动性,有一定波动 | 30%-40% | 一些新公链代币,利润空间大 |
| L3 机会层 | 流动性差,价差大 | 5%-10% | 小市值币,偶尔吃一口就走 |
你想想看,如果把太多资金放在L3,遇到一次流动性枯竭,你可能连平仓都平不掉。我有个朋友就是,在某个小币上放了30%资金,结果项目方跑路,直接归零。
具体怎么分层?我一般用「订单簿深度」和「平均价差」两个指标:
def liquidity_tier(orderbook_depth, avg_spread):
"""
根据订单簿深度和平均价差判断流动性层级
"""
if orderbook_depth > 1000 and avg_spread < 0.001:
return "L1"
elif orderbook_depth > 200 and avg_spread < 0.005:
return "L2"
else:
return "L3"
# 实际项目中,我会每天跑一次这个函数
# 动态调整每个品种的层级归属
一个小技巧:L3品种我建议只做「挂单吃单」策略,不做「双边报价」。因为流动性太差,你挂的单可能几个小时都成交不了,白白占用资金。我一般只在L3品种上放5%以内的资金,而且设好止损线,到了就撤。
四、整体资金分配流程图
下面这张图是我自己项目里用的资金分配框架,你可以参考:
这张图的核心逻辑是:先算风险平价,再根据波动率动态调,最后按流动性分层做最终配比。每一步都在修正上一层的偏差。
五、实战中的几个坑
- 不要迷信模型:模型算出来的是「数学最优」,但市场不跟你讲数学。比如某个品种突然出利好,流动性暴增,这时候你按模型减仓反而亏了。我一般会在模型输出上加一个「人工干预开关」。
- 注意资金利用率:你分给L1的资金太多,可能大部分时间都闲置着。我习惯在L1品种上做「杠杆做市」,用少量资金撬动更大仓位,但前提是你对风控有绝对把握。
- 定期复盘:每周跑一次回测,看看你的资金分配在过去一周的表现。如果某个品种连续亏损,别犹豫,砍掉它。
最后说一句:资金分配没有「万能公式」。每个做市商的资金体量、风险偏好、技术能力都不一样。我的建议是,先用小资金跑三个月,找到适合自己的节奏,再慢慢放大。别一上来就全仓干,那是赌徒,不是做市商。
公众号:蓝海资料掘金营,微信deep3321