实盘下单组合

策略如何进入实盘:金额配置、自动对账、全部平仓与下单开关。

最后更新 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——每一腿记录交易所返回的成交价与成交数量。翻仓会记两腿:平仓腿是出场价,开仓腿是进场价。

部分失败也会记录:翻仓的平仓腿成交、开仓腿却失败时,这笔记录会保留并标记失败——只要真的动到钱,交易历史绝不隐藏。工作区的「交易历史」标签页显示的就是这个文件。