第六章 交易对与市场选择

做市系统上线前,最头疼的问题是什么?

我个人觉得,不是策略写不好,而是选错了交易对。你想想看,一个流动性极差的币种,你的挂单挂上去半天没人理,价差拉得再大也没用。我早期踩过这个坑,选了个日交易量不到10万U的山寨币,结果一个月下来手续费都不够服务器电费。

交易对筛选标准

选交易对,说白了就是选战场。我一般从三个维度来卡:

  • 交易量门槛:24小时交易量至少100万U。低于这个数,你的做市策略很难施展
  • 价差稳定性:平均买卖价差不超过0.1%。太宽说明市场深度不够
  • 挂单深度:在±0.5%价格范围内,至少有50万U的挂单量

我的经验值:新手做市,优先选BTC、ETH的主流交易对。别一上来就搞小币种,流动性陷阱会让你怀疑人生。

流动性评估

流动性这东西,不能只看交易量。我记得有一次,某个币种24小时交易量看着挺大,但点进去一看,全是刷量机器人。真正的流动性,得看这几个指标:

  1. 订单簿深度:取买卖各10档的挂单总量
  2. 滑点测试:模拟市价单买入1万U,看实际成交价偏离了多少
  3. 时间加权流动性:不同时间段采样,避免只看高峰期

避坑指南:我曾经用单一时间点的深度数据做评估,结果策略上线后频繁被吃单。后来改成每小时采样一次,取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的交易对至少占一半。这样即使某个板块崩了,其他仓位还能对冲一下。

知识体系总览

下面这张图,是我做交易对筛选时的完整流程。你可以把它当成一个检查清单:

交易对与市场选择 - 知识体系 交易对筛选 筛选标准 流动性评估 波动率计算 相关性分析 交易量≥100万U 价差≤0.1% 深度≥50万U 订单簿深度 滑点测试 时间加权采样 对数收益率 滚动窗口计算 年化波动率 皮尔逊系数 组合风险控制 极端行情预警 核心目标:找到流动性好、波动可控、风险分散的交易对

这张图把整个筛选流程串起来了。你从中心开始,沿着四个方向展开,每个分支都有具体的量化指标。做市不是拍脑袋,每一步都要有数据支撑。

最后说一句:交易对筛选这件事,我建议你每周重新评估一次。市场在变,流动性在变,你的策略也要跟着调整。别一套参数用一年,那跟刻舟求剑没区别。

交易系统化学习资料 微信Strategy888888