用规模、动量与波动打造加密量化策略:从数据到回测全解析

Posted by AiuYH8 Crypto Hub on September 5, 2025

主题关键词:加密货币、规模因子、动量因子、量化交易、回测系统、波动性、多空策略、因子模型、CoinGecko API、策略收益


1. 研究思路:用四大因子寻找 α

学术界早已验证,传统市场中“规模、动量、交易量、波动率”可带来超额收益。这篇基于 JF 论文1的最新研究把同一套逻辑搬到加密货币世界:

  • 规模(市值)越低的品种,长期越可能补涨;
  • 动量(过去 4 周收益强者恒强);
  • 交易量(成交金额)代表关注度;
  • 波动率(收益标准差)衡量风险溢价。

把每周所有代币按上述因子分五档,做多最高档(或最低档)并同时做空反方向,即可构建纯因子多空策略。

👉 立即查看实时因子排序,零门槛获取 API 数据


2. 免费数据:砍掉成本的第一步

原论文使用付费源,对普通量化爱好者并不友好。本教程改用 CoinGecko 免费 API,每天可拉 10–50 万条记录,足够做组内回测。核心端点:

from pycoingecko import CoinGeckoAPI
cg = CoinGeckoAPI()

# 先列出全部代币 ID
ids = [c['id'] for c in cg.get_coins_list()]

# 拉 4 年历史行情(币价、市值、成交量)
cg.get_coin_market_chart_range_by_id(
    id='bitcoin',
    vs_currency='usd',
    from_timestamp=1577836800,
    to_timestamp=1704067200
)

限速提示:免费版每分钟建议 ≤50 次请求,代码插入 time.sleep(60) 即可稳过风控。


3. 数据清洗:让脏数据变“食用级”

  1. 去零:把价格为 0 的记录当缺失值剔除,防止算收益率炸成 inf
  2. 剔空:只要任一字段缺失,整行丢掉,保证后续回归不报错。
  3. 日转周:把日频价格合并成周频,否则因子会高估活跃小币的波动。

关键片段:

# 计算周频收益
data['week_ret'] = data['price'].pct_change(periods=7)

# 统一周切片
data['week'] = data['date'].dt.to_period('W').apply(lambda r: r.start_time)

最终生成含 week, crypto, week_ret, MCAP, VOL, MOM 等列的宽表。


4. 构造 4 大核心因子

因子名称 计算方式 方向假设
规模因子 log(市值) 的倒数 小盘溢价
动量因子 过去 4 周累计收益 强者恒强
交易量因子 log(周均交易量) 资金跟随
波动因子 周收益标准差 风险溢价

代码示例(动量):

df['mom_4w'] = (
    df['week_ret'].shift(1) + 1
) * (
    df['week_ret'].shift(2) + 1
) * (
    df['week_ret'].shift(3) + 1
) * (
    df['week_ret'].shift(4) + 1
) - 1

5. 回测框架:5 行 Python 逻辑写清

  1. 筛选标的:当周市值 ≥ 100 万美元;
  2. 分位建仓:按因子值 pd.qcut 分 5 组,做多第一组、做空第五组;
  3. 持仓一周、周末再平衡;
  4. 记录等权与市值加权的 多空收益差
  5. 用累积净值和 CAPM 回归判断 α。

伪代码:

portfolio = pd.DataFrame()
for week in weeks:
    pool  = select_universe(df, week)           # 规则 1
    long  = pool[pool['factor_bin'] == 0]       # 规则 2
    short = pool[pool['factor_bin'] == 4]
    ret_l = (long['week_ret'] * long['w']).sum()
    ret_s = (short['week_ret'] * short['w']).sum()
    portfolio.append({'week': week,
                      'strategy_ret': ret_l - ret_s})

6. 结果展示:低规模策略 200 周翻倍

  • 简单统计:等权多头收益 +1.5%/周,空头 –3.9%/周,多空净差约 5.4%/周
  • 累积曲线:方向反过来做 1-5,200 周后净值 ≈ 2.2 倍,年化 ≈ 30%。
  • 回归检验:CAPM 回归 α > 0 且 t=2.3,显著战胜 市场风险溢价

尽管样本期途经熊市(2022 next Luna/FTX 暴雷),策略依旧给出正截距,说明 alpha 来自因子本身,而非系统性抬轿。


7. 常见疑问 Q&A

Q1:免费 API 数据会不会延迟,影响实盘?
A:CoinGecko 延迟 1–5 分钟,用于学术研究或「T+1」调仓没有问题;对高频策略请换专业数据源。

Q2:为何选周频而非日频?
A:加密噪声极高,日频换手 > 100% 的币比比皆是,周频可大幅降低交易成本侵蚀。

Q3:市值 100 万美元门槛是否会漏掉早期百倍币?
A:会,但门槛主要为了剔除异常流动性的死币。太早期项目也可另建“山寨因子”追踪,千万别一刀切。

Q4:策略能否加杠杆?
A:绝大多数交易所提供 3–5 倍杠杆,但资金费率分分钟反超 α,建议先用 1 倍跑稳健版本。

Q5:怎么验证是因子有效而非幸存者偏差?
A:把样本切成滚动 52 周训练 + 4 周测试,看跨期稳健性;若 α 仍旧存在,则可排除重大偏差。

Q6:下一步升级方向?
A:加入链上指标(活跃地址、交易所流入比率)和比特币波动率指数(BVOL)做交互项,效能有望再上一层。


8. 小结:把论文搬进终端的 3 个要点

  1. 白嫖而非白用——活用 CoinGecko 免费额度,低成本完成历史数据拼图。
  2. 因子四重奏——规模、动量、成交量、波动率;任挑一个做单因子即可显著跑赢基准。
  3. 杠杆与风控并重——虽多头年化可达 30%,务必考虑回撤、下架及资金费率,方能长期留存收益。

👉 从数据到实盘只差一次公开课,点击解锁完整代码模板

  1. 论文 DOI:10.1111/jofi.13119