当前位置: 首页 > news >正文

【QMT 量化实战】股市 “高开低走“ 是陷阱还是机会?(下)附完整 Python 代码

摘要

本文为《股市 "高开低走" 是陷阱还是机会?》系列下篇,提供基于QMT 量化交易平台的完整 "高开低走" 策略 Python 实现代码。包含 Xtquant 初始化、全局参数配置、数据获取、趋势判断、周期计算及结果输出等全流程代码,帮助量化投资者快速复现并应用该策略。

关键词: QMT;量化交易;高开低走策略;Python 量化;Xtquant


1. 前言(书接上回)

在上篇文章中,我们详细分析了股市 "高开低走" 现象背后的市场逻辑,区分了哪些是真正的陷阱,哪些是值得把握的机会。本文将提供基于 QMT 平台的完整策略实现代码,帮助大家将理论转化为可执行的量化策略。

以下代码仅供学习参考,实盘交易前请务必进行充分的回测和风险评估。

2. 完整策略代码实现

2.1 导入相关库

import pandas as pd import numpy as np from xtquant import xtconstant from xtquant.xttrader import XtQuantTrader, XtQuantTraderCallback from xtquant.xttype import StockAccount import datetime import time

2.2 Xtquant 初始化

# Xtquant初始化 class MyXtQuantTraderCallback(XtQuantTraderCallback): def on_disconnected(self): print("连接断开") def on_account_status(self, status): print(f"账户状态: {status}") if __name__ == "__main__": # 创建交易对象 xt_trader = XtQuantTrader(r"D:\迅投极速交易终端 睿智融科版\userdata_mini", session_id=123456) # 创建回调对象 callback = MyXtQuantTraderCallback() # 注册回调 xt_trader.register_callback(callback) # 启动交易线程 xt_trader.start() # 连接客户端 connect_result = xt_trader.connect() if connect_result != 0: print("连接失败") exit() # 订阅账户 acc = StockAccount("你的资金账号", "STOCK") subscribe_result = xt_trader.subscribe(acc) if subscribe_result != 0: print("订阅账户失败") exit() print("连接成功,开始运行策略")

2.3 全局参数配置

# 全局参数配置 START_DATE = "20260101" # 回测开始日期 END_DATE = "20260519" # 回测结束日期 STOCK_CODE = "000001.SZ" # 股票代码:平安银行 HIGH_OPEN_RATIO = 0.005 # 高开阈值:0.5% LOW_CLOSE_RATIO = 0.003 # 低收阈值:0.3% CYCLE_DAYS = 5 # 统计周期:5个交易日

2.4 核心功能函数

# 获取指定股票的K线数据 def get_stock_data(xt_trader, stock_code, start_date, end_date): """ 获取股票K线数据 :param xt_trader: XtQuantTrader对象 :param stock_code: 股票代码 :param start_date: 开始日期 :param end_date: 结束日期 :return: 包含日期、开盘价、最高价、最低价、收盘价的DataFrame """ # 获取日线数据 klines = xt_trader.get_history_klines( stock_code, period=xtconstant.PERIOD_DAY, start_time=start_date, end_time=end_date, count=-1, dividend_type=xtconstant.DIVIDEND_TYPE_ADJUST ) if not klines: print(f"获取{stock_code}数据失败") return None # 转换为DataFrame df = pd.DataFrame(klines) df['date'] = pd.to_datetime(df['time'], unit='ms').dt.strftime('%Y%m%d') df = df[['date', 'open', 'high', 'low', 'close']] df = df.sort_values('date').reset_index(drop=True) return df # 数据清洗 def clean_data(df): """ 数据清洗:删除缺失值、异常值 :param df: 原始数据 :return: 清洗后的数据 """ # 删除缺失值 df = df.dropna() # 计算涨跌幅 df['pre_close'] = df['close'].shift(1) df['pct_change'] = (df['close'] - df['pre_close']) / df['pre_close'] # 删除涨跌幅超过10%的异常值(A股主板涨跌幅限制) df = df[(df['pct_change'] >= -0.1) & (df['pct_change'] <= 0.1)] return df.reset_index(drop=True) # 识别高开低走形态 def classify_trend(df): """ 识别高开低走形态 :param df: 清洗后的数据 :return: 包含趋势标签的DataFrame """ # 计算高开幅度 df['high_open'] = (df['open'] - df['pre_close']) / df['pre_close'] # 计算低收幅度 df['low_close'] = (df['close'] - df['open']) / df['open'] # 标记高开低走 df['is_high_open_low_close'] = np.where( (df['high_open'] > HIGH_OPEN_RATIO) & (df['low_close'] < -LOW_CLOSE_RATIO), 1, 0 ) return df # 计算未来周期收益率 def calc_future_return(df, cycle_days): """ 计算未来N个交易日的收益率 :param df: 包含趋势标签的数据 :param cycle_days: 统计周期 :return: 包含未来收益率的DataFrame """ # 计算未来N日收盘价 df['future_close'] = df['close'].shift(-cycle_days) # 计算未来N日收益率 df['future_return'] = (df['future_close'] - df['close']) / df['close'] # 删除最后N行(无未来数据) df = df.dropna() return df # 统计分析结果 def statistic_result(df): """ 统计高开低走后的收益率分布 :param df: 包含未来收益率的数据 :return: 统计结果 """ # 筛选出高开低走的交易日 high_open_low_close_days = df[df['is_high_open_low_close'] == 1] # 统计基本信息 total_days = len(df) high_open_low_close_count = len(high_open_low_close_days) high_open_low_close_ratio = high_open_low_close_count / total_days * 100 # 统计收益率 avg_return = high_open_low_close_days['future_return'].mean() * 100 win_rate = len(high_open_low_close_days[high_open_low_close_days['future_return'] > 0]) / high_open_low_close_count * 100 max_return = high_open_low_close_days['future_return'].max() * 100 min_return = high_open_low_close_days['future_return'].min() * 100 # 输出结果 print("="*50) print(f"统计区间: {START_DATE} 至 {END_DATE}") print(f"股票代码: {STOCK_CODE}") print(f"总交易日数: {total_days}") print(f"高开低走天数: {high_open_low_close_count}") print(f"高开低走占比: {high_open_low_close_ratio:.2f}%") print("-"*50) print(f"未来{CYCLE_DAYS}个交易日平均收益率: {avg_return:.2f}%") print(f"未来{CYCLE_DAYS}个交易日胜率: {win_rate:.2f}%") print(f"未来{CYCLE_DAYS}个交易日最大收益率: {max_return:.2f}%") print(f"未来{CYCLE_DAYS}个交易日最小收益率: {min_return:.2f}%") print("="*50) return { "total_days": total_days, "high_open_low_close_count": high_open_low_close_count, "high_open_low_close_ratio": high_open_low_close_ratio, "avg_return": avg_return, "win_rate": win_rate, "max_return": max_return, "min_return": min_return }

2.5 主函数

# 主函数 if __name__ == "__main__": # 初始化XtQuantTrader(前面已完成) # 获取数据 raw_df = get_stock_data(xt_trader, STOCK_CODE, START_DATE, END_DATE) if raw_df is None: exit() # 数据清洗 clean_df = clean_data(raw_df) # 趋势分类 trend_df = classify_trend(clean_df) # 计算未来收益率 final_df = calc_future_return(trend_df, CYCLE_DAYS) # 统计结果 result = statistic_result(final_df) print("策略测试完成!") # 停止交易线程 xt_trader.stop()

3. 策略使用说明

  1. 环境配置:确保已安装国金证券 QMT 客户端及 Xtquant 库
  2. 参数调整:根据不同股票的特性,调整高开阈值、低收阈值和统计周期
  3. 回测验证:先在历史数据上进行充分回测,验证策略有效性
  4. 小资金实盘:回测通过后,先用小资金进行实盘测试
  5. 风险控制:严格设置止损止盈,控制单只股票仓位不超过总资金的 20%

4. QMT 开通指南

想要运行上述策略,需要先开通国金证券 QMT 量化交易系统权限:

开通条件

  • 普通版:资金10W要求,适合入门级量化投资者
  • 专业版:资产≥10 万,支持全自动交易、极速通道和 API 接口

量化QMT之用什么方式能快速计算指标数据

5. 免责声明

本文仅为量化交易技术分享,不构成任何投资建议。投资有风险,入市需谨慎。量化交易存在较高风险,投资者应根据自身风险承受能力谨慎参与。实盘交易产生的任何盈亏均由投资者自行承担。

http://www.jsqmd.com/news/872023/

相关文章:

  • 3步掌握跨平台网络资源捕获神器:res-downloader终极指南
  • 【RAG】【retrievers11】递归检索器 + 节点引用 + Braintrust评估
  • 2026 苏州高评价上门回收黄金实测:哪家靠谱不踩坑? - 速递信息
  • 2026 全国翻译公司实力排行榜:专业、合规、高效机构权威推荐 - 速递信息
  • 利用Taotoken模型广场为你的网站选择最合适的AI模型
  • MySQL 运维实战系列(一)二进制安装 Mysql 8.0
  • 论文初稿被批太水?,有哪些真正亲测好用的的降AI率软件推荐?
  • taotoken的openai兼容协议让现有应用迁移成本降至最低
  • GHelper:华硕笔记本硬件控制的模块化架构与技术实现深度解析
  • 海事边缘计算实战:基于 Linux 构建船舶多链路高可用网络与隔离防线
  • 7天深度拆解:openpilot自动驾驶系统技术实现与二次开发指南
  • 2026年海口黄金回收平台深度盘点,标杆企业花落谁家? - 黄金上门回收
  • 下载 | Win10正式版最新系统ISO映像 (22H2、19045.7291、多合一版本)-修复系统问题
  • 市面上有哪些是真正性价比高的降AIGC软件(轻松压低AI生成疑似率)
  • 一多操作系统的生命体架构与当前主流开发语言的区别
  • Python之运算符优先级规则
  • TVBoxOSC:打造全能电视媒体中心的终极解决方案
  • [具身智能-855]:什么是AI应用?AI 应用、AI 模型、AI Agent三者区别?
  • 2026年东莞黄金回收避坑指南——福昌夏等六大机构实测对比 - 黄金上门回收
  • GPU 池化5个真实场景告诉你,为什么需要 OrionX 社区版
  • 协议分层传输、TCP报头与TCP三次握手介绍
  • 5大长期记忆系统终极横评!谁是AI Agent的「最强大脑」
  • 什么是AI Agent
  • 如何用嘎嘎降AI处理哲学论文:哲学毕业论文降AI4.8元完整操作教程 - 还在做实验的师兄
  • 心理学论文降AI工具免费推荐:2026年心理学毕业论文知网维普降AI4.8元亲测完整方案
  • Android Studio 打包 React 网页项目
  • Python之anonymous包语法、参数和实际应用案例
  • 利用 TaoToken 多模型聚合能力优化 AIGC 内容生成管线
  • Windows 环境下 NVM 安装与 Node.js 版本管理完全指南
  • 如何用嘎嘎降AI处理自动化论文:自动化毕业论文降AI免费完整操作教程 - 还在做实验的师兄