优化策略权重、设定波动率目标,并自动化下单调仓。
管理系统读取所有策略的回测结果,找出让投组动能最大化的权重,乘上杠杆系数以达到目标波动率,再自动调仓让交易所持仓与目标一致。
strategy.py ──► state.json ──────────┐
(cron) stats.json ├──► reconciler.py ──► exchange
manager.py ──► portfolio_config.json ┘
对每个策略跑一次回测,这会在策略文件夹里写入 stats.json(含每日收益)。
python3 strategies/my_strategy/strategy.py
没有 stats.json 的策略会被 manager 跳过。
执行投组优化器。它读取所有 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。
确认 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 下单时将每个仓位乘上 leverage:order = account_value × leverage × weight × position
启动 reconciler,每 5 秒轮询一次,检测到策略更新 state 后自动下单调仓。
python3 manager/reconciler.py
运行前先在 manager/reconciler.py 里实现 get_positions() 和 place_order()(填入你的交易所 API)。
Manager 在过去 N 天(默认 365 天)的投组权益曲线上,最大化 slope / std。Slope 是对累积收益做线性回归得到的斜率——曲线越陡峭得分越高。除以 std 则惩罚波动,让优化器自然偏好稳定上升的策略组合。
找到最优权重后,manager 计算投组年化波动率并推导杠杆系数:leverage = target_vol / ann_vol。这让所有仓位等比放大,无论底层策略波动多大,投组的实际风险都贴近你设定的目标。