ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

QMT量化交易入门:从Python环境配置到策略实盘部署全流程

QMT量化交易入门:从Python环境配置到策略实盘部署全流程 1. 先搞清楚QMT到底能帮你做什么以及它和普通交易软件的区别如果你刚开始接触量化交易面对一堆“量化平台”、“策略回测”、“实盘接口”这些词可能有点懵。迅投QMTQuantitative Market Trading是一个比较特别的工具它不是一个在线的策略托管平台而是一个安装在你自己电脑上的本地化量化实盘软件。这意味着你的策略代码、交易数据、交易执行都发生在你的本地环境里。这带来了几个最直接的好处策略私密性高你的核心策略代码不用上传到任何第三方服务器对很多策略开发者来说这是首要考虑。执行延迟相对可控因为是本地直连券商柜台省去了云端平台的网络跳转在行情处理和订单下达的延迟上对于普通个人投资者来说通常比一些通用云平台更有优势。与Python深度集成它原生支持用Python编写策略你可以直接调用pandas、numpy等强大的数据分析库也可以导入各种机器学习模型比如.onnx格式的量化模型灵活性远超市面上常见的、只能使用固定公式语言的交易软件。但它也有明确的适用边界它不是“一键致富”神器你需要自己具备一定的Python编程和金融市场基础知识。它提供的是“武器”但“战术”得你自己设计。它依赖券商支持你需要有一个开通了QMT交易权限的证券账户。不是所有券商都支持通常需要联系客户经理申请开通。它主要面向股票和期货在国内市场它的主战场是A股和国内商品期货。所以在决定投入时间学习之前先确认你是否需要这样一个本地化、高自由度、以Python为核心的量化工具如果你的需求只是简单的条件选股比如基于“通达信量化选股”逻辑可能一些更轻量的工具或券商自带的高级功能就足够了。但如果你想实现更复杂的策略例如结合“核密度估计”进行统计套利或者运行自己的“量化交易策略”模型QMT是一个值得认真考虑的选项。2. 环境准备与安装避开第一个大坑安装QMT是整个流程的第一步也是最容易卡住的地方。很多人在这里浪费大量时间问题往往出在环境冲突上。2.1 核心理解QMT的Python环境隔离QMT自带一个独立的Python环境。这是最关键的一点。这意味着你不需要、也不应该先在你的电脑上单独安装一个Python比如从python.org下载的官方版本。你通常也不应该用pip直接往这个环境里装包尤其是在Windows系统上很容易导致环境崩溃。这个自带环境已经包含了运行QMT策略所需的基础库如numpy,pandas等。正确做法是从券商处获取安装包联系你的券商客户经理获取官方提供的QMT安装程序。不同券商的版本可能有细微差别务必使用自己券商提供的版本。以管理员身份运行安装在Windows系统上右键点击安装程序选择“以管理员身份运行”避免因权限问题导致文件写入失败。选择非系统盘安装建议安装路径不要放在C盘路径中也不要包含中文或空格。例如D:\QMT。安装完成后你会在安装目录下找到bin.x6464位或bin.x8632位文件夹里面就有QMT的主程序。2.2 Python环境配置的实战操作安装好QMT后你需要找到并使用它自带的Python。定位Python解释器进入你的QMT安装目录例如D:\QMT。找到bin.x64\Lib\site-packages这个路径的上级目录通常就是bin.x64文件夹本身。这个目录下应该有一个python.exe文件。这个就是QMT自带的Python。记下这个路径例如D:\QMT\bin.x64\python.exe。配置开发环境以VSCode为例打开VSCode安装Python扩展。按下CtrlShiftP输入“Python: Select Interpreter”选择“Enter interpreter path”。将上面找到的python.exe的完整路径粘贴进去。这样VSCode就会使用QMT的Python环境来运行和调试你的策略代码确保库路径一致。安装额外的Python包谨慎操作如果你的策略需要用到QMT环境里没有的包比如scikit-learn,statsmodels或者你想加载.onnx格式的模型你需要用QMT自带的pip来安装。不要直接打开命令行输入pip install。正确的方法是打开命令行CMD或PowerShell。先切换到QMT的Python所在目录cd /d D:\QMT\bin.x64然后使用当前目录下的pippython -m pip install package-name如果遇到权限错误可以尝试以管理员身份运行命令行再执行上述操作。注意安装第三方包是风险点。如果安装后QMT启动或策略运行报错最直接的恢复方法就是重新安装QMT。因此建议在安装任何新包之前先备份好你的策略文件。3. 从零编写你的第一个策略理解核心流程安装配置好环境后我们抛开所有复杂概念用最小化的代码跑通一个策略的完整流程初始化、获取数据、计算逻辑、下单。这里以最简单的“每日开盘价买入”为例。3.1 策略脚本的基本结构在QMT中一个策略通常是一个.py文件。它需要遵循一定的函数框架。在你的策略目录下例如D:\QMT\Strategies创建一个新文件比如my_first_strategy.py。# -*- coding: utf-8 -*- from qmt import * def initialize(context): 策略初始化函数只在策略启动时运行一次。 在这里设置股票池、基准、滑点、手续费等全局参数。 # 设置要交易的股票列表这里以上证50指数成分股为例需先有数据 context.stock_list [SHSE.600000, SZSE.000001] # 示例代码实际需要完整的列表 # 设置基准用于计算策略收益对比 context.benchmark SHSE.000300 # 沪深300指数 # 设置策略的初始资金单位元 context.capital 1000000.0 # 设置佣金和印花税具体费率需根据券商规定设置 context.commission Commission(buy_cost0.0003, sell_cost0.0003, min_commission5) context.tax Tax(buy_tax0.0, sell_tax0.001) # 卖出时收取千分之一印花税 def handle_data(context, data): 策略的主逻辑函数每个K线周期如每分钟、每日都会被调用一次。 context: 存储策略状态信息的对象。 data: 包含当前周期市场数据的对象。 # 1. 获取当前时间 current_time context.current_dt # 只在交易日的特定时间执行例如每天开盘后5分钟 if not is_trading_time(current_time, 09:35:00, 09:40:00): return # 2. 遍历股票池 for symbol in context.stock_list: # 3. 获取该股票的历史数据例如获取过去20天的收盘价 hist_data get_history(symbol, count20, frequency1d, fields[close]) if hist_data is None or len(hist_data) 20: continue # 数据不足跳过 # 4. 简单的策略逻辑如果昨日收盘价高于20日均价则买入 close_prices hist_data[close].values ma20 close_prices.mean() last_close close_prices[-1] # 5. 获取当前持仓 current_position context.portfolio.positions.get(symbol, None) if last_close ma20: # 信号买入 if current_position is None or current_position.total_amount 0: # 计算买入数量这里简单用资金的10%除以当前价格 current_price data.current(symbol, price) if current_price is None: continue cash context.portfolio.cash buy_amount int((cash * 0.1) / (current_price * 100)) * 100 # A股按手100股交易 if buy_amount 0: # 发送买入订单 order(symbol, buy_amount, sidebuy) log.info(f{current_time} 买入 {symbol} {buy_amount}股价格约{current_price}) else: # 信号卖出如果持有 if current_position and current_position.total_amount 0: # 发送卖出订单全部卖出 order_target(symbol, 0, sidesell) log.info(f{current_time} 卖出 {symbol}) def is_trading_time(current_dt, start_str, end_str): 辅助函数判断当前时间是否在指定的交易时间段内 # 这里需要将字符串时间与current_dt进行比较逻辑略 # 实际使用时QMT有更完善的时间判断函数 return True # 示例返回3.2 关键对象与函数解析context策略的“记忆体”。你在initialize中设置的变量如stock_list,capital以及运行时产生的持仓、现金等信息都保存在这里。它在整个策略生命周期内存在。data当前时刻handle_data被调用时的市场快照。可以通过data.current(symbol, ‘price’)获取最新价data.current(symbol, ‘high’)获取最高价等。get_history(symbol, count, frequency, fields)最重要的函数之一。用于获取历史K线数据。frequency可以是’1d’日线、’1m’分钟线等。这是你策略逻辑计算的基础。order(symbol, amount, side)下单函数。side可以是’buy’或’sell’。order_target(symbol, target_amount, side)目标持仓下单函数。例如order_target(‘SHSE.600000’, 1000, ‘buy’)表示调整该股票持仓至1000股如果当前不足则买入超出则卖出。log.info()打印日志在QMT的策略运行日志窗口中可以看到是调试和监控策略运行状态的关键手段。3.3 回测与模拟验证策略的第一步在实盘之前必须进行回测和模拟交易。历史数据准备在QMT客户端中你需要下载足够的历史数据日线、分钟线等。数据质量直接影响回测结果。运行回测在QMT客户端中找到“策略研究”或“回测”模块。选择你编写的策略文件my_first_strategy.py。设置回测参数初始资金、回测周期如2023-01-01到2024-01-01、K线周期日线/分钟线。点击运行。QMT会模拟历史行情逐根K线调用你的handle_data函数并生成交易记录。分析回测报告回测结束后重点关注累计收益率策略总收益。年化收益率/夏普比率衡量收益风险比。最大回撤历史上最大的亏损幅度这是衡量策略风险承受能力的关键指标。交易详情每一笔买卖的记录检查是否有异常交易如价格超出涨跌停板。分析“未来函数”仔细检查策略逻辑确保没有使用到当时还未产生的数据例如在t时刻使用了t1时刻的收盘价这是回测失真的常见原因即“量化泄露未来信息”。模拟交易实盘模拟回测通过后不要急着上实盘。先在模拟交易中跑一段时间。在QMT中切换到模拟交易模式它会使用实时行情数据但用虚拟资金进行交易。观察策略在实时环境下的表现订单是否都能成交成交价是否合理逻辑触发是否如预期4. 实盘部署与日常运维从模拟到真金白银当模拟交易稳定运行一段时间建议至少1-2个月覆盖不同的市场行情且你对策略的表现和风险有充分把握后可以考虑实盘。4.1 实盘部署步骤账户与权限确认确保你的券商账户已开通QMT实盘交易权限并且有足够的资金。策略代码最终检查移除或禁用所有调试用的print或log.info语句避免日志刷屏。再次确认所有硬编码的参数如股票池、资金比例、止损止盈线都是你想要的。确保策略包含了必要的风险控制模块例如单日最大亏损止损当日累计亏损超过一定比例如2%时平仓所有头寸并停止当天交易。个股持仓上限避免过度集中。总仓位控制根据市场整体风险调整仓位。在QMT中部署在QMT客户端找到“实盘交易”或“策略交易”模块。添加你的策略并关联你的实盘交易账户。设置运行参数运行周期如“每日运行”、开始结束时间、K线周期。非常重要设置正确的订单类型。通常选择“限价单”并设置一个合理的偏移如对手价1跳避免使用“市价单”在极端行情下造成巨大滑点。启动与监控启动策略。第一次启动时建议先用极小的资金或最小交易单位测试一两笔交易确认整个链路——从行情接收、信号计算到订单报送、成交回报——完全正常。保持QMT客户端常开。策略是在本地客户端运行的关闭客户端则策略停止。4.2 日常运维与问题排查实盘运行后工作重心从开发转向监控和运维。每日盘后检查核对持仓将QMT中的策略持仓与券商实际持仓进行比对确保一致。分析日志查看策略运行日志有无报错或异常警告。复盘交易检查每一笔成交记录确认交易逻辑符合预期成交价在合理范围内。常见问题排查链路问题策略启动后无任何交易信号。排查1检查initialize中的stock_list是否设置正确数据是否已下载。排查2在handle_data开头增加log.info(‘当前时间’ str(context.current_dt))看函数是否被正常调用。排查3检查你的信号条件如last_close ma20在历史数据上是否曾经触发。可以临时将条件改得非常宽松如True来测试下单链路是否通畅。问题订单一直处于“已报”状态无法成交。排查1检查订单价格。是否因为设置了限价单且价格偏离市价太远排查2检查市场状态。是否在非交易时间股票是否停牌排查3检查资金或持仓是否足够。买股票时现金是否充足卖股票时是否有可用持仓是否当天刚买入T1制度下无法卖出问题策略运行突然中断或QMT崩溃。排查1查看Windows事件查看器或QMT安装目录下的日志文件通常有log文件夹。排查2检查电脑资源内存、CPU是否耗尽。复杂的策略或处理过多股票数据可能导致内存泄漏。排查3回想是否最近安装了新的Python包可能导致环境冲突。最稳妥的恢复方式是备份策略代码和配置文件 - 重装QMT - 恢复策略。策略的迭代与下线市场在变策略可能失效。定期如每季度对策略进行重新回测检查其表现是否衰减。当决定停止一个策略时正确的流程是先关闭策略自动交易 - 手动处理剩余持仓 - 最后删除或禁用策略。切忌直接关闭QMT或删除策略文件可能导致未完成的订单产生混乱。5. 进阶方向与资源建议当你掌握了基础流程后可以从以下几个方向深化策略复杂度提升多因子模型不再依赖单一指标如均线结合估值、动量、波动率、财务数据等多个因子综合决策。机器学习集成使用scikit-learn等库训练模型判断买卖点。可以将特征工程如技术指标计算在QMT中完成将特征数据导出给Python模型预测再将结果传回QMT执行。注意.onnx格式模型可以更方便地部署在本地。日内高频/Tick级策略使用frequency’tick’获取tick数据但这对网络、硬件和代码效率要求极高个人投资者谨慎尝试。工程化与健壮性配置化将股票池、参数如均线周期、仓位比例写到配置文件中而不是硬编码在代码里方便调整。日志分级使用log.debug,log.warning,log.error区分不同重要程度的日志。异常处理用try…except包裹可能出错的代码段如网络请求数据、下单避免因单个股票数据异常导致整个策略崩溃。学习资源官方文档你的券商提供的QMT文档是最准确的一手资料优先阅读。Python基础扎实的Python语法是前提理解pandas的DataFrame操作至关重要。量化知识除了编程需要学习基本的金融市场知识和量化理论避免写出违背市场基本逻辑的策略。《量化交易之路》等书籍可以提供系统性的框架。最后务必牢记量化交易是概率游戏。再好的策略也可能经历回撤期。本地化运行的QMT给了你最大的控制权同时也意味着你需要承担全部的技术和运维责任。从模拟盘开始从小资金开始逐步构建你的交易系统是更稳妥的路径。
返回列表