优化策略权重、设定波动率目标,并自动化下单调仓。
管理系统读取所有策略的回测结果,找出让投组动能最大化的权重,再化成每个策略的下单金额。Reconciler 随后让交易所实际持仓持续对齐这些金额。
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,里面有每个策略的下单金额(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 写入。
启动 reconciler。它每 5 秒轮询一次,只要策略信号、下单金额或下单开关有变动就对账一次,另外每 5 分钟再保底对账一轮。
bash manager/start_reconciler.sh
连接交易所时,agent 会把 get_positions() 和 place_order() 接上该交易所的下单函数库——这一步不用你自己动手。
Manager 在过去 N 天(默认 365 天)的投组权益曲线上,最大化 slope / std。Slope 是对累积收益做线性回归得到的斜率——曲线越陡峭得分越高。除以 std 则惩罚波动,让优化器自然偏好稳定上升的策略组合。
找到最优权重后,manager 计算投组年化波动率并推导杠杆系数:leverage = target_vol / ann_vol。这让所有仓位等比放大,无论底层策略波动多大,投组的实际风险都贴近你设定的目标。