Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions docs/account-new-risk-gate.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -118,3 +118,45 @@ W1 平台 adapter 已有实现;持久化 OPEN 熔断、实际账户读回和
`target_vol=None` 使用既有默认值;显式非正数、非有限数、布尔值或非数值会禁止新增风险。非法 realized volatility、drawdown 或 equity 同样禁止新增风险。信封数值缩放仅用于诊断,执行方必须检查 `new_risk_allowed` 和原因。

`NewRiskAdmissionResult` 新增默认 false 的 `risk_input_invalid` 和 `hard_brake_triggered`。数据错误且没有可信 drawdown 硬刹车时,`combined_scale=None` 不表示零仓位;可信硬刹车同时存在时,两个标记均为 true,缩放保留 0。`apply_envelope_to_sized_weight` 对数据错误返回 `None`,可信硬刹车同时存在时返回 0。调用方必须处理可选返回值;升级前应完成消费者动作联测。

## 账户日志中的持久化回撤 OPEN

`AccountSubmissionSession.record_circuit_breaker_open(snapshot=...)` 接受现有回撤门确认的
硬刹车事实,在同一物理账户的 `account_submission.v1` 追加日志中写入
`CIRCUIT_BREAKER_OPEN`。沿用排他创建、连续序号、哈希链及完整读回;不新建状态文件。
事件只含注入的 equity/peak/drawdown 与调用方身份,不证明其真实来源或资金流口径。
显式 drawdown 无效但有效 equity/peak 已独立确认越界时,日志保留 equity/peak,
将 drawdown 记为 null,由读回重新计算回撤并验证 OPEN;无效值不能使该次越界丢失。
有效的显式 drawdown 已确认越界而补充 peak 无效时,保留 equity/drawdown,
将 peak 记为 null;读回仍须用保留的有效事实验证 OPEN。
原始观测的数据错误仍由风险门报告,不把无效值当作有效事实。

`read_state()` 增加 `circuit_breaker_open` 布尔字段。合法旧日志初始为 false;已记录
OPEN 则持续为 true,包括其他 profile 及进程重启。恢复观测、CLOSED、reset 形状事件
都不能清除它;本次不提供复位 API。无效输入、冲突、损坏或未确认写入须禁止新增风险。

平台使用 `reserve(order, new_risk=True)` 将新增风险类别写入 PREPARED;OPEN 时拒绝
reserve,dispatch 也重新检查 OPEN,阻止已准备但尚未发送的新增风险。省略该参数的
旧调用保持原语义,仍须由各自平台完成类别判断和门控;本次接线范围为 IBKR 的买单。
OPEN 不创建目标、不产生卖单、不替代既有减仓证明,不改变 UNKNOWN 的含义。
dispatch 完成订单及账户验证后,使用账户日志的进程内共享锁和跨进程保护,
在保护范围内重新读取 OPEN,并持有保护直到 submit 和结果写入完成;所有 OPEN
写入使用相同保护。锁按日志位置区分,不随 owner/profile 改变。
本地日志使用同一文件上的内核排他锁,适用于共享同一文件锁域的进程;不能据此
声称不同主机或不同挂载已协调。ObjectStore 没有锁释放或 CAS 接口,因此使用
create-only 记录绑定唯一进程,读回确认所有权后才允许 OPEN 写入或 dispatch。
同一 owner 的其他进程、fork 子进程及重启不能接管该记录;不提供超时、自动清除
或接管。所有权不明、创建或读回失败时拒绝派发;本地锁失败也拒绝派发。
保护建立后,最终日志读取后及 submit 紧前再次确认身份:本地核对文件描述符与
锁路径的设备号/inode,拒绝路径丢失、替换或符号链接;ObjectStore 重新读回并
核对进程所有权。已确认的 session 身份不能通过重建丢失的锁或记录来恢复。
检测失败使 session 停止写入;已消耗的尝试继续保持未决,不能按未成交重试。
submit 返回后与保护结束前也检查身份;发生在已进入 submit 之后的丢失不能撤销
券商动作。存储须保证锁路径稳定、所有权记录不可变及读回一致;检查不代替这些
约束,也不能证明两次检查之间任意外部存储修改或旧写入器已经受控。
已进入 submit 的订单先于等待中的 OPEN,不声称取消在途订单。

这是追加事件类型:旧版本读取新事件会拒绝,不能把混用旧写入器视为安全迁移。
消费者升级须先审核库和平台补丁,再单独协调固定版本、旧写入器停止与运行验证;
本次不修改任何依赖固定版本或部署配置。离线合成日志不能证明真实初始状态、旧写入器
已停止、实际消费者已升级或实盘行为;这些验收保持 NOT_PROVEN。
Loading
Loading