# MarketEngine **Repository Path**: youml/market-engine ## Basic Information - **Project Name**: MarketEngine - **Description**: CTP的行情API封装 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-02-08 - **Last Updated**: 2025-02-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Market Engine 基于 CTP 的行情引擎,提供简单的行情订阅和数据获取功能。 ## 功能特点 - 支持多平台(Windows/Linux) - 基于 Qt 框架开发 - 支持动态加载 CTP 库 - 提供简洁的 API 接口 - 支持自动重连 - 集成 spdlog 日志系统 ## 依赖项 - CMake 3.14+ - Qt 5.x (Core, Test) - CTP API 库 ## 目录结构 ``` MarketEngine/ ├── include/ │ ├── CTP/ # CTP API 头文件 │ └── MarketEngine.h # 行情引擎头文件 ├── src/ │ └── MarketEngine.cpp # 行情引擎实现 ├── tests/ │ └── TestMarketEngine.cpp # 单元测试 └── CMakeLists.txt # CMake 构建文件 ``` ## 构建和测试 ### Linux ```bash # 构建和运行测试 ./scripts/build.sh # 仅运行测试 ./scripts/run_test.sh ``` ### Windows ```bash # 构建和运行测试 scripts\build.bat # 仅运行测试 scripts\run_test.bat ``` ## 使用示例 ```cpp #include "MarketEngine.h" // 创建实例 MarketEngine::Engine engine; // 配置 MarketConfig config; config.brokerID = "9999"; config.userID = "test"; config.password = "test"; config.frontAddress = "tcp://180.168.146.187:10010"; config.mdDllPath = "/path/to/thostmduserapi_se.so"; config.flowPath = "/path/to/flow/"; // 初始化并连接 engine.init(config); engine.start(); // 订阅合约 std::vector symbols = {"SA505", "ni2505"}; engine.subscribe(symbols); // 处理行情数据 QObject::connect(&engine, &Engine::onTick, [](const CThostFtdcDepthMarketDataField& data) { // 处理行情数据 }); ``` ## 配置说明 ### MarketConfig | 参数 | 说明 | 默认值 | |------|------|--------| | brokerID | 经纪商ID | - | | userID | 用户ID | - | | password | 密码 | - | | frontAddress | 前置机地址 | - | | mdDllPath | CTP库路径 | - | | flowPath | 流文件路径 | - | | connection.enableUdp | 是否启用UDP | false | | connection.heartbeatTimeout | 心跳超时(秒) | 15 | ## API 说明 ### MarketEngine::Engine 主要接口: ```cpp bool init(const MarketConfig& config); // 初始化 void start(); // 启动 void stop(); // 停止 bool subscribe(const std::vector& symbols); // 订阅合约 bool unsubscribe(const std::vector& symbols); // 取消订阅 ``` ### 信号 ```cpp void onTick(const CThostFtdcDepthMarketDataField& tick); // 行情数据 void onStatusChanged(ConnectionStatus status); // 连接状态变化 void onError(int errorID, const QString& errorMsg); // 错误信息 ``` ## 注意事项 1. CTP 动态库加载 - 需要正确设置 mdDllPath 指向 CTP API 动态库 - 支持 Linux (.so) 和 Windows (.dll) 2. 多实例支持 - 支持创建多个实例连接不同行情服务器 - 每个实例需要独立的流文件目录 3. 错误处理 - 提供错误回调机制 - 支持连接超时检测 - 自动重连机制 ## 许可证 MIT License ```