权重管理

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

概览

管理系统读取所有策略的回测结果,找出让投组动能最大化的权重,再化成每个策略的下单金额。Reconciler 随后让交易所实际持仓持续对齐这些金额。

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,里面有每个策略的下单金额(amounts,实盘仓位的计算基准)、交易所路由,以及优化器算出的权重与杠杆。

{
  "amounts": {
    "btc_ti_24h":       6000,
    "btc_ti_24h_short": 4000
  },
  "exchanges": {
    "btc_ti_24h":       "bingx",
    "btc_ti_24h_short": "bingx"
  },
  "weights": {
    "btc_ti_24h":       0.60,
    "btc_ti_24h_short": 0.40
  },
  "leverage": 2.62
}

仓位以金额制计算:target = amount × position。绝对不要手改这个文件——金额请在工作区「下单设置」页设置(或请 agent 代劳),优化器权重也只通过 manager.py --apply 写入。

4

启动 reconciler。它每 5 秒轮询一次,只要策略信号、下单金额或下单开关有变动就对账一次,另外每 5 分钟再保底对账一轮。

bash manager/start_reconciler.sh

连接交易所时,agent 会把 get_positions()place_order() 接上该交易所的下单函数库——这一步不用你自己动手。

优化目标:Slope / Std

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

波动率 Targeting

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

定期重跑 manager(例如每周一次)以随策略表现更新权重。Reconciler 每次轮询都读最新的 portfolio_config.json,更新后的权重马上生效。
要上实盘?金额配置、全部平仓、下单开关与交易历史,见〈实盘下单组合〉。