返回列表 发布新帖

QMT策略工厂

19 0
发表于 昨天 22:40 | 显示全部楼层 阅读模式
# QMT策略工厂

基于多种数据源获取股票日线数据,使用遗传编程自动生成QMT能直接运行的交易策略。如果有测试的需求,请联系:Bogutongjin20230618

## 功能特性

- ✅ 支持**选股策略**:从股票池中选择股票进行买入/卖出
- ✅ 支持**择时策略**:对单只股票进行买入/卖出时机判断
- ✅ 支持**多种数据源**:AKShare、Baostock、Tushare、TDX(通达信)
- ✅ 支持**因子类型选择**:技术因子和财务因子
- ✅ 使用遗传编程自动生成交易因子
- ✅ 生成符合QMT API规范的策略代码
- ✅ 支持策略回测评估
- ✅ 提供**GUI图形界面**和命令行两种使用方式
- ✅ 支持打包成独立可执行文件(.exe)

## 项目结构

QMT_factory/ ├── docs/ # QMT API文档 ├── data/ # 数据获取模块 │ ├── init.py │ ├── ak_data_loader.py # AKShare数据加载器 │ ├── baostock_data_loader.py # Baostock数据加载器 │ ├── tushare_data_loader.py # Tushare数据加载器 │ └── tdx_data_loader.py # TDX(通达信)数据加载器 ├── core/ # 核心算法模块 │ ├── init.py │ ├── gp_engine_stock.py # 股票遗传编程引擎 │ ├── factor_evaluator_stock.py # 股票因子评估器 │ ├── factor_functions.py # 因子函数库 │ ├── strategy_generator_qmt.py # QMT策略代码生成器 │ └── license_manager.py # 授权管理模块 ├── gui/ # GUI界面模块 │ ├── init.py │ ├── main_window.py # 主窗口 │ ├── timing_strategy_tab.py # 择时策略标签页 │ ├── selection_strategy_tab.py # 选股策略标签页 │ ├── strategy_worker.py # 策略生成工作线程 │ ├── payment_dialog.py # 支付对话框 │ └── font_config.py # 字体配置 ├── tools/ # 工具脚本 │ ├── generate_license.py # 授权生成工具 │ └── README.md ├── generated/ # 生成的策略文件 │ └── strategies/ ├── pytdx2-main/ # TDX数据源依赖库 ├── main.py # 主程序入口(命令行) ├── gui_main.py # GUI主程序入口 ├── setup.py # 打包配置 ├── requirements.txt # 依赖包列表 └── README.md # 本文档


## 安装依赖

```bash
pip install -r requirements.txt

主要依赖:

  • akshare: 股票数据获取(主要数据源,推荐)
  • baostock: 股票数据获取(可选,独立数据源)
  • tushare: 股票数据获取(可选,需要token)
  • gplearn: 遗传编程算法库
  • pandas, numpy: 数据处理
  • scikit-learn: 机器学习工具
  • PyQt5: GUI界面框架
  • matplotlib: 数据可视化
  • joblib: 并行计算
  • 其他依赖见 requirements.txt

注意

  • QMT的Python接口(xtquant)需要从QMT客户端安装,不在pip仓库中
  • baostock、tushare和TDX是可选的数据源,如果不需要可以不安装
  • TDX数据源使用项目内置的pytdx2库,无需额外安装

使用方法

方法1: GUI界面运行(推荐)

Windows系统

# 方式1:直接运行Python脚本
python gui_main.py

# 方式2:使用批处理文件(如果已打包)
run_gui.bat

功能说明

  • 图形化界面,操作简单直观
  • 支持选择数据源(AKShare、Baostock、Tushare)
  • 支持选择因子类型(技术因子、财务因子)
  • 实时显示策略生成进度
  • 自动保存生成的策略文件

方法2: 命令行交互式运行

Windows系统

# 方式1:直接运行Python脚本
python main.py

# 方式2:使用批处理文件
run_cli.bat

然后按照提示选择策略类型(选股或择时),输入相关参数。

方法3: 编程调用

生成择时策略

from main import generate_timing_strategy

# 生成择时策略
strategy_info = generate_timing_strategy(
    stock_code='000001',  # 股票代码
    start_date='2022-01-01',  # 开始日期
    end_date='2024-01-01',  # 结束日期
    population_size=100,  # 种群大小
    generations=50,  # 进化代数
    max_iterations=10  # 最大迭代次数
)

if strategy_info and strategy_info.get('success'):
    # 保存策略文件
    with open(f"generated/strategies/{strategy_info['filename']}", 'w', encoding='utf-8') as f:
        f.write(strategy_info['code'])
    print(f"策略文件已保存: {strategy_info['filename']}")

生成选股策略

from main import generate_selection_strategy

# 生成选股策略
strategy_info = generate_selection_strategy(
    stock_pool=['000001', '000002', '600000'],  # 股票池
    start_date='2022-01-01',
    end_date='2024-01-01',
    hold_count=10,  # 持仓数量
    rebalance_period=5,  # 调仓周期(天)
    population_size=100,
    generations=50,
    max_iterations=10
)

if strategy_info and strategy_info.get('success'):
    # 保存策略文件
    with open(f"generated/strategies/{strategy_info['filename']}", 'w', encoding='utf-8') as f:
        f.write(strategy_info['code'])
    print(f"策略文件已保存: {strategy_info['filename']}")

策略类型说明

择时策略

  • 功能:对单只股票进行买入/卖出时机判断
  • 输入:股票代码、历史数据日期范围、数据源、因子类型
  • 输出:QMT策略代码文件
  • 逻辑
    • 使用遗传编程生成因子表达式(技术因子或财务因子)
    • 计算因子值,与阈值比较生成买卖信号
    • 因子值 > 买入阈值 → 买入
    • 因子值 < 卖出阈值 → 卖出
  • 适用场景:单只股票的交易时机判断

选股策略

  • 功能:从股票池中选择股票进行买入/卖出
  • 输入:股票池列表、持仓数量、调仓周期、数据源、因子类型
  • 输出:QMT策略代码文件
  • 逻辑
    • 使用遗传编程生成选股因子表达式(技术因子或财务因子)
    • 对每只股票计算因子值
    • 按因子值排序,选择前N只股票
    • 等权重买入,定期调仓
  • 适用场景:从股票池中选择优质股票构建投资组合

因子类型

  • 技术因子:基于价格、成交量等技术指标生成的因子

    • 使用MA、EMA、RSI、MACD等技术指标
    • 适合短期交易和择时策略
  • 财务因子:基于财务数据生成的因子

    • 使用财务指标如ROE、ROA、PE、PB等
    • 适合中长期投资和选股策略

生成的策略代码

生成的策略代码符合QMT API规范,包含:

  • initialize(): 策略初始化
  • handle_data(): 主处理函数
  • 技术指标计算函数(MA、EMA、RSI、MACD等)
  • 因子计算逻辑(由遗传编程生成)

生成的策略文件保存在 QMT_factory/generated/strategies/ 目录下。

使用生成的策略

  1. 将生成的策略文件复制到QMT策略目录
  2. 在QMT中创建新策略,选择该文件
  3. 根据QMT的实际API调整策略代码中的接口调用(如数据获取、交易下单等)
  4. 运行策略进行回测或实盘交易

注意:生成的策略代码中的QMT API调用可能需要根据实际QMT版本和API文档进行调整。代码中已标注需要调整的部分。

参数说明

遗传编程参数

  • population_size: 种群大小,默认100,越大搜索空间越大但计算时间越长
  • generations: 进化代数,默认50,越多可能找到更好的因子但计算时间越长
  • max_iterations: 最大迭代次数,默认10,用于多次尝试找到更好的因子

选股策略参数

  • hold_count: 持仓数量,默认10只
  • rebalance_period: 调仓周期,默认5天

数据源说明

项目支持多种数据源,可在GUI界面中选择:

  1. AKShare(推荐)

    • 免费、数据全面
    • 支持A股、指数、期货等
    • 数据更新及时
    • 需要网络连接
  2. Baostock

    • 免费、稳定
    • 可作为独立数据源使用
    • 数据质量较高
    • 需要网络连接
  3. Tushare

    • 需要注册获取token
    • 数据质量高、专业
    • 部分数据需要积分
    • 需要网络连接
  4. TDX(通达信)

    • 使用通达信服务器
    • 数据实时性好
    • 无需注册
    • 需要网络连接

数据源切换

  • 在GUI界面中可以选择使用哪个数据源
  • 如果某个数据源获取失败,程序会自动尝试其他已安装的数据源
  • 建议优先使用AKShare,作为备用可使用Baostock或TDX

打包和安装

打包成可执行文件

项目支持使用PyInstaller打包成独立的Windows可执行文件:

# 使用批处理文件打包(推荐)
build_exe.bat          # 完整打包
build_exe_simple.bat   # 简化打包
build_exe_debug.bat    # 调试模式打包

# 或使用PyInstaller直接打包
pyinstaller qmt_factory.spec

打包后的可执行文件位于 dist/ 目录下,可以直接运行,无需安装Python环境。

安装为Python包

# 安装到Python环境
pip install -e .

# 或使用setup.py
python setup.py install

注意事项

  1. 数据获取

    • 首次运行需要从数据源下载数据,可能需要一些时间
    • 建议在网络良好的环境下运行
    • 如果某个数据源失败,程序会自动尝试其他数据源
  2. 计算时间

    • 遗传编程需要较长时间,建议使用较小的参数进行测试
    • 种群大小和进化代数越大,计算时间越长
    • GUI界面会显示实时进度
  3. 策略验证

    • 生成的策略建议先在QMT中回测验证,再考虑实盘使用
    • 回测结果仅供参考,实盘表现可能不同
  4. 因子表达式

    • 生成的因子表达式可能较复杂,建议理解其逻辑后再使用
    • 可以手动调整阈值参数以优化策略表现
  5. QMT API

    • 生成的策略代码中的QMT API调用需要根据实际QMT版本进行调整
    • 代码中已标注需要调整的部分
    • 参考 docs/ 目录下的QMT API文档
  6. 数据源选择

    • 如果某个数据源不可用,可以在GUI中选择其他数据源
    • 建议安装多个数据源作为备用
  7. Python版本

    • 建议使用Python 3.7-3.11
    • Python 3.12及以上版本可能存在兼容性问题

技术细节

因子表达式

遗传编程生成的因子表达式使用以下特征:

技术因子特征

  • 价格数据:close, open, high, low, volume
  • 技术指标:MA(5,10,20,30), EMA(5,10,20), RSI(14), MACD, STD(10,20)
  • 差分和引用:diff(1,5), ref(1,5)
  • 其他技术指标:BOLL, KDJ, CCI等

财务因子特征

  • 财务指标:ROE, ROA, PE, PB, PS, 净利润增长率等
  • 需要确保数据源支持财务数据获取

适应度函数

使用收益/回撤比值作为主要适应度指标,同时考虑:

  • 总收益率
  • 夏普比率
  • 最大回撤
  • 胜率(择时策略)
  • 年化收益率

遗传编程参数

  • 种群大小(population_size):控制搜索空间,默认100
  • 进化代数(generations):控制进化深度,默认50
  • 最大迭代次数(max_iterations):多次尝试找到更好的因子,默认10
  • 交叉率、变异率:控制进化过程,使用gplearn默认值

示例

示例1: 生成平安银行择时策略

from main import generate_timing_strategy

strategy_info = generate_timing_strategy(
    stock_code='000001',
    start_date='2022-01-01',
    end_date='2024-01-01'
)

示例2: 生成沪深300成分股选股策略

from main import generate_selection_strategy

# 沪深300部分成分股
stock_pool = [
    '000001', '000002', '000858', '000876',
    '600000', '600036', '600519', '600887'
]

strategy_info = generate_selection_strategy(
    stock_pool=stock_pool,
    start_date='2022-01-01',
    end_date='2024-01-01',
    hold_count=5,
    rebalance_period=10
)

常见问题

Q: 数据获取失败怎么办? A: 检查网络连接,AKshare可能需要访问特定网站。可以尝试多次运行。

Q: 生成的策略表现不好? A: 可以尝试:

  • 增加进化代数或迭代次数
  • 调整股票池或数据日期范围
  • 手动优化阈值参数

Q: 如何理解生成的因子表达式? A: 因子表达式使用gplearn格式,可以查看生成的策略代码中的注释。

Q: 生成的策略代码在QMT中无法运行? A: 请根据QMT的实际API文档调整策略代码中的接口调用。代码中已标注需要调整的部分。

快速开始

  1. 克隆或下载项目

    git clone <repository-url>
    cd QMT_factory
  2. 安装依赖

    pip install -r requirements.txt
  3. 运行GUI界面

    python gui_main.py
  4. 选择策略类型和数据源

    • 在GUI中选择"择时策略"或"选股策略"
    • 选择数据源(推荐AKShare)
    • 输入相关参数
  5. 生成策略

    • 点击"生成策略"按钮
    • 等待策略生成完成
    • 查看生成的策略文件
  6. 在QMT中使用

    • 将生成的策略文件复制到QMT策略目录
    • 在QMT中创建新策略并选择该文件
    • 根据实际QMT API调整代码
    • 进行回测或实盘交易

参考文档

开发说明

项目结构说明

  • data/: 数据获取模块,支持多种数据源
  • core/: 核心算法模块,包含遗传编程引擎和策略生成器
  • gui/: GUI界面模块,使用PyQt5开发
  • tools/: 工具脚本,包含授权管理等工具
  • docs/: QMT API相关文档

贡献指南

欢迎提交Issue和Pull Request来改进项目。

许可证

本项目基于主项目的许可证。

回复

您需要登录后才可以回帖 登录 | 立即注册

客服专线

400-080-8112

用思考的速度交易,用真诚的态度合作,我们是认真的!
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2025 迅投QMT社区 版权所有 All Rights Reserved. 京ICP备2025122616号-3
关灯 快速发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表