# ctppython **Repository Path**: algoderiv/ctppython ## Basic Information - **Project Name**: ctppython - **Description**: ctp python code - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-04-30 - **Last Updated**: 2025-06-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CTP 期货交易框架 这是一个基于 Python 和上期技术综合交易平台 (CTP) API 的期货交易程序框架。它提供了连接 CTP 行情和交易服务器、处理行情数据、执行交易指令、管理订单和持仓、以及实现和运行自定义交易策略的基础功能。 ## 项目结构 ``` . │ function.py # 工具函数模块 │ Global_param.py # 全局参数和配置文件 │ main_class.py # 主程序类和 CTP 回调处理 │ README.md # 项目说明文件 │ tree.txt # 项目结构快照 │ UserStruct.py # 用户定义的数据结构(如订单、持仓信息) │ ├─con_file/ # 配置文件目录 │ ExchangeID.json # 合约与交易所对应关系 │ productInfo.ini # 合约乘数、手续费等信息 │ *.con # CTP 相关配置文件 (用途待补充) │ ├─CTP_API/ # CTP API 相关文件 │ │ *.py # CTP API Python 封装 │ │ *.dll # Windows CTP 动态链接库 │ │ *.h # CTP API 头文件 │ │ │ └─linux/ # Linux CTP 共享库 │ *.so │ ├─StrategyFolder/ # 交易策略目录 │ │ Strategy1.py # 策略实现示例 1 │ │ Strategy2.py # 策略实现示例 2 │ │ │ └─__pycache__/ # Python 缓存 │ ├─交易流水/ # 交易记录目录 (按策略和合约区分) │ strategy*_*.csv │ └─实时数据/ # 实时数据存储目录 (用途待确认,可能用于存储行情快照) *.csv ``` ## 主要文件说明 * `main_class.py`: 项目的核心,包含 `CtpW` 主类,负责初始化 CTP 连接、处理 CTP API 的回调函数(如登录、行情、报单、成交回报等)、查询账户信息(持仓、资金等)。 * `Global_param.py`: 定义全局变量,包括 CTP 账户信息(用户名、密码、服务器地址、AppID、AuthCode)、订阅列表、API 实例、数据队列、线程池以及用于存储订单、持仓等的全局字典。同时负责加载 `con_file` 目录下的配置。 * `function.py`: 包含项目所需的各种工具函数,例如: * 行情数据分发 (`get_data`, `distribute_data`, `save_data`) * 下单 (`insertOrder`) 和撤单 (`cancelOrder`) * 读写 CSV 文件 (`write_to_csv`, `create_tradeLogFile`, `writeToTradeLogFile`) * 辅助函数 (`judge_ret`, `get_OrderRef`, `calculate_Commissionrate` 等) * `UserStruct.py`: 定义了用于存储订单信息 (`orderInfo`)、持仓信息 (`positionInfo`)、持仓明细信息 (`positionDetailInfo`) 的自定义类。 * `StrategyFolder/`: 存放用户自定义的交易策略。每个策略文件通常包含一个策略类,定义其订阅的合约、以及处理行情 (`onQuote`)、处理成交回报等逻辑。 ## 配置 1. **账户信息**: 在 `Global_param.py` 文件中修改以下变量以配置你的 CTP 账户: * `investorID`: 交易账户 * `password`: 密码 * `broker_id`: 期货公司代码 * `market_server_front`: 行情前置地址 * `trade_server_front`: 交易前置地址 * `appID`: 应用ID (用于穿透式认证) * `authcode`: 认证码 (用于穿透式认证) * 可以选择 SimNow 模拟环境或实盘环境的配置。 2. **合约信息**: * `con_file/productInfo.ini`: 存储合约的乘数、最小变动价位等信息。程序在启动时会尝试查询并更新此文件。 * `con_file/ExchangeID.json`: 存储合约代码与其对应的交易所 ID。程序在启动时会尝试查询并更新此文件。 3. **策略配置**: * 在每个策略文件(如 `StrategyFolder/Strategy1.py`)的 `__init__` 方法中,设置 `self.subID` 列表,指定该策略需要订阅的合约代码。 ## 使用方法 1. **配置账户**: 根据 **配置** 部分说明,修改 `Global_param.py` 中的 CTP 账户信息。 2. **添加策略**: * 在 `StrategyFolder` 目录下创建新的 Python 文件(例如 `MyStrategy.py`)。 * 参照 `Strategy1.py` 的结构,创建策略类(例如 `class MyStrategy(object):`)。 * 在策略类的 `__init__` 方法中,定义 `self.subID`(需要订阅的合约列表)和 `self.strategyID`(策略编号)。 * 实现 `specific_strategy` 内部类,并在其中的 `onQuote` 方法中编写你的交易逻辑(分析行情、下单等)。可以使用 `function.py` 中提供的 `insertOrder` 和 `cancelOrder` 函数。 * 在 `main_class.py` 文件顶部,导入你的新策略类:`from StrategyFolder.MyStrategy import MyStrategy`。 * 在 `main_class.py` 的 `main` 函数中,实例化你的策略并将其添加到 `g.strategy_map` 字典中:`g.strategy_map[strategy.strategyID] = strategy`。 3. **运行**: 执行 `main_class.py` 文件启动程序: ```bash python main_class.py ``` 程序将自动连接 CTP 行情和交易服务器,登录账户,订阅策略所需的合约行情,并将行情数据推送给相应的策略进行处理。 4. **查看日志**: * 交易流水会记录在 `交易流水/` 目录下,按策略和合约分别保存为 CSV 文件。 * 程序运行时的输出信息会打印在控制台。 ## 依赖项 * Python 3.8 * CTP API (相关库文件已包含在 `CTP_API` 目录中) * `pandas` (用于 `Global_param.py`,可能需要安装: `pip install pandas`) **注意**: CTP API 的 Python 封装和库文件需要与你的操作系统和 Python 版本兼容。本项目提供的库文件可能需要根据实际环境调整。