第六章 交易对与市场选择
做市系统上线前,最头疼的问题是什么?
我个人觉得,不是策略写不好,而是选错了交易对。你想想看,一个流动性极差的币种,你的挂单挂上去半天没人理,价差拉得再大也没用。我早期踩过这个坑,选了个日交易量不到10万U的山寨币,结果一个月下来手续费都不够服务器电费。
交易对筛选标准
选交易对,说白了就是选战场。我一般从三个维度来卡:
- 交易量门槛:24小时交易量至少100万U。低于这个数,你的做市策略很难施展
- 价差稳定性:平均买卖价差不超过0.1%。太宽说明市场深度不够
- 挂单深度:在±0.5%价格范围内,至少有50万U的挂单量
我的经验值:新手做市,优先选BTC、ETH的主流交易对。别一上来就搞小币种,流动性陷阱会让你怀疑人生。
流动性评估
流动性这东西,不能只看交易量。我记得有一次,某个币种24小时交易量看着挺大,但点进去一看,全是刷量机器人。真正的流动性,得看这几个指标:
- 订单簿深度:取买卖各10档的挂单总量
- 滑点测试:模拟市价单买入1万U,看实际成交价偏离了多少
- 时间加权流动性:不同时间段采样,避免只看高峰期
避坑指南:我曾经用单一时间点的深度数据做评估,结果策略上线后频繁被吃单。后来改成每小时采样一次,取24小时平均值,效果好了很多。
波动率计算
波动率是做市策略的核心参数。为什么?因为波动率直接决定了你的库存风险。
我常用的计算方法是:
// 对数收益率计算
def calculate_volatility(prices, window=24):
log_returns = np.log(prices[1:] / prices[:-1])
volatility = np.std(log_returns) * np.sqrt(window)
return volatility
// 实际使用中,我会用滚动窗口
rolling_vol = prices.rolling(24).apply(
lambda x: np.std(np.log(x[1:]/x[:-1])) * np.sqrt(24)
)
嗯,这里要注意:波动率不是越高越好。高波动意味着价差可以拉大,但库存风险也成倍增加。我一般把年化波动率控制在30%-80%之间。
| 波动率范围 | 做市策略建议 | 风险等级 |
|---|---|---|
| < 20% | 窄价差,高频率 | 低 |
| 20% - 50% | 中等价差,动态调整 | 中 |
| 50% - 80% | 宽价差,低仓位 | 高 |
| > 80% | 建议观望 | 极高 |
相关性分析
做市不是单打独斗。如果你同时做多个交易对,它们之间的相关性会直接影响你的整体风险敞口。
我习惯用皮尔逊相关系数来算:
def correlation_matrix(pairs_data):
# pairs_data: dict, key为交易对名, value为价格序列
df = pd.DataFrame(pairs_data)
corr = df.corr(method='pearson')
return corr
# 实际案例:BTC/USDT 和 ETH/USDT 的相关性通常在0.7-0.9之间
# 这意味着它们会同时涨跌,做市时要控制总仓位
重要提醒:相关性不是一成不变的。极端行情下,所有资产的相关性都会趋近于1。2020年3月那次暴跌,BTC和黄金都一起跌,更别说币圈内部了。
我个人建议,做市组合中相关性低于0.3的交易对至少占一半。这样即使某个板块崩了,其他仓位还能对冲一下。
知识体系总览
下面这张图,是我做交易对筛选时的完整流程。你可以把它当成一个检查清单:
这张图把整个筛选流程串起来了。你从中心开始,沿着四个方向展开,每个分支都有具体的量化指标。做市不是拍脑袋,每一步都要有数据支撑。
最后说一句:交易对筛选这件事,我建议你每周重新评估一次。市场在变,流动性在变,你的策略也要跟着调整。别一套参数用一年,那跟刻舟求剑没区别。