優化策略配重、設定波動率目標,並自動化下單調倉。
管理系統讀取所有策略的回測結果,找出讓投組動能最大化的配重,乘上槓桿係數以達到目標波動率,再自動調倉讓交易所持倉與目標一致。
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。這讓所有倉位等比放大,無論底層策略波動多大,投組的實際風險都貼近你設定的目標。