權重管理

優化策略配重、設定波動率目標,並自動化下單調倉。

概覽

管理系統讀取所有策略的回測結果,找出讓投組動能最大化的配重,再化成每個策略的下單金額。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,更新後的配重馬上生效。
要上實盤?金額配置、全部平倉、下單開關與交易歷史,見〈實盤下單組合〉。