實盤下單組合

策略如何進入實盤:金額配置、自動對帳、全部平倉與下單開關。

最後更新 2026-08

概覽

下單組合是允許實際下單的策略集合。組合裡的每個策略各配置一筆固定金額,reconciler 常駐程式持續把策略自己建立的部位調整到合併後的目標——這些單不需要你自己下。它只管理自己下過的單:你手動開的倉它看不見、也永遠不會碰。

strategy.py ──► state.json ──────────────┐
   (cron)                                ├──► reconciler.py ──► exchange
amounts     ──► portfolio_config.json ───┘

金額制配置

組合裡的每個策略各配置一筆金額(以帳戶幣別計,例如 USD)——訊號滿倉時這個策略動用的資金。每個標的的目標部位是所有策略的加總:

target[symbol] = Σ ( amount × position )

position 是策略訊號,可以是小數(波動率調整的策略可能輸出 0.5 或 1.8)。你設定多少金額就用多少金額計算倉位,不會隨帳戶淨值漂移。例外:群益台指期策略的金額是口數(合約數量),不是美元金額。

絕對不要手改 manager/portfolio_config.json金額請在工作區「下單設定」頁設定,或請 agent 代勞;優化器配重只透過 manager.py 套用——預設是 dry-run,你確認後加上 --apply 才會寫入。

Reconciler 自動對帳

Reconciler 是常駐程式,每 5 秒輪詢一次,遇到以下任一情況就對帳:

  • 策略更新訊號(state.json 變動)
  • 你在「下單設定」儲存了新的金額
  • 下單開關被掛上或解除
  • 距離上次對帳超過 5 分鐘——保底輪,用來抓部位漂移與失效的交易所金鑰
  • TWAP/自訂下單方式執行完成——讓殘餘差額在一輪之內收斂,不必等 5 分鐘保底輪

每一輪把目標部位和自己的帳本相比——reconciler 自行記帳,累加自己下過的每筆單(manager/orders.jsonl),不是讀交易所的帳戶持倉,所以你手動開的倉不會被當成「已經持有」而被加碼或平掉——然後下單抹平差額。預設市價單,每個策略可在下單設定改成市價/TWAP/限價追價/自訂下單方式(群益台指期僅支援市價)。差額低於 $10 就略過(台指期改以整數口數對帳)。翻倉(多翻空)會拆成「只減倉平掉舊倉」加「重新開新倉」兩筆,雙向持倉帳戶不會同時持有多空。

如果連續 3 次讀不到交易所持倉(金鑰被撤銷、IP 未加白名單、交易所故障),reconciler 會自動掛上下單開關。它只會掛、不會自己解除——解除永遠由你決定。

全部平倉

工作區點「暫停下單」後,對話框二選一:「暫停,不動部位」只掛上下單開關;「暫停並關閉部位」(或 python3 manager/flatten.py)把策略自己建立的部位全部市價平掉——只平 bot 自己帳本上的部位,你手動開的倉不動;現貨也只賣策略管理範圍內的幣,你自己持有的其他幣不會被賣。它是緊急煞車,不是調倉工具:

  • 會先掛上下單開關,平倉後不會有任何新倉重新開出——直到你按下「啟動下單」前都維持暫停。
  • 低於交易所最小下單量的部位平不掉——這些零頭會記錄下來並保留。
  • 每筆平倉都連同交易所回報的成交結果寫進交易歷史。

下單開關(HALT)

下單開關掛上後,所有會增加曝險的訂單都在程式層被拒絕。平倉、停損停利與取消訂單照常執行——開關不會困住你想減的倉位。

掛上的方式:工作區的「暫停下單」(含「暫停並關閉部位」)、跟 agent 說停止交易,或交易所斷線時自動觸發。開關永遠不會自動解除——只有你按下「啟動下單」或明確要求 agent 恢復,才會繼續下單。按「啟動下單」時再二選一:「啟動並補齊部位」立刻用市價把部位補到策略目前的訊號狀態;「啟動,等新訊號才進場」現在不下單,每條策略等它下次進場、出場或翻向才開始交易。每一次下單嘗試與拒絕都會寫入稽核紀錄。

交易歷史與成交紀錄

每筆已執行訂單都會連同它的 legs(逐腿成交明細)寫入 manager/orders.jsonl——每一腿記錄交易所回報的成交價與成交數量。翻倉會記兩腿:平倉腿是出場價,開倉腿是進場價。

部分失敗也會記錄:翻倉的平倉腿成交、開倉腿卻失敗時,這筆紀錄會保留並標記失敗——只要真的動到錢,交易歷史絕不隱藏。工作區的「交易歷史」分頁顯示的就是這個檔案。