策略如何進入實盤:金額配置、自動對帳、全部平倉與下單開關。
下單組合是允許實際下單的策略集合。組合裡的每個策略各配置一筆固定金額,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 是常駐程式,每 5 秒輪詢一次,遇到以下任一情況就對帳:
state.json 變動)每一輪把目標部位和自己的帳本相比——reconciler 自行記帳,累加自己下過的每筆單(manager/orders.jsonl),不是讀交易所的帳戶持倉,所以你手動開的倉不會被當成「已經持有」而被加碼或平掉——然後下單抹平差額。預設市價單,每個策略可在下單設定改成市價/TWAP/限價追價/自訂下單方式(群益台指期僅支援市價)。差額低於 $10 就略過(台指期改以整數口數對帳)。翻倉(多翻空)會拆成「只減倉平掉舊倉」加「重新開新倉」兩筆,雙向持倉帳戶不會同時持有多空。
如果連續 3 次讀不到交易所持倉(金鑰被撤銷、IP 未加白名單、交易所故障),reconciler 會自動掛上下單開關。它只會掛、不會自己解除——解除永遠由你決定。
工作區點「暫停下單」後,對話框二選一:「暫停,不動部位」只掛上下單開關;「暫停並關閉部位」(或 python3 manager/flatten.py)把策略自己建立的部位全部市價平掉——只平 bot 自己帳本上的部位,你手動開的倉不動;現貨也只賣策略管理範圍內的幣,你自己持有的其他幣不會被賣。它是緊急煞車,不是調倉工具:
下單開關掛上後,所有會增加曝險的訂單都在程式層被拒絕。平倉、停損停利與取消訂單照常執行——開關不會困住你想減的倉位。
掛上的方式:工作區的「暫停下單」(含「暫停並關閉部位」)、跟 agent 說停止交易,或交易所斷線時自動觸發。開關永遠不會自動解除——只有你按下「啟動下單」或明確要求 agent 恢復,才會繼續下單。按「啟動下單」時再二選一:「啟動並補齊部位」立刻用市價把部位補到策略目前的訊號狀態;「啟動,等新訊號才進場」現在不下單,每條策略等它下次進場、出場或翻向才開始交易。每一次下單嘗試與拒絕都會寫入稽核紀錄。
每筆已執行訂單都會連同它的 legs(逐腿成交明細)寫入 manager/orders.jsonl——每一腿記錄交易所回報的成交價與成交數量。翻倉會記兩腿:平倉腿是出場價,開倉腿是進場價。
部分失敗也會記錄:翻倉的平倉腿成交、開倉腿卻失敗時,這筆紀錄會保留並標記失敗——只要真的動到錢,交易歷史絕不隱藏。工作區的「交易歷史」分頁顯示的就是這個檔案。