这是一个非常经典的交易系统架构问题。将止盈触发逻辑放在哪里,直接影响到系统的清晰度、可维护性和扩展性。
🎯 核心结论
我强烈建议你将止盈触发逻辑放在一个独立的 【交易策略执行】 或 【风险管理】 领域中。它作为订单状态更新的“下游消费者”,而不是订单或持仓领域的一部分。
📊 方案对比
为了帮你更直观地理解,下图对比了三种常见的架构方案及其数据流:
flowchart LR
A[“订单状态更新事件”] --> B{“止盈逻辑应放在哪个领域?”}
B --> PlanA[“方案A: 订单领域”]
B --> PlanB[“方案B: 持仓领域”]
B --> PlanC[“方案C: 独立策略领域<br>(推荐)”]
PlanA --> A_Flow[“订单服务处理更新<br>并直接调用止盈”]
PlanB --> B_Flow[“订单服务通知持仓服务<br>由持仓服务计算并触发止盈”]
PlanC --> C_Flow[“订单服务发布事件<br>策略执行服务订阅事件<br>判断并触发止盈”]
A_Flow --> A_Risk[“❌ 职责过重,耦合紧密”]
B_Flow --> B_Risk[“⚠️ 稍好,但持仓领域变复杂”]
C_Flow --> C_Risk[“✅ 职责清晰,易于扩展”]
下面我们来详细分析为什么方案C(独立策略领域)是最佳选择:
方案C:独立策略执行领域(推荐)
这个方案的核心是事件驱动:订单状态更新后,发布一个领域事件;一个独立的策略执行服务订阅该事件,负责计算并触发止盈。
-
架构流程:
-
订单服务 只负责更新自身状态,并发布一个
OrderFilledEvent(订单已成交事件)。 -
策略执行服务 订阅该事件。收到后,它会:
a. 根据订单ID关联到对应的持仓和预先设置的止盈规则。
b. 检查当前市场价(可能需要实时行情)是否达到止盈条件。
c. 如果条件满足,调用订单服务创建平仓订单。
-
-
优势:
-
高内聚低耦合:订单和持仓领域保持纯净,只关心核心状态。止盈策略变化不影响它们。
-
极易扩展:未来添加止损、移动止盈、条件单等新策略,只需在该领域新增逻辑,或创建新的策略执行服务。
-
清晰可测:每个服务职责单一,单元测试和集成测试都更容易编写。
-
正文完