
在量化交易的广阔领域里,个人投资者往往面临着工具选择难、技术门槛高的挑战。迅投推出的QMT/miniQMT 量化交易软件,为这类投资者量身打造的实用工具,尤其适合那些熟悉 Python 编程语言的量化爱好者。这款软件全面支持沪深市场、两融业务、港股通以及期权期货等多种交易类型,集成了模拟交易、策略编码、回测验证及实盘交易等完整流程,为用户提供一站式量化交易解决方案。
Python 的简洁易懂,加上QMT/miniQMT 提供的丰富 API 接口,使得个人投资者能够轻松构建、测试并运行自己的量化策略。此外,QMT/miniQMT 与高效的交易柜台 UFT/LDP 紧密集成,确保了交易的快速执行。低至约 10 毫秒的交易延迟,对于追求交易时效性的个人投资者而言,无疑是巨大的优势。今天给大家详细介绍一下miniQMT
一
QMT的运行逻辑

二
什么是miniQMT?


三
miniQMT的核心接口
MiniQMT 的核心其实就在于其 XTQuant 功能,XtQuant封装了策略交易所需要的Python API接口,可以和MiniQMT客户端交互进行报单、撤单、查询资产、查询委托、查询成交、查询持仓以及收到资金、委托、成交和持仓等变动的主推消息。XTQuant 主要包含两个部分:
XTdata 提供数据接口,它允许用户即使在没有登录资金账户的情况下也能从 QMT 实盘客户端获取数据。通过这种方式,各类数据可以轻松地以 Python 库的形式添加到各种交易策略中。
Xtrader 这是提供了交易接口,要激活并使用这项功能,用户需要在券商开通账户,便能通过此接口进行实盘交易。
四
如何配置miniQMT?
配置miniQMT的逻辑就是就是将XTquant包放在本地作为python的第三方库。具体流程就是:
1、点击桌面QMT文件夹位置
2、找到文件夹里面的sit_pages文件
3、复制xtquant到python的安装路径下的sit_pages文件下面。
注意:更详细的安装教程何xtquant文件可以找我领取!

五
如何使用miniQMT?
当 miniQMT 完成配置后,就正式进入连接账户、读取账户信息的关键环节。首先,打开 miniQMT 客户端,输入正确的账号密码登录,确保客户端与券商服务器建立稳定连接。登录成功后,在策略代码中,通过 xtquant 库提供的xttrader模块调用函数初始化交易接口,传入配置好的交易路径和客户端信息,即可完成程序与交易账户的对接。
1、连接账户代码示例:
def connect(self):'''连接path qmt userdata_min是路径session_id 账户的标志,随便account账户,account_type账户内类型'''print('链接qmt')# path为mini qmt客户端安装目录下userdata_mini路径path = self.path# session_id为会话编号,策略使用方对于不同的Python策略需要使用不同的会话编号session_id = self.session_idxt_trader = XtQuantTrader(path, session_id)# 创建资金账号为1000000365的证券账号对象account=self.accountaccount_type=self.account_typeacc = StockAccount(account_id=account,account_type=account_type)# 创建交易回调类对象,并声明接收回调callback = MyXtQuantTraderCallback()xt_trader.register_callback(callback)# 启动交易线程xt_trader.start()# 建立交易连接,返回0表示连接成功connect_result = xt_trader.connect()if connect_result==0:# 对交易回调进行订阅,订阅后可以收到交易主推,返回0表示订阅成功subscribe_result = xt_trader.subscribe(acc)print(subscribe_result)self.xt_trader=xt_traderself.acc=accreturn xt_trader,accelse:print('qmt连接失败')
2、读取账户底层源代码
def balance(self):'''对接同花顺'''try:asset = self.xt_trader.query_stock_asset(account=self.acc)df=pd.DataFrame()if asset:df['账号类型']=[asset.account_type]df['资金账户']=[asset.account_id]df['可用金额']=[asset.cash]df['冻结金额']=[asset.frozen_cash]df['持仓市值']=[asset.market_value]df['总资产']=[asset.total_asset]return dfexcept:print('获取账户失败,读取上次数据,谨慎使用')df=pd.DataFrame()return df
3、读取持股底仓源代码
def position(self):'''对接同花顺持股'''try:positions = self.xt_trader.query_stock_positions(self.acc)print("持仓数量:", len(positions))data=pd.DataFrame()if len(positions) != 0:for i in range(len(positions)):df=pd.DataFrame()df['账号类型']=[positions[i].account_type]df['资金账号']=[positions[i].account_id]df['证券代码']=[positions[i].stock_code]df['证券代码']=df['证券代码'].apply(lambda x:str(x)[:6])df['股票余额']=[positions[i].volume]df['可用余额']=[positions[i].can_use_volume]df['成本价']=[positions[i].open_price]df['参考成本价']=[positions[i].open_price]df['市值']=[positions[i].market_value]data=pd.concat([data,df],ignore_index=True)return dataelse:df=pd.DataFrame()df['账号类型']=Nonedf['资金账号']=Nonedf['证券代码']=Nonedf['股票余额']=Nonedf['可用余额']=Nonedf['成本价']=Nonedf['市值']=Nonedf['选择']=Nonedf['持股天数']=Nonedf['交易状态']=Nonedf['明细']=Nonedf['证券名称']=Nonedf['冻结数量']=Nonedf['市价']=Nonedf['盈亏']=Nonedf['盈亏比(%)']=Nonedf['当日买入']=Nonedf['当日卖出']=Nonereturn dfexcept:df=pd.DataFrame()return df
def today_entrusts(self):'''对接同花顺今天委托'''def select_data(x):if x==48:return '未报'elif x==49:return '待报'elif x==50:return '已报'elif x==51:return '已报待撤'elif x==52:return '部分待撤'elif x==53:return '部撤'elif x==54:return '已撤'elif x==55:return '部成'elif x==56:return '已成'elif x==57:return '废单'else:return '废单'orders = self.xt_trader.query_stock_orders(self.acc)print("委托数量", len(orders))data=pd.DataFrame()if len(orders) != 0:for i in range(len(orders)):df=pd.DataFrame()df['账号类型']=[orders[i].account_type]df['资金账号']=[orders[i].account_id]df['证券代码']=[orders[i].stock_code]df['证券代码']=df['证券代码'].apply(lambda x:str(x)[:6])df['订单编号']=[orders[i].order_id]df['柜台合同编号']=[orders[i].order_sysid]df['报单时间']=[orders[i].order_time]df['委托类型']=[orders[i].order_type]df['委托数量']=[orders[i].order_volume]df['报价类型']=[orders[i].price_type]df['委托价格']=[orders[i].price]df['成交数量']=[orders[i].traded_volume]df['成交均价']=[orders[i].traded_price]df['委托状态']=[orders[i].order_status]df['委托状态描述']=[orders[i].status_msg]df['策略名称']=[orders[i].strategy_name]df['委托备注']=[orders[i].order_remark]data=pd.concat([data,df],ignore_index=True)data['报单时间']=df['报单时间'].apply(conv_time)data['委托状态翻译']=data['委托状态'].apply(select_data)data['未成交数量']=data['委托数量']-data['成交数量']data['未成交价值']=data['未成交数量']*data['委托价格']return dataelse:print('目前没有委托')return data
def today_trades(self):'''对接同花顺今日成交'''trades = self.xt_trader.query_stock_trades(self.acc)print("成交数量:", len(trades))data=pd.DataFrame()if len(trades) != 0:for i in range(len(trades)):df=pd.DataFrame()df['账号类型']=[trades[i].account_type]df['资金账号']=[trades[i].account_id]df['证券代码']=[trades[i].stock_code]df['证券代码']=df['证券代码'].apply(lambda x:str(x)[:6])df['委托类型']=[trades[i].order_type]df['成交编号']=[trades[i].traded_id]df['成交时间']=[trades[i].traded_time]df['成交均价']=[trades[i].traded_price]df['成交数量']=[trades[i].traded_volume]df['成交金额']=[trades[i].traded_amount]df['订单编号']=[trades[i].order_id]df['柜台合同编号']=[trades[i].order_sysid]df['策略名称']=[trades[i].strategy_name]df['委托备注']=[trades[i].order_remark]data=pd.concat([data,df],ignore_index=True)def select_data(x):if x==xtconstant.STOCK_BUY:return '证券买入'elif x==xtconstant.STOCK_SELL:return '证券卖出'else:return '无'df['操作']=df['委托类型'].apply(select_data)data['成交时间']=pd.to_datetime(data['成交时间'],unit='s')return dataelse:print('今日没有成交')return data
六
如何开通miniQMT?
股票无条件万1,根据资金量最低可以做到万0.854
融资无条4.5%,根据资金量,最低可以做到4% 
极速柜台:普通柜台毫秒级,极速柜台微秒级延时,理论上极速柜台并发处理能力在普通柜台5倍以上。
VIP席位 :普通席位人数众多,同一价位排单量多,导致无法在理想价位买入。VIP席位人数少,可更加快实现成交。 
福利5:量化工具安装使用教程、视频
福利6:极速柜台,量化投资者专用,速度微秒级
夜雨聆风