Skip to content

订单执行与匹配引擎

fasiondog edited this page Nov 22, 2025 · 1 revision

订单执行与匹配引擎

**本文档引用的文件** - [TradeManager.h](file://hikyuu_cpp/hikyuu/trade_manage/TradeManager.h) - [TradeManager.cpp](file://hikyuu_cpp/hikyuu/trade_manage/TradeManager.cpp) - [TradeRecord.h](file://hikyuu_cpp/hikyuu/trade_manage/TradeRecord.h) - [TradeCostBase.h](file://hikyuu_cpp/hikyuu/trade_manage/TradeCostBase.h) - [System.h](file://hikyuu_cpp/hikyuu/trade_sys/system/System.h) - [TradeRequest.h](file://hikyuu_cpp/hikyuu/trade_sys/system/TradeRequest.h) - [SlippageBase.h](file://hikyuu_cpp/hikyuu/trade_sys/slippage/SlippageBase.h) - [test_TradeManager.cpp](file://hikyuu_cpp/unit_test/hikyuu/trade_manage/test_TradeManager.cpp)

目录

  1. 引言
  2. 订单执行流程
  3. 交易记录生成
  4. 交易成本计算
  5. 滑点模型应用
  6. 资金与持仓更新
  7. 部分成交与失败处理
  8. 单元测试验证
  9. 结论

引言

订单执行与匹配引擎是Hikyuu量化交易系统的核心组件,负责处理交易请求、执行买卖操作、管理资金和持仓,并生成详细的交易记录。该引擎通过TradeManager类实现,能够处理买入、卖出、卖空和买入平仓等多种交易操作。系统通过精确的计算和严格的验证机制,确保交易执行的准确性和可靠性。

订单执行流程

订单执行流程始于系统部件发出的交易请求,由TradeManager接收并处理。TradeManager根据当前持仓、可用资金和交易成本执行相应的交易操作。

sequenceDiagram
participant System as "交易系统"
participant TradeManager as "交易管理器"
participant TradeRecord as "交易记录"
System->>TradeManager : 发送交易请求
TradeManager->>TradeManager : 验证交易参数
TradeManager->>TradeManager : 计算实际成交价
TradeManager->>TradeManager : 计算交易成本
TradeManager->>TradeManager : 更新资金和持仓
TradeManager->>TradeRecord : 生成交易记录
TradeRecord-->>TradeManager : 返回交易结果
TradeManager-->>System : 返回执行结果
Loading

Diagram sources

  • TradeManager.h
  • System.h

Section sources

  • TradeManager.h
  • System.h

交易记录生成

交易记录(TradeRecord)是订单执行的核心输出,包含交易的详细信息,如交易对象、时间、价格、数量和成本等。

TradeRecord结构

classDiagram
class TradeRecord {
+Stock stock
+Datetime datetime
+BUSINESS business
+price_t planPrice
+price_t realPrice
+price_t goalPrice
+double number
+CostRecord cost
+price_t stoploss
+price_t cash
+SystemPart from
+string remark
}
Loading

Diagram sources

  • TradeRecord.h

Section sources

  • TradeRecord.h

计划价与实际成交价

计划价(planPrice)是系统预期的交易价格,而实际成交价(realPrice)是最终执行的价格。两者可能因滑点模型而产生差异。

flowchart TD
A[系统发出交易请求] --> B{是否存在滑点模型}
B --> |是| C[应用滑点模型计算实际价格]
B --> |否| D[实际价格等于计划价格]
C --> E[生成交易记录]
D --> E
E --> F[更新资金和持仓]
Loading

Diagram sources

  • TradeManager.h
  • SlippageBase.h

Section sources

  • TradeManager.h
  • SlippageBase.h

交易成本计算

交易成本(TradeCost)是订单执行的重要组成部分,直接影响最终的成交结果。系统通过TradeCostBase接口计算各种交易成本。

交易成本组成

交易成本主要由以下几部分组成:

  • 佣金(commission)
  • 印花税(stamptax)
  • 过户费(transferfee)
  • 其他费用(others)
  • 总成本(total)
classDiagram
class CostRecord {
+price_t commission
+price_t stamptax
+price_t transferfee
+price_t others
+price_t total
}
class TradeCostBase {
+virtual CostRecord getBuyCost()
+virtual CostRecord getSellCost()
+virtual CostRecord getBorrowCashCost()
+virtual CostRecord getReturnCashCost()
+virtual CostRecord getBorrowStockCost()
+virtual CostRecord getReturnStockCost()
}
TradeCostBase <|-- FixedA2017TradeCost
TradeCostBase <|-- ZeroTradeCost
Loading

Diagram sources

  • TradeCostBase.h
  • TradeRecord.h

Section sources

  • TradeCostBase.h
  • TradeRecord.h

滑点模型应用

滑点模型(Slippage)用于模拟实际交易中价格与预期价格的偏差,提高回测的准确性。

滑点模型接口

classDiagram
class SlippageBase {
+virtual price_t getRealBuyPrice()
+virtual price_t getRealSellPrice()
+virtual void _calculate()
}
SlippageBase <|-- SlippageFixed
SlippageBase <|-- SlippagePercent
SlippageBase <|-- SlippagePrice
Loading

Diagram sources

  • SlippageBase.h

Section sources

  • SlippageBase.h

资金与持仓更新

订单执行后,系统会更新资金和持仓状态,确保账户信息的准确性。

资金更新逻辑

flowchart TD
A[买入操作] --> B[计算总成本]
B --> C[检查可用资金]
C --> D{资金是否充足}
D --> |是| E[扣除资金和成本]
D --> |否| F[交易失败]
E --> G[更新现金余额]
G --> H[生成交易记录]
I[卖出操作] --> J[计算收入]
J --> K[扣除交易成本]
K --> L[增加现金余额]
L --> M[生成交易记录]
Loading

Diagram sources

  • TradeManager.cpp

Section sources

  • TradeManager.cpp

持仓更新逻辑

flowchart TD
A[买入操作] --> B{是否已有持仓}
B --> |是| C[增加持仓数量]
B --> |否| D[创建新持仓]
C --> E[更新持仓信息]
D --> E
E --> F[生成交易记录]
G[卖出操作] --> H{卖出数量是否等于持仓}
H --> |是| I[清空持仓]
H --> |否| J[减少持仓数量]
I --> K[移至历史持仓]
J --> L[更新持仓信息]
K --> M[生成交易记录]
L --> M
Loading

Diagram sources

  • TradeManager.cpp
  • TradeManager.cpp

Section sources

  • TradeManager.cpp
  • TradeManager.cpp

部分成交与失败处理

系统需要处理部分成交和交易失败的情况,确保账户状态的一致性。

交易失败处理

flowchart TD
A[交易请求] --> B{参数验证}
B --> |失败| C[返回无效交易记录]
B --> |成功| D{资金/持仓检查}
D --> |不足| E[返回无效交易记录]
D --> |充足| F[执行交易]
F --> G{执行成功}
G --> |是| H[更新状态]
G --> |否| I[返回无效交易记录]
Loading

Diagram sources

  • TradeManager.cpp
  • TradeManager.cpp

Section sources

  • TradeManager.cpp
  • TradeManager.cpp

单元测试验证

通过单元测试验证订单执行逻辑的正确性,确保系统稳定可靠。

测试用例分析

flowchart TD
A[测试买入操作] --> B[验证资金扣除]
B --> C[验证持仓增加]
C --> D[验证交易记录]
E[测试卖出操作] --> F[验证资金增加]
F --> G[验证持仓减少]
G --> H[验证交易记录]
I[测试卖空操作] --> J[验证借入股票]
J --> K[验证资金增加]
K --> L[验证交易记录]
M[测试买入平仓] --> N[验证归还股票]
N --> O[验证资金扣除]
O --> P[验证交易记录]
Loading

Diagram sources

  • test_TradeManager.cpp

Section sources

  • test_TradeManager.cpp

结论

Hikyuu的订单执行与匹配引擎通过TradeManager类实现了完整的交易生命周期管理。系统能够准确处理各种交易操作,包括买入、卖出、卖空和买入平仓。通过精确的交易成本计算和滑点模型应用,确保了回测结果的可靠性。资金和持仓的更新机制保证了账户状态的一致性,而完善的错误处理机制则提高了系统的健壮性。单元测试验证了各项功能的正确性,为实际交易提供了坚实的基础。

Clone this wiki locally