# hft_eb
**Repository Path**: cangmj/hft_eb
## Basic Information
- **Project Name**: hft_eb
- **Description**: mirror: https://github.com/Helloworld152/hft_eb
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-05-14
- **Last Updated**: 2026-05-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# HFT Event-Based System (hft_eb)
## 简介
`hft_eb` 是一个基于事件驱动架构(Event-Driven Architecture)的高频交易系统核心引擎。目标是提供低延迟、高吞吐、可插拔的交易基础设施,并支持回测、回放、仿真与实盘接入。
文档入口:
- `docs/README.md`:设计文档总导航
- `docs/modules_overview.md`:模块职责总览
- `docs/plugins/README.md`:插件参数索引
## 核心设计哲学
- **Zero Copy (零拷贝)**: 事件在总线上传递时仅传递指针,杜绝不必要的内存拷贝。
- **Lock Free (无锁设计)**: 关键路径采用单线程同步调用,避免互斥锁竞争。
- **IPC RingBuffer**: 采用 **Mmap + Atomic Cursor** 实现跨进程/跨模块的无锁低延迟数据传输。
- **Plugin Architecture (插件化)**: 基于动态库(`.so`)的插件系统,支持运行时加载与灵活配置。
- **Risk First (风控优先)**: 风控模块作为交易前置过滤器,确保资金安全。
## 系统架构
### 架构总览
```mermaid
flowchart LR
subgraph Source["数据源 / 回放侧"]
Recorder["hft_md / hft_ba_md"]
Mmap[("Tick / Kline mmap data")]
Live["外部交易所 / 柜台 / 行情源"]
end
subgraph Engine["主引擎进程 hft_engine"]
EngineBoot["HftEngine
配置加载 / 模块生命周期 / 定时器"]
Bus{"EventBus"}
Core["Core State
order / position / account / snapshot"]
subgraph Research["研究 / 策略层模块"]
Replay["Replay / KlineReplay"]
Strategy["Strategy / StrategyTree / PyStrategy"]
Factor["Factor DAG"]
Portfolio["Portfolio (optional)"]
end
subgraph Execution["执行 / 观测层模块"]
Risk["Risk"]
Trade["SimTrade / GatewayPoll / CCAPI"]
Monitor["Monitor / SignalCsv / TestHarness"]
end
end
subgraph Gateway["可选独立交易网关进程 hft_trade_gateway"]
Runtime["Gateway Runtime / Adapter"]
end
subgraph IPC["跨进程 IPC"]
Cmd[("cmd_ring_gateway_id")]
Rtn[("rtn_ring_gateway_id")]
end
Recorder -->|写入| Mmap
Mmap -->|Replay 读取| Replay
Live -->|实盘接入 / 私有回报| Runtime
EngineBoot --> Bus
Replay -->|EVENT_MARKET_DATA / EVENT_KLINE| Bus
Bus --> Strategy
Bus --> Factor
Factor -->|EVENT_SIGNAL| Bus
Strategy -->|EVENT_SIGNAL / EVENT_ORDER_REQ| Bus
Bus --> Portfolio
Portfolio -->|EVENT_ORDER_REQ| Bus
Bus --> Risk
Risk -->|EVENT_ORDER_SEND| Bus
Bus --> Trade
Trade -->|EVENT_RTN_ORDER / EVENT_RTN_TRADE / EVENT_ACC_UPDATE| Bus
Bus --> Core
Bus --> Monitor
Core -->|共享状态 / 查询结果| Monitor
Trade -->|GatewayPoll 发命令| Cmd
Cmd --> Runtime
Runtime -->|OrderRtn / TradeRtn / Pos / Acc / Conn| Rtn
Rtn -->|GatewayPoll 轮询回灌| Trade
```
### 核心组件
- **HftEngine**: 负责配置加载、插件生命周期、定时器、信号退出与主循环。
- **EventBus**: 同步事件分发总线,事件类型定义见 `include/framework.h`。
- **Core State**: 订单、持仓、账户等共享状态服务,位于 `core/`。
- **MarketSnapshot**: 最新行情快照,支持 `local` 与 `shm` 两种后端。
- **Plugins (模块)**: 通过 YAML 配置动态加载 `.so`,按顺序组成研究、回测、仿真和交易链路。
读图建议:
- 左侧是数据进入系统的两条路:`hft_md` 写 mmap 供 `Replay` 回放,或外部柜台直接接入独立 `trade_gateway`。
- 中间是 `hft_engine` 主进程:行情经 `EventBus` 分发到策略/因子,再经过 `Portfolio`、`Risk`、`Trade` 形成完整执行链路。
- 右侧是可选的独立交易网关:只有使用 `GatewayPoll` 时才会经过共享内存 ring,与主进程形成进程隔离。
### 常见链路
1. Tick 回放 / 行情接入:`hft_md -> mmap -> Replay -> EventBus`
2. 信号生成:`StrategyTree / Factor DAG / PyStrategy -> EVENT_SIGNAL`
3. 下单链路:`Portfolio(可选) -> Risk -> Trade`
4. 状态与观测:`Trade 回报 -> Core State -> Monitor / SignalCsv`
## 目录结构
```
hft_eb/
├── bin/ # 编译产出 (hft_engine + 插件 .so)
├── build/ # 中间编译目录
├── conf/ # 配置文件 (.yaml)
├── core/ # 核心库 (IPC, Protocol, SHM)
├── data/ # 行情数据存储 (Mmap)
├── docs/ # 设计文档
├── hft_md/ # 行情录制器项目 (独立进程)
├── include/ # 引擎/插件接口
├── modules/ # 插件源码
├── py_tools/ # Python 工具
├── rust_tools/ # Rust 工具
├── src/ # 引擎源码
├── trade_gateway/ # 独立交易 gateway 进程子系统
├── tests/ # 测试与用例
├── third_party/ # 第三方依赖 (CTP)
└── build_release.sh # 构建脚本
```
## 构建与依赖
### 依赖项
- Linux
- C++17 编译器 (GCC/Clang)
- CMake >= 3.10
- Boost (system)
- OpenSSL
- RapidJSON (头文件)
- yaml-cpp, nlohmann_json
- ixwebsocket, libzmq
- pthread, dl, rt
- CTP API (已包含在 `third_party/ctp/` 中,实盘/行情接入需要)
### 可选依赖
- Apache Arrow + Parquet (用于 `libmod_kline_parquet_replay.so`)
- CCAPI (Binance USDT Futures Trade 插件通过 FetchContent 拉取)
### 编译
```bash
./build_release.sh
```
清理并重建:
```bash
./build_release.sh clean
```
编译完成后输出:
- `bin/hft_engine`
- `bin/hft_trade_gateway`
- `bin/lib*.so`
## 快速开始
### 1. 回放 + 策略 + 仿真成交 (示例)
```bash
cd bin
./hft_engine ../conf/config_sim_backtest.yaml
```
### 2. 因子 DAG 示例
```bash
./bin/hft_engine conf/config_factor_dag.yaml
```
### 3. Strategy Tree 并行示例
```bash
./bin/hft_engine conf/config_strategy_tree_parallel_perf_20260320.yaml
```
### 4. Parquet K 线回放 (可选依赖)
```bash
python3 py_tools/gen_symbols_from_parquet.py data/a_share_1d/daily_1d.pq -o conf/symbols_a_share.txt
cd bin
./hft_engine ../conf/config_test_kline_parquet_replay.yaml
```
### 5. 实盘/仿真实盘 (需配置 CTP 账号与库路径)
```bash
./run.sh
```
### 6. 独立交易 Gateway 骨架
```bash
./bin/hft_trade_gateway --config conf/trade_gateway_demo.yaml
```
注意事项:
- `run.sh` 会 `pkill hft_engine` 并使用 `conf/config_real_test.yaml`。
- 实盘相关配置包含账号与密码,请勿提交敏感信息。
- 需要确保 `LD_LIBRARY_PATH` 包含 `third_party/ctp/lib` 与 `bin`。
## 配置说明
引擎使用 YAML 配置文件(建议显式传入路径,默认 `config.json` 并不常用)。
顶层字段:
- `symbols_file`: 全局品种映射,默认 `conf/symbols.txt`。
- `snapshot`: 预风控快照配置。
- `trading_hours`: 运行时间窗。
- `plugins`: 插件数组,按顺序加载。
`snapshot` 结构:
- `type`: `local` 或 `shm`。
- `path`: 共享内存路径,默认 `/hft_snapshot`。
- `is_writer`: 是否写入方。
`plugins` 结构:
- `name`: 模块名称。
- `library`: `.so` 路径。
- `enabled`: 是否启用,默认 `true`。
- `config`: 模块配置。
- `library` 路径按当前运行目录解析,请与启动命令保持一致。
配置传入机制(来自 `src/engine.cpp`):
- `config` 中的 **标量字段** 会被扁平化为 `ConfigMap`。
- 同时注入 `_yaml` 字段,包含完整 YAML 字符串(适合复杂模块自行解析)。
配置示例:
```yaml
symbols_file: "../conf/symbols.txt"
snapshot:
type: "local"
plugins:
- name: Replay
library: "libmod_replay.so"
enabled: true
config:
data_file: "data/market_data_20260319_night"
- name: Risk
library: "libmod_risk.so"
enabled: true
config:
max_orders_per_second: 100
```
插件顺序建议:
- 典型顺序是 `Replay/行情 -> Strategy/Factor -> Portfolio(可选) -> Risk -> Trade -> Monitor`。
- `Portfolio` 只在“信号先聚合再下单”的场景启用;若策略直接发 `EVENT_ORDER_REQ`,可跳过它。
- `GatewayPoll` 适合与独立 `trade_gateway` 进程配对使用;纯回测通常使用 `SimTrade`。
## 插件清单 (编译产物)
行情与回放:
- `libmod_ctp.so`
- `libmod_replay.so`
- `libmod_kline.so`
- `libmod_kline_parquet_replay.so` (可选)
交易与执行:
- `libmod_trade.so`
- `libmod_sim_trade.so`
- `libmod_gateway_poll.so`
- `libmod_ccapi_binance_usds_trade.so`
- `libmod_sweep_trader.so`
风控与管理:
- `libmod_risk.so`
监控与测试:
- `libmod_monitor.so`
- `libmod_signal_csv.so`
- `libmod_test_harness.so`
- `libmod_event_sampler.so`
策略与策略树:
- `libmod_strategy.so`
- `libmod_t0_rb_strategy.so`
- `libmod_py_strategy.so`
- `libmod_strategy_tree.so`
- `libmod_strategy_tree_parallel.so`
- `libstrat_grid.so`
- `libstrat_cs_combiner.so`
- `libstrat_price_jump.so`
- `libstrat_stat_arb.so`
- `libstrat_sma.so`
- `libstrat_imbalance.so`
因子 DAG:
- `libmod_factor_dag.so`
- `libfactor_last_price.so`
- `libfactor_sma.so`
- `libfactor_spread.so`
- `libfactor_imbalance.so`
- `libfactor_volatility.so`
- `libfactor_combiner.so`
- `libfactor_mid_return_500ms.so`
- `libfactor_weighted_mid_return_500ms.so`
- `libfactor_quote_intensity_500ms.so`
- `libfactor_trade_pressure_500ms.so`
组合与执行桥接:
- `libmod_portfolio.so`
- `libmod_gateway_poll.so`
核心库:
- `libhft_core.so`
## 开发新插件
插件需实现 `IModule` 接口并导出工厂函数:
```cpp
#include "framework.h"
class MyCustomPlugin : public IModule {
public:
void init(EventBus* bus, const ConfigMap& config, ITimerService* timer_svc) override {
bus_ = bus;
if (config.find("my_param") != config.end()) {
my_param_ = config.at("my_param");
}
bus_->subscribe(EVENT_MARKET_DATA,
StaticDelegate::bind(this));
}
void onTick(void* data) {
auto* tick = static_cast(data);
(void)tick;
// ... your logic ...
}
private:
EventBus* bus_ = nullptr;
std::string my_param_;
};
EXPORT_MODULE(MyCustomPlugin)
```
如果是策略树叶子节点,实现 `IStrategyNode` 并导出:
```cpp
EXPORT_STRATEGY(MyStrategyNode)
```
在 `CMakeLists.txt` 中添加新模块目标,并将输出目录设为 `bin/`。
## 行情录制器 (hft_md)
`hft_md` 是独立行情录制进程,连接 CTP 行情接口并将 Tick 写入 Mmap 文件,供 `Replay` 插件回放。
编译:
```bash
cd hft_md
./build.sh
```
运行:
```bash
cd hft_md
./run.sh 20260325
```
说明:
- `run.sh` 默认使用当天日期并写入 `hft_md/conf/config.yaml`。
- 输出目录由 `hft_md/conf/config.yaml` 的 `output_path` 决定,默认 `../data/`。
- 如需共享快照,配置 `shm` 字段(如 `/hft_md_snapshot`)。
## 高级特性
### 策略树 (Strategy Tree)
`StrategyTreeModule` 支持将复杂交易逻辑拆解为多节点流水线,并通过 YAML 动态组合与并行分片。
### 极速行情流 (High-Speed Data Stream)
基于 Mmap 的 `.dat` + `.meta` 结构,支持历史回溯与实时转发。
### 安全监控 (Secure Monitor)
`monitor` 插件提供 WebSocket + ZMQ 控制与鉴权机制。