期货交易工具逻辑文档
1. 交易训练工具 (trading_training_tool.py)
功能概述
交易训练工具是一个用于训练交易决策能力的交互式工具。它从交易记录中随机选择一笔开仓交易,只显示历史K线数据和当天的部分信息(当天收盘价被替换为实际成交价),让用户判断是否开仓,然后显示包含未来20天数据的完整K线图,并记录用户的决策结果。
核心逻辑流程
1.1 数据准备阶段
读取交易数据
- 从CSV文件读取所有交易记录
- 支持多种编码格式(utf-8, gbk, gb2312等)
- 自动识别文件编码
加载历史处理记录
- 读取已存在的训练结果文件(training_results.csv)
- 提取已处理的交易对ID列表,避免重复处理
提取开仓交易
- 遍历所有交易记录,筛选出开仓交易(交易类型以"开"开头)
- 提取合约代码、交易日期、成交价、方向等关键信息
- 跳过已处理的交易对
- 计算对应的平仓盈亏(考虑连续交易对ID的情况)
1.2 随机选择机制
- 完全随机选择:使用random.shuffle打乱交易列表,然后随机选择
- 避免重复:通过已处理的交易对ID列表确保不重复选择
- 显示统计:显示剩余未处理的交易数量
1.3 K线数据处理
获取完整数据
- 获取历史100天 + 未来20天的完整K线数据
- 包含开高低收价格和5/10/20/30日均线
部分K线图生成
- 截取历史数据+当天数据
- 将当天收盘价替换为实际成交价
- 生成只有历史信息的K线图
完整K线图生成
- 使用原始数据(不修改当天收盘价)
- 显示历史和未来20天的完整走势
- 用灰色背景标注未来数据区域
1.4 用户交互
显示交易信息
- 合约代码
- 交易日期
- 交易方向(多头/空头)
- 成交价
获取用户决策
- 提示用户输入'y'(开仓)或'n'(不开仓)
- 循环验证输入直到获得有效决策
1.5 结果记录
计算判定收益
- 用户判定开仓:判定收益 = 实际平仓盈亏
- 用户判定不开仓:判定收益 = -实际平仓盈亏
记录格式
- 包含原始交易信息(日期、时间、标的、类型、数量、价格)
- 平仓盈亏(可能合并连续交易对)
- 用户判定(开仓/不开仓)
- 判定收益
- 交易对ID和连续交易对ID
特殊处理逻辑
连续交易对ID处理
- 如果记录包含有效的连续交易对ID(非'N/A'),则合并所有同一连续交易对ID的平仓盈亏
- 这允许处理跨期换月等连续持仓的情况
日期和时间处理
- 支持多种日期格式(YYYY-MM-DD, DD/MM/YYYY等)
- 夜盘交易处理:委托时间>=21:00的交易,实际交易日为下一个交易日
- 使用JoinQuant的get_trade_days获取准确的交易日历
合约代码提取
- 从"标的"列的括号中提取标准合约代码(如:"豆粕2501(DM2501)" -> "DM2501")
- 自动添加交易所后缀(如.XDCE)
配置参数
所有参数集中在CONFIG字典中:
csv_filename: 输入交易记录文件名
result_filename: 输出结果文件名
history_days: 历史数据天数(默认100)
future_days: 未来数据天数(默认20)
output_dir: 图片输出目录
show_plots: 是否显示图片
plot_dpi: 图片分辨率
random_seed: 随机数种子(确保可重复性)
输出文件
训练结果CSV(training_results.csv)
- 追加模式写入,保留所有历史记录
- UTF-8编码,支持中文
K线图片(training_images/目录)
- partial_*.png: 部分K线图
- full_*.png: 完整K线图
使用场景
- 交易决策训练:通过历史数据练习判断开仓时机
- 策略验证:验证人工判断与策略信号的一致性
- 交易复盘:分析决策质量,改进交易技能
2. K线复原工具 (kline_reconstruction.py)
功能概述
(待补充详细逻辑说明)
核心功能
- 从交易记录中提取所有开仓交易
- 为每个开仓交易生成对应的K线图
- 包含均线和技术指标
- 批量生成并打包成ZIP文件
注:本文档主要介绍交易训练工具的详细逻辑,其他工具的逻辑说明将逐步补充。