feedback

权重管理

优化策略权重、设定波动率目标,并自动化下单调仓。

概览

管理系统读取所有策略的回测结果,找出让投组动能最大化的权重,乘上杠杆系数以达到目标波动率,再自动调仓让交易所持仓与目标一致。

strategy.py ──► state.json ──────────┐
   (cron)       stats.json           ├──► reconciler.py ──► exchange
manager.py ──► portfolio_config.json ┘

工作流程

1

对每个策略跑一次回测,这会在策略文件夹里写入 stats.json(含每日收益)。

python3 strategies/my_strategy/strategy.py

没有 stats.json 的策略会被 manager 跳过。

2

执行投组优化器。它读取所有 stats.json,找出让合并后权益曲线 slope/std 最大的权重。

python3 manager/manager.py --target-vol 0.30

--target-vol 0.30 设定年化波动率目标(30%)。Manager 计算 leverage = target_vol / portfolio_vol 并存入 portfolio_config.json。

3

确认 manager/portfolio_config.json,里面有最优权重、投组已实现波动率、以及杠杆系数。

{
  "account_value": 10000,
  "weights": {
    "btc_ti_24h":       0.60,
    "btc_ti_24h_short": 0.40
  },
  "ann_volatility_pct": 11.45,
  "target_vol_pct":     30.0,
  "leverage":           2.62
}

Reconciler 下单时将每个仓位乘上 leverageorder = account_value × leverage × weight × position

4

启动 reconciler,每 5 秒轮询一次,检测到策略更新 state 后自动下单调仓。

python3 manager/reconciler.py

运行前先在 manager/reconciler.py 里实现 get_positions()place_order()(填入你的交易所 API)。

优化目标:Slope / Std

Manager 在过去 N 天(默认 365 天)的投组权益曲线上,最大化 slope / std。Slope 是对累积收益做线性回归得到的斜率——曲线越陡峭得分越高。除以 std 则惩罚波动,让优化器自然偏好稳定上升的策略组合。

波动率 Targeting

找到最优权重后,manager 计算投组年化波动率并推导杠杆系数:leverage = target_vol / ann_vol。这让所有仓位等比放大,无论底层策略波动多大,投组的实际风险都贴近你设定的目标。

定期重跑 manager(例如每周一次)以随策略表现更新权重。Reconciler 每次轮询都读最新的 portfolio_config.json,更新后的权重马上生效。