通过券商申请成功的QMT无法直接使用需要进行配置
1、安装软件
一般券商为用户开通QMT后,会通过电子邮件将下载地址发给用户,用户需要从电子邮箱的链接安装QMT软件。
如果还可以申请QMT的用户可以访问miniQMT.com网站提供下载。
2、安装软件后首次登录需要下载python库
安装配置方法如图所示:

3、python库安装完成后就可以配置本地版的miniQMT了
python库下载完成后找到
QMT文件安装目录下//bin.x64//lib//site-packags//xtquant
将QMT目录下的python库中的xtquant包复制到本地的python环境中

4、如何启动miniQMT
miniQMT启动需要登录极简模式QMT(XtMiniQmt.exe)有些券商已经变更为“独立交易”
miniQMT是QMT量化交易软件的极简模式,可以通过xtquant库实现对miniQMT客户端的本地交互。
使用xtquant的程序前需要先启动miniQMT客户端。
xttrader和miniQMT的交易接**互,封装了策略交易所需要的Python API接口,可以和miniQMT客户端交互进行报单、撤单、查询资产、查询委托、查询成交、查询持仓以及收到资金、委托、成交和持仓等变动的主推消息。
xtdata和miniQMT的数据接**互,本质是和miniQMT建立连接,由miniQMT处理行情数据请求,再把结果回传返回到python层。使用的行情服务器以及能获取到的行情数据和miniQMT是一致的,要检查数据或者切换连接时直接操作miniQMT即可。
5、启动本地的IDE(集成开发环境)工具导入xtquant
代码运行效果:

原生python效果

代码示例:
# -*- coding: utf-8 -*-
"""
申请开通QMT请添加微信咨询gjquant,获取更多资料访问https://miniqmt.com/
此代码脚本仅用于软件测试,不能用于实盘交易,以此代码进行交易本人不承担任何损失
"""
import sys
import time
import pandas as pd
from xtquant.xttrader import XtQuantTrader
from datetime import datetime #时间戳改为日期时间格式的时候会用到
#---------------演示效果-------------------
from rich import pretty, print
from rich.table import Table
#——————————————————————————————————————————————————————————————————————————————————————————————————————
#设置你的path=''QMT安装路径信息,acc=''引号内填入你的账号
path = r'D:\QMT\userdata_mini'
acct = "55008888"
#创建交易对象
session_id = int(time.time())
xt_trader = XtQuantTrader(path, session_id)
#xttrader连接miniQMT终端
xt_trader.start()
if xt_trader.connect() == 0:print('【软件终端连接成功!】')
else: print('【软件终端连接失败!】','\n 请运行并登录miniQMT.EXE终端。','\n path=改成你的QMT安装路径')
#订阅账户信息
from xtquant.xttype import StockAccount
ID = StockAccount(acct)
subscribe_result = xt_trader.subscribe(ID)
if subscribe_result == 0:print('【账户信息订阅成功!】')
else:
print('【账户信息订阅失败!】','\n 账户配置错误,检查账号是否正确。','\n acct=""内填加你的账号')
sys.exit() #如果运行环境,账户都没配置好,后面的代码就不执行
#——————————————————————————————————————————————————————————————————————————————————————————————————————
# !!!注意,以下代码将启动账户进行交易,谨慎使用
POOL = '510050.SH' #设置股票池(POOL)
BP = 2.53 #买入价格(BP)
BQ = 1200 #买入数量(BQ)
SP = 2.55 #卖出价格(SP)
SQ = 2100 #卖出数量(SQ)
SN = "策略" #策略名称
PS = "备注" #备注
# !!!注意,以下代码将启动账户进行交易,谨慎使用
#下面两行删除"#"井号后,运行将以BP = “ ”的价格委托买入BQ = “ ” 股的,股票池为POOL = “ ” 执行交易买入/卖出委托,请谨慎使用
#from xtquant import xtconstant #执行交易的时候需要引入
#order_id = xt_trader.order_stock(ID, POOL, xtconstant.STOCK_BUY, BQ, xtconstant.FIX_PRICE, BP) #买入
#order_id2 = xt_trader.order_stock(ID, POOL, xtconstant.STOCK_SELL, SQ, xtconstant.FIX_PRICE, SP) #卖出
#——————————————————————————————————————————————————————————————————————————————————————————————————————
#自定义函数,将账户信息转为DF格式
#账户信息
def account_info_df():
asset = xt_trader.query_stock_asset(ID)
if asset:
account_df = pd.DataFrame({
'ID': [asset.account_id],
'资产总额': [asset.total_asset],
'持仓市值': [asset.market_value],
'可用资金': [asset.cash],
'在途资金': [asset.frozen_cash]
})
return account_df
# 委托信息
def orders_df():
orders_df = pd.DataFrame([(order.order_id, order.stock_code, order.order_volume, order.traded_volume, order.price, order.order_status,
(order.order_volume - order.traded_volume),
datetime.fromtimestamp(order.order_time).strftime('%H:%M:%S'))
for order in xt_trader.query_stock_orders(ID,cancelable_only = True)],
columns=['编号', '代码', '委托', '成交', '委价',
'状态', '未成', '报单时间'])
return orders_df
# 成交信息
def trades_df():
trades_df = pd.DataFrame([(trade.stock_code, trade.traded_volume, trade.traded_price,trade.traded_amount,trade.order_id, trade.traded_id,
datetime.fromtimestamp(trade.traded_time).strftime('%H:%M:%S'))
for trade in xt_trader.query_stock_trades(ID)],
columns=['代码', '成交', '成交价','成交额','订单编号', '成交编号', '成交时间'])
return trades_df
# 持仓信息
def positions_df():
positions_df = pd.DataFrame([(position.stock_code, position.volume, position.can_use_volume, position.frozen_volume,
position.open_price, position.market_value, position.on_road_volume)
for position in xt_trader.query_stock_positions(ID)],
columns=['代码', '持仓', '可用', '冻结', '开仓价格', '市值', '在途股份'])
return positions_df
# 打印汇总信息
account_df = account_info_df() #账户信息
orders_df = orders_df() #委托信息
trades_df = trades_df() #成交信息
positions_df = positions_df() #持仓信息
#美化打印DF表格
def dataframe_to_rich_table(df):
table = Table(show_header=True, header_style="bold magenta")
# 添加列名到表格,并允许列宽自动扩展以适应内容
for col in df.columns:
table.add_column(col, style="dim", max_width=None) # 移除了overflow设置,允许内容完全显示
# 添加数据行到表格
for idx in range(len(df)):
row_data = [str(item) for item in df.iloc[idx]] # 确保所有数据都是字符串
table.add_row(*row_data)
return table
print("【今日汇总】",f"委托次数:{len(orders_df)} 成交次数:{len(trades_df)} 持仓数量:{len(positions_df)}")
print("【账户信息】")
print(dataframe_to_rich_table(account_df))
# 输出DataFrame
print("【订单信息】")
print(dataframe_to_rich_table(orders_df) if not orders_df.empty else "无委托信息")
print("【成交信息】")
print(dataframe_to_rich_table(trades_df) if not trades_df.empty else "无成交信息")
print( "【持仓信息】")
print(dataframe_to_rich_table(positions_df) if not positions_df.empty else "无持仓信息")