# CTP_313 **Repository Path**: sea_trade/ctp-low-frequency-live-trading ## Basic Information - **Project Name**: CTP_313 - **Description**: 基于wondertrader框架精简的CTP量化交易框架,完全服务于实盘交易,适配6.7.11版CTP_api,删除股票、回测、高频等功能模块,仅仅保留期货、期权的实盘交易功能 - **Primary Language**: C++ - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 4 - **Created**: 2026-02-14 - **Last Updated**: 2026-04-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 基于 WonderTrader 精简优化的期货/期权实盘交易 CTA 框架,支持 Python 策略开发。 ## 项目概述 本项目是一个专注于期货和期权实盘交易的 CTA (Commodity Trading Advisor) 框架,基于 WonderTrader 精简优化,移除了股票相关功能、回测引擎、HFT高频引擎等不必要的组件,专注于中低频量化交易策略。 ## 系统架构 ### 整体架构图 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 应用层 (Application) │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │ │ │ Python策略 │ │ 配置管理 │ │ 日志监控 │ │ │ │ EMA双均线等 │ │ YAML/JSON │ │ spdlog │ │ │ └──────┬───────┘ └──────────────┘ └──────────────────────┘ │ └─────────┼───────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ 接口层 (Interface) │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ WtPorter (Python绑定) │ │ │ │ ExpCtaContext / ExpHftContext / ExpExecuter │ │ │ └──────────────────────────┬───────────────────────────────┘ │ └─────────────────────────────┼────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ 核心层 (Core) │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │ │ │ WtCtaEngine │ │ WtDtMgr │ │ WtExecMgr │ │ │ │ CTA策略引擎 │ │ 数据管理器 │ │ 执行管理器 │ │ │ └──────┬───────┘ └──────┬───────┘ └──────────┬───────────┘ │ │ │ │ │ │ │ ┌──────┴───────┐ ┌──────┴───────┐ ┌──────────┴───────────┐ │ │ │ CtaStrategyMgr│ │ K线合成器 │ │ WtLocalExecuter │ │ │ │ 策略管理器 │ │ 1m/5m/日线 │ │ 本地执行器 │ │ │ └──────────────┘ └──────────────┘ └──────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ 适配层 (Adapter) │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │ │ │ ParserCTP │ │ TraderCTP │ │ WTSTools/Utils │ │ │ │ 行情解析器 │ │ 交易通道 │ │ 工具类库 │ │ │ │ (SimNow) │ │ (SimNow) │ │ │ │ │ └──────┬───────┘ └──────┬───────┘ └──────────────────────┘ │ └─────────┼─────────────────┼──────────────────────────────────────┘ │ │ ▼ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ 外部接口 (External) │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ CTP 6.7.11 API │ │ │ │ ThostFtdcMdApi (行情) / ThostFtdcTraderApi (交易) │ │ │ │ SimNow 模拟环境 │ │ │ └──────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ ``` ### 模块依赖关系 ``` Python策略 │ ├───> WtPorter (ctypes绑定) │ │ │ ├───> WtCore (核心引擎) │ │ │ │ │ ├───> WtCtaEngine (CTA策略引擎) │ │ │ └───> CtaStrategyMgr (策略管理) │ │ │ │ │ ├───> WtDtMgr (数据管理) │ │ │ └───> K线合成器 (Tick -> 1m/5m) │ │ │ │ │ └───> WtExecMgr (执行管理) │ │ └───> WtLocalExecuter (本地执行) │ │ │ ├───> ParserCTP (行情适配器) │ │ └───> thostmduserapi_se.dll (CTP行情API) │ │ │ └───> TraderCTP (交易适配器) │ └───> thosttraderapi_se.dll (CTP交易API) │ └───> WTSTools (基础数据管理) ├───> WTSBaseDataMgr (合约/品种信息) ├───> WTSHotMgr (主力合约管理) └───> WTSLogger (日志系统) ``` ### 数据流向 ``` ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ SimNow行情 │────>│ ParserCTP │────>│ WtDtMgr │────>│ K线合成器 │ │ (Tick数据) │ │ (行情解析) │ │ (数据管理) │ │ (1m/5m/日线) │ └─────────────┘ └─────────────┘ └──────┬──────┘ └──────┬──────┘ │ │ │ ┌───────▼───────┐ │ │ Python策略 │ │ │ (EMA双均线等) │ │ └───────┬───────┘ │ │ │ ┌───────▼───────┐ │ │ 交易信号生成 │ │ │ (买/卖/持仓) │ │ └───────┬───────┘ │ │ ┌─────────────┐ ┌─────────────┐ ┌──────▼──────┐ ┌───────▼───────┐ │ SimNow交易 │<────│ TraderCTP │<────│ WtExecMgr │<────│ 订单执行 │ │ (订单/成交) │ │ (交易通道) │ │ (执行管理) │ │ (开仓/平仓) │ └─────────────┘ └─────────────┘ └─────────────┘ └───────────────┘ ``` ## 依赖关系 ### 编译依赖 | 依赖项 | 版本 | 用途 | 获取方式 | |--------|------|------|----------| | **Visual Studio** | 2022 | 编译器 | [官网下载](https://visualstudio.microsoft.com/) | | **CMake** | 3.16+ | 构建工具 | [官网下载](https://cmake.org/) | | **Boost** | 1.72 | C++库 | 已包含在 deps/ 目录 | | **spdlog** | 1.11 | 日志库 | 已包含在 WTSTools/ 中 | | **yaml-cpp** | 0.8 | YAML解析 | 已包含在 WTSUtils/ 中 | | **zstd** | 1.5 | 压缩库 | 已包含在 WTSUtils/ 中 | | **lmdb** | - | 内存数据库 | 已包含在 WTSUtils/ 中 | ### 运行时依赖 | 依赖项 | 版本 | 用途 | 说明 | |--------|------|------|------| | **CTP API** | 6.7.11 | 期货交易接口 | 已包含在 src/API/CTP6.7.11/ | | **Python** | 3.8+ | 策略开发 | 需单独安装 | | **SimNow账户** | - | 模拟交易 | 需注册 | ### 可选依赖 | 依赖项 | 用途 | 说明 | |--------|------|------| | **Git** | 版本控制 | 用于代码管理 | | **VS Code** | IDE | 推荐开发环境 | ## 快速开始 ### 环境准备 1. **安装 Visual Studio 2022** - 安装 "使用C++的桌面开发" 工作负载 - 确保安装 Windows SDK 2. **安装 CMake** ```bash # 下载并安装 CMake 3.16+ # https://cmake.org/download/ ``` 3. **安装 Python 3.8+** ```bash # 下载并安装 Python # https://www.python.org/downloads/ ``` 4. **注册 SimNow 账户** - 访问 http://www.simnow.com.cn/ - 注册模拟交易账户 - 获取 BrokerID (9999)、账户、密码 ### 编译项目 ```bash # 进入源码目录 cd new_cta_framework/src # 配置项目 (Release x64) cmake -B build -S . -G "Visual Studio 17 2022" -A x64 # 编译全部目标 cmake --build build --config Release # 或单独编译特定目标 cmake --build build --config Release --target TraderCTP cmake --build build --config Release --target ParserCTP cmake --build build --config Release --target WtCore ``` 编译输出位置:`src/build/Release/` ### 配置交易环境 1. **复制配置文件** ```bash cd new_cta_framework cp config/config.json.example config/config.json ``` 2. **编辑配置文件** ```json { "broker": "9999", "user": "your_simnow_userid", "pass": "your_simnow_password", "appid": "simnow_client_test", "authcode": "0000000000000000", "fronts": [ "tcp://182.254.243.31:40001" ] } ``` 3. **准备基础数据** - 确保 `config/` 目录包含: - `commodities.json` - 品种信息 - `contracts.json` - 合约信息 - `sessions.json` - 交易时段 - `hots.json` - 主力合约映射 ## 使用指南:多品种双均线策略 ### 策略原理 双均线策略是一种经典的技术分析策略: - **EMA5** (快线): 5周期指数移动平均线 - **EMA10** (慢线): 10周期指数移动平均线 **交易规则**: - 当 EMA5 **上穿** EMA10 时,产生 **买入信号** (开多/平空) - 当 EMA5 **下穿** EMA10 时,产生 **卖出信号** (开空/平多) ### 策略配置 编辑 `python/strategies/ema_cross_strategy.py`: ```python # 策略参数配置 STRATEGY_CONFIG = { "name": "EMA_Cross_Multi_Symbol", "fast_period": 5, # EMA快线周期 "slow_period": 10, # EMA慢线周期 "symbols": [ # 交易标的列表 "SHFE.ag2604", # 白银 "SHFE.rb2605" # 螺纹钢 ], "lot_size": 1, # 每手交易数量 "timeframe": "m1" # 1分钟K线 } ``` ### 运行策略 #### 方式1:使用 C++ 实时交易程序 ```bash # 进入测试程序目录 cd test_ema_live/build/Release # 创建 flow 目录 (用于CTP流文件) mkdir flow # 运行实时交易测试 ./ema_live_trading.exe ``` 程序将: 1. 连接 SimNow 行情前置 2. 订阅 ag2604 和 rb2605 的 Tick 数据 3. 合成 1 分钟 K 线 4. 计算 EMA5 和 EMA10 5. 产生交易信号并记录到 `trade_signals.csv` #### 方式2:使用 Python 模拟测试 ```bash # 进入策略目录 cd python/strategies # 运行模拟测试 python ema_trading_test.py # 选择测试时长: # 1. 运行30分钟完整测试 # 2. 运行5分钟快速测试 ``` ### 查看交易结果 #### 日志文件 ```bash # 查看实时交易日志 tail -f ema_live_trading.log ``` 日志输出示例: ``` [2026-02-14 20:06:09] EMA Cross Strategy - Live Trading Test [2026-02-14 20:07:11] [KLINE] ag2604 201400 O:19460 H:19470 L:19449 C:19470 [2026-02-14 20:08:11] [KLINE] rb2605 201500 O:3054 H:3056 L:3054 C:3056 [2026-02-14 20:09:15] [SIGNAL] ag2604 BUY EMA5:19482.5 EMA10:19475.3 Price:19485 ``` #### 交易信号文件 ```bash # 查看交易信号 (CSV格式) cat trade_signals.csv ``` CSV格式: ```csv Time,Symbol,Signal,Price,EMA5,EMA10 2026-02-14 20:09:15,ag2604,BUY,19485,19482.5,19475.3 2026-02-14 20:15:22,rb2605,SELL,3052,3053.2,3054.1 ``` ### 策略优化建议 1. **参数优化** ```python # 尝试不同的EMA周期组合 "fast_period": 3, # 更敏感的短线 "slow_period": 8, # 更平滑的长线 ``` 2. **增加过滤条件** ```python # 只在特定时段交易 if 9 <= current_hour <= 11 or 13 <= current_hour <= 15: execute_signal(signal) ``` 3. **添加止损止盈** ```python # 固定止损 stop_loss = entry_price * 0.98 # 2%止损 take_profit = entry_price * 1.05 # 5%止盈 ``` 4. **多品种资金管理** ```python # 每个品种分配固定资金 capital_per_symbol = total_capital / len(symbols) lot_size = int(capital_per_symbol / margin_per_lot) ``` ## 许可证 本项目基于 WonderTrader 修改,遵循原项目许可证。 ## 致谢 - [WonderTrader](https://github.com/wondertrader/wondertrader) - 底层框架 ## 联系方式 微信公众号:行情照我心