Repository files navigation
miniQMT 是一个专为A股市场设计的无人值守量化交易系统 ,集成了自动化交易策略执行、智能持仓管理、动态止盈止损等功能。系统采用双层存储架构和线程自愈机制,可7x24小时稳定运行。
🛡️ 无人值守 : 线程健康监控与自动重启,系统崩溃自动恢复
🔄 双层存储 : 内存数据库 + SQLite持久化,高性能与数据安全兼顾
🎯 信号分离 : 信号检测与执行分离,策略逻辑清晰可控
📈 智能止盈止损 : 动态止盈策略,最大化收益同时控制风险
🌐 网格交易 : 智能网格策略,自动低吸高抛
⚙️ 配置管理 : Web界面动态配置,无需重启系统
🔍 卖出监控 : 委托单超时监控与自动撤单
🧪 模拟交易 : 完整的模拟交易功能,策略验证零风险
🔗 XtQuantManager : 可选HTTP网关,支持多账户统一管理
✅ 自动交易执行 : 支持模拟交易和实盘交易
✅ 动态止盈止损 : 首次止盈 + 动态止盈双重保护
✅ 网格交易 : 智能网格会话管理,自动低吸高抛
✅ 信号验证机制 : 防止重复执行,确保交易安全
✅ 委托单管理 : 卖出委托单超时监控与自动撤单
✅ 线程健康监控 : 自动检测线程崩溃并重启
✅ 优雅关闭 : 有序关闭各模块,避免数据丢失
✅ 超时保护 : API调用超时保护,防止线程阻塞
✅ 非交易时段优化 : 自动降低CPU占用(30% → <2%)
✅ 内存数据库并发优化 : 16处加锁保护,确保线程安全
✅ 配置动态更新 : Web界面修改配置,无需重启系统
✅ 盘前自动同步 : 每日9:25自动重新初始化xtquant连接
✅ 心跳日志 : 每30分钟输出系统健康状态摘要
✅ XtQuantManager : 可选HTTP网关,支持多账户管理与可观测指标
✅ Web实时监控 : 账户信息、持仓列表、网格会话实时更新
✅ SSE推送 : Server-Sent Events实时数据推送
✅ 配置管理 : Web界面动态修改系统配置
✅ 系统诊断 : 内置多个诊断工具,快速定位问题
Python : 3.8+ (推荐 3.9)
操作系统 : Windows (QMT仅支持Windows)
QMT客户端 : 实盘交易需要安装并登录QMT
克隆项目
git clone https://github.com/your-repo/miniQMT.git
cd miniQMT
安装依赖
pip install pandas numpy flask flask-cors xtquant mootdx
配置账户 (创建 account_config.json)
{
"account_id" : " 您的交易账号" ,
"account_type" : " STOCK" ,
"qmt_path" : " C:/光大证券金阳光QMT实盘/userdata_mini"
}
配置股票池 (可选,创建 stock_pool.json)
[
" 000001.SZ" ,
" 600036.SH" ,
" 000333.SZ"
]
启动系统
访问Web界面
项目提供 launcher.bat 脚本支持一键启动,环境配置在 launcher.ini 中:
[Environment]
ENV_TYPE =conda # conda 或 uv
CONDA_ENV =python39 # conda环境名
WORK_DIR =c:\github-repo\miniQMT
PYTHON_SCRIPT =main.py
双击 launcher.bat 即可自动激活环境并启动系统。
强烈建议先使用模拟模式测试 :
确认 config.py 中 ENABLE_SIMULATION_MODE = True
运行无人值守功能测试: python test/test_unattended_operation.py
观察系统运行稳定后,再切换到实盘模式
┌─────────────────────────────────────────────────────────┐
│ 线程监控器 (60秒) │
│ 检测线程崩溃 → 自动重启 │
└─────────────────────────────────────────────────────────┘
↓
┌──────────┬──────────┬──────────┬──────────┬──────────┬────────┐
│数据更新 │持仓监控 │策略执行 │网格交易 │卖出监控 │Web服务 │
│ (60秒) │ (3秒) │ (5秒) │ (5秒) │ (2秒) │(持续) │
└──────────┴──────────┴──────────┴──────────┴──────────┴────────┘
↓ ↓ ↓ ↓ ↓ ↓
┌─────────────────────────────────────────────────────────┐
│ 核心架构 │
├─────────────────────────────────────────────────────────┤
│ 配置管理 (config_manager) → 配置持久化数据库 │
│ 双层存储 (position_manager) → 内存DB + SQLite │
│ 网格交易 (grid_trading_manager) → 网格会话管理 │
│ 卖出监控 (sell_monitor) → 委托单超时撤单 │
└─────────────────────────────────────────────────────────┘
实盘模式 :
QMT实盘账户 → 持仓同步(10秒) → 内存数据库 → 定时同步(15秒) → SQLite
模拟模式 :
Web界面 → 交易执行器 → 内存数据库 (跳过QMT接口)
详细架构说明请查看 ARCHITECTURE.md
# 交易模式
ENABLE_SIMULATION_MODE = True # True=模拟, False=实盘 ⚠️
ENABLE_AUTO_TRADING = False # 自动交易执行开关 ⚠️
# 策略功能
ENABLE_DYNAMIC_STOP_PROFIT = True # 止盈止损功能
ENABLE_GRID_TRADING = True # 网格交易功能
# 系统功能
ENABLE_THREAD_MONITOR = True # 线程健康监控(无人值守必需)⭐
ENABLE_SELL_MONITOR = True # 卖出监控开关
ENABLE_XTQUANT_MANAGER = False # XtQuantManager HTTP网关(多账户时开启)
DEBUG = False # 调试模式
# 止损
STOP_LOSS_RATIO = - 0.075 # 成本价下跌7.5%触发止损
# 首次止盈
INITIAL_TAKE_PROFIT_RATIO = 0.06 # 盈利6%触发
INITIAL_TAKE_PROFIT_RATIO_PERCENTAGE = 0.6 # 卖出60%
# 动态止盈
DYNAMIC_TAKE_PROFIT = [
(0.05 , 0.96 ), # 最高浮盈5%时,止盈位=最高价*96%
(0.10 , 0.93 ), # 最高浮盈10%时,止盈位=最高价*93%
(0.15 , 0.90 ),
(0.20 , 0.87 ),
(0.30 , 0.85 ),
]
ENABLE_GRID_TRADING = True # 网格交易功能开关(默认已启用)
GRID_DEFAULT_PRICE_INTERVAL = 0.05 # 价格间隔5%(下跌触发买入/上涨触发卖出)
GRID_DEFAULT_POSITION_RATIO = 0.25 # 每档交易持仓比例25%
GRID_CALLBACK_RATIO = 0.005 # 回调触发比例0.5%
GRID_BUY_COOLDOWN = 300 # 买入冷却时间(秒)
GRID_SELL_COOLDOWN = 300 # 卖出冷却时间(秒)
GRID_MAX_DEVIATION_RATIO = 0.15 # 最大偏离度15%(触发退出)
GRID_TARGET_PROFIT_RATIO = 0.10 # 目标盈利10%(需买卖配对后触发)
GRID_STOP_LOSS_RATIO = - 0.10 # 止损-10%
GRID_DEFAULT_DURATION_DAYS = 7 # 默认运行7天
网格盈亏口径说明(退出条件使用)
True P&L = (total_sell_amount - total_buy_amount) + open_grid_volume * current_price
open_grid_volume = total_buy_volume - total_sell_volume
profit_ratio = True P&L / max_investment
降级路径(旧会话无 volume 数据):
若有持仓快照: profit_ratio = (total_sell_amount - total_buy_amount) / (position_volume * current_price)
否则回退: profit_ratio = (total_sell_amount - total_buy_amount) / max_investment
ENABLE_SELL_MONITOR = True # 卖出监控开关(默认已启用)
项目集成了完整的回归测试框架,支持按模块运行、快速验证和失败重试。
# 快速验证(5分钟内完成,检查关键功能)
python test/run_integration_regression_tests.py --fast
# 运行所有回归测试
python test/run_integration_regression_tests.py --all
# 按组运行
python test/run_integration_regression_tests.py --group system_integration # 系统集成
python test/run_integration_regression_tests.py --group stop_profit # 止盈止损
python test/run_integration_regression_tests.py --group grid_comprehensive # 网格综合
python test/run_integration_regression_tests.py --group grid_full_range_coverage # 全区间覆盖(114用例)
# 其他选项
python test/run_integration_regression_tests.py --all --retry-failed # 失败重试
python test/run_integration_regression_tests.py --all --verbose # 详细输出
测试报告自动输出到 test/integration_test_report.json 和 test/integration_test_report.md。
# 1. 无人值守功能测试(验证线程自愈机制)
python test/test_unattended_operation.py
# 2. 系统综合测试
python test/comprehensive_test.py
# 3. 止盈止损测试
python test/test_stop_loss_buy_param.py
# 4. Web数据刷新测试
python test/test_web_data_refresh.py
# 检查依赖安装
python utils/check_dependencies.py
# 检查系统状态
python test/check_system_status.py
# 诊断QMT连接
python test/diagnose_qmt_connection.py
# 诊断系统问题
python test/diagnose_system_issues.py
A : 修改 config.py:
ENABLE_SIMULATION_MODE = False # 切换到实盘
ENABLE_AUTO_TRADING = True # 启用自动交易
⚠️ 注意 : 确保QMT客户端已启动并登录!
A : 会的! 系统内置线程健康监控,每60秒检查一次线程状态,检测到崩溃立即重启。详见 无人值守运行文档
A : 日志文件位于 logs/qmt_trading.log,可以使用:
# 实时查看日志
tail -f logs/qmt_trading.log
# 查看最近100行
tail -n 100 logs/qmt_trading.log
A :
模拟交易 : 不调用QMT API,使用虚拟资金,无交易时间限制
实盘交易 : 通过QMT API执行真实订单,使用实际账户资金
A : 编辑 stock_pool.json 文件,添加股票代码(格式: 股票代码.交易所):
[
" 000001.SZ" , // 深圳交易所
" 600036.SH" , // 上海交易所
" 新增股票.SZ"
]
A : 网格交易默认已启用(ENABLE_GRID_TRADING = True)。通过 Web 界面创建网格会话即可。网格会话支持自动止盈(需买卖配对)、止损和超时退出。如需禁用,修改 config.py:
ENABLE_GRID_TRADING = False
A : 访问 http://localhost:5000/config 页面,修改配置后点击保存。配置会立即生效,无需重启系统。支持的配置包括:
止盈止损比例
网格交易参数
自动交易开关
线程监控开关
所有配置变更会记录到 system_config 和 config_history 表中,支持审计和回滚。
更多问题请查看 CLAUDE.md - 常见问题
⚠️ 重要提醒 :
量化交易有风险,投资需谨慎
本系统仅供学习研究使用,不构成投资建议
实盘交易前请充分测试策略,确保理解系统运行逻辑
建议设置合理的止损比例,控制单日最大亏损
定期检查系统运行状态,关注异常日志
Business Source License 1.1 (BSL 1.1)
个人/非商业用途 :免费使用、修改、学习
商业用途 (含收费项目、商业产品集成):需获得作者授权
2030-04-13 后 :自动转为 MIT 开源协议
v1.x 及之前的版本仍以 MIT 协议发布,不受影响。详见 LICENSE 文件。
如需商业授权,请通过 GitHub Issue 联系。
欢迎提交 Issue 和 Pull Request!
如有问题或建议,请通过以下方式联系:
⭐ 如果这个项目对你有帮助,请给个Star支持一下! ⭐
I would be delighted if you could consider buying me a coffee ☕️ to support my work.
You can also support via WeChat or Alipay:
Made with ❤️ by miniQMT Team