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,更新後的配重馬上生效。