找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 股票 资源 源码
查看: 78|回复: 0

量化交易小工具:QMT持仓导入通达信板块的Python实现,含源码及执行文件

[复制链接]

1453

主题

96

回帖

4万

积分

管理员

积分
48727
发表于 3 天前 | 显示全部楼层 |阅读模式
1ebc9427d1ac3d8ebc2d828d6e84c7a4.png
bb9aaacb422c319d66e26e51e44d63b0.gif
点击关注↓↓↓置顶+星标每天订阅,学习更多指标内容☼↓↓↓




今天仓鼠哥将详细解析一个实用的量化交易工具——将QMT持仓数据导入通达信自定义板块的Python程序。该工具能够自动获取QMT交易系统中的持仓股票,并将其转换为通达信软件可识别的板块文件格式。
界面如下:
8ce975f0e493b62436b583531716f8d0.png
这个Python脚本主要实现以下功能:
  • 1. 通过图形界面获取用户配置信息
  • 2. 连接QMT交易系统获取持仓数据
  • 3. 将持仓股票转换为通达信格式
  • 4. 生成通达信自定义板块文件
代码结构解析
  • 1. 日志系统配置
def setup_logger():
    # 创建logs目录
    ifnot os.path.exists('logs'):
        os.makedirs('logs')
        
    # 配置日志文件名(使用日期)
    log_file = os.path.join('logs', f'qmt_import_{datetime.now().strftime("%Y%m%d")}.log')
   
    # 创建日志记录器
    logger = logging.getLogger('QMTImport')
    logger.setLevel(logging.INFO)
   
    # 创建文件处理器(限制单个文件大小为5MB,最多保留5个文件)
    file_handler = RotatingFileHandler(log_file, maxBytes=5*1024*1024, backupCount=5, encoding='utf-8')
    file_handler.setLevel(logging.INFO)
这段代码配置了一个完善的日志系统:
• 自动创建logs目录存储日志文件
• 按日期生成日志文件名
• 使用RotatingFileHandler实现日志轮转,防止单个日志文件过大
• 同时输出到文件和终端控制台
  • 2. 图形用户界面
class ConfigGUI:
    def __init__(self):
        self.root = tk.Tk()
        self.root.title("仓鼠智能交易系统--QMT持仓导入通达信")
        self.root.geometry("800x600")
        
        # 默认配置
        self.qmt_path = tk.StringVar(value=r"D:\通达信\国金QMT交易端模拟\userdata_mini")
        self.tdx_path = tk.StringVar(value=r"D:\通达信\自用版")
GUI类使用tkinter库创建,主要特点包括:
• 设置默认路径,方便用户直接使用
• 提供浏览按钮选择目录
• 包含日志显示区域,实时反馈操作结果
• 输入验证功能,确保必要参数已填写
  • 3. QMT连接模块
def connect_qmt():
    try:
        # 生成会话ID
        session_id = int(time.time()) % 1000000
        
        # 创建交易对象
        xt_trader = XtQuantTrader(QMT_PATH, session_id)
        xt_trader.start()
        
        # 连接交易服务器
        if xt_trader.connect() != 0:
            log_message("错误: 连接QMT交易服务器失败")
            return None
连接QMT的核心步骤:
  • 1. 生成唯一的会话ID
  • 2. 创建XtQuantTrader交易对象
  • 3. 启动交易连接
  • 4. 订阅指定账户
  • 5. 持仓数据获取
def get_positions(xt_trader):
    account = StockAccount(QMT_ACCOUNT)
    positions = xt_trader.query_stock_positions(account)
   
    # 获取股票名称和最新价格
    stock_info = get_stock_info(stock_codes)
   
    # 计算盈亏百分比
    profit_percent = (price / cost - 1) * 100
获取持仓数据后,程序还会:
• 查询股票的实时行情数据
• 计算每只股票的盈亏比例
• 格式化输出持仓明细
  • 5. 通达信板块导出
def export_to_tdx(positions):
    # 转换代码格式为通达信格式
    if code.endswith('.SH'):
        tdx_code = '1' + code.split('.')[0]
    elif code.endswith('.SZ'):
        tdx_code = '0' + code.split('.')[0]
        
    # 写入板块文件
    with open(block_file, 'w', encoding='gbk') as f:
        f.write('\n'.join(stock_codes))
代码转换规则:
• 上海市场股票:前缀1+股票代码
• 深圳市场股票:前缀0+股票代码
• 使用GBK编码写入文件,确保通达信能正确识别
技术要点总结
  • 1. 多线程安全:通过生成唯一会话ID确保多实例运行安全
  • 2. 错误处理:完善的异常捕获和日志记录机制
  • 3. 性能优化:批量获取股票行情数据,减少API调用次数
  • 4. 兼容性:处理不同市场股票代码的转换规则
  • 5. 用户体验:图形界面与日志反馈相结合
实际应用价值
该工具解决了量化交易中的一个常见需求:将QMT系统中的持仓股票快速导入到通达信软件中进行分析。主要优势包括:
  • 1. 自动化:无需手动记录和输入股票代码
  • 2. 实时性:获取最新持仓和行情数据
  • 3. 可视化:直观显示盈亏情况
  • 4. 灵活性:可自定义板块名称和存储路径

详细打通过网盘分享的文件:QMT持仓导入通达信.zip

链接: https://pan.baidu.com/s/1R1EaY7AYEHa1pbLUO9pb_Q?pwd=y7mk 提取码: y7mk

--来自百度网盘超级会员v7的分享



量化精选结果,仅供参考,不做为投资依据,股市有风险,入市须谨慎!

f6765734682c4d562b73d75b53aa9a1e.png



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

本版积分规则

QQ|手机版|小黑屋| 股指标网 ( 渝ICP备2024026571号-1 )

GMT+8, 2026-1-9 10:19 Powered by Discuz! X3.5