Below you will find pages that utilize the taxonomy term “新手指南”
使用DeepSeek R1大模型编写迅投 QMT 的量化交易 Python 代码
随着人工智能技术的迅猛发展,利用AI工具提升工作效率已成为现代开发者的重要手段。
在使用deepseek官方网页生成迅投QMT代码的时候,deepseek给出的代码是xtquant代码,也就是miniqmt代码,并不是我们传统意义上说的大QMT可用的代码。
因此,我们需要自建一个知识库,让deepseek根据我的知识库里面的知识,去帮我生成大QMT可用的交易代码。
一、建立迅投QMT的知识库
建立迅投QMT的知识库的方法比较简单,我们就直接访问迅投QMT的官方网站,把网站上的网页内容打印成PDF文件,我这边有一个打印下来的PDF文件可以下载(注意我打印的日期是2025年2月25日,后续迅投网站可能会更新),大家也可以自己去网站上打印。
下载链接:
https://download.csdn.net/download/wtsolutions/90427490
二、利用腾讯ima.copilot建立与deepseek的知识库
1、下载与安装 IMA.Copilot
2. 导入PDF文件到个人知识库
- 在 IMA.Copilot 中,点击左侧导航栏的“知识库”选项。
- 选择“导入文档”,上传你的迅投QMT PDF文件。
- 等待系统处理并索引文档内容。
三、使用 IMA.Copilot 编写量化交易 Python 代码
在个人知识库页面,下面有一个输入窗口,可以在此处提问,此处提问可以是直接基于知识库知识来回答的。
举例说明:
“请根据迅投QMT的PDF文档,编写一个计算股票移动平均线的Python函数。”
IMA.Copilot 将结合 DeepSeek R1 大模型和你的知识库内容,自动生成相应的Python代码。以下就是deepseek给出的代码。
#coding:gbk
import numpy as np
def calculate_ma(ContextInfo, stock_code, window_size):
"""
计算指定股票的移动平均线
:param ContextInfo: QMT上下文对象[1](@ref)
:param stock_code: 股票代码(格式:'000001.SZ')[1](@ref)
:param window_size: 均线周期
:return: MA值(浮点数)
"""
# 获取本地收盘价数据
local_data = ContextInfo.get_market_data_ex(
['close'],
[stock_code],
period='1d',
count=window_size,
subscribe=False
)
# 提取收盘价列表
try:
close_prices = local_data[stock_code]['close'].values
except KeyError:
print(f"未找到股票{stock_code}的收盘数据")
return None
# 计算移动平均
if len(close_prices) >= window_size:
ma_value = np.mean(close_prices[-window_size:])
return round(ma_value, 2)
else:
print(f"数据不足,当前数据量{len(close_prices)},需要{window_size}根K线")
return None
# 使用示例(在策略中调用)
def handlebar(C):
stock = "600000.SH"
ma10 = calculate_ma(C, stock, 10) # 计算10日均线
ma20 = calculate_ma(C, stock, 20) # 计算20日均线
print(f"{stock} 10日均线:{ma10},20日均线:{ma20}")
def init(C):
# 下载所需历史数据(建议在策略初始化时执行)
C.download_history_data("600000.SH", "1d", "", "")
四、检查测试
生成的代码可能需要根据具体需求进行调整和优化。
迅投QMT交易系统 延迟 委托/成交/持仓/账号信息延迟 get_trade_detail_data延迟
很多朋友问过我,为什么感觉迅投的QMT有延迟:
- 委托order数据延迟,order_callback()
- 成交deal数据延迟, deal_callback()
- 持仓position数据延迟, position_callback()
- 账号account数据延迟, account_callback()
第一类原因:
官方给的提示如下:
委托/成交/持仓/账号信息的更新, 是在客户端后台进行的, python策略中无法手动控制。
解释如下: python提供的取账号信息接口 get_trade_detail_data, 与四种交易回调函数(order_callback, deal_callback, position_callback等等), 都是从客户端本地缓存中读取数据 / 触发调用,不是调用时查询柜台再返回。
客户端本地缓存状态定期接收柜台推送刷新,有交易主推的柜台50ms一次,没有交易主推的柜台1-6秒一次。
不能认为get_trade_detail_data查到的状态是与柜台完全一致的, 比如卖出委托后立刻查询, 不会查到对应委托, 可用资金也不会变多。
实盘策略需要设计盘中保存/更新委托状态的机制。常见的做法是用全局变量字典保存委托状态, 给每一笔委托独立的投资备注作为字典的key,委托状态作为字典的value, 下单后默认设置为待报, 之后查到委托后更新状态。如果某品种股票存在待报状态委托, 暂停该品种后续报单, 防止发生超单的情况。(实现可以参考实盘示例7-调整至目标持仓Demo)
简单来说: 不同的券商下的QMT交易系统推送频率不同。从券商向你的QMT软件,有的券商50ms推送一次交易信息,有的是1-6秒才会推送一次信息。也就是说,你如果感觉到延迟,需要问你的券商,问他们所给你提供的QMT交易系统,是多久推送一次。如果是1-6秒,你肯定会感觉有延迟的。
推送之后,你的QMT软件,才会知道最新的信息,然后相应的给你各种callback。当然你自己使用get_trade_detail_data也是从你本地的QMT软件获取的信息,无法直接从券商那边直接获取信息,只能等券商那边给你的QMT软件推送最新的信息之后,你才能get到最新信息。
第二类原因
就是你自己要在QMT软件右下角那块看行情/交易连接的延迟,正常是ms级的延迟,如果你在连接行情/交易服务器处就有很大的延迟,就可能是因为你的宽带连接质量不高,或者网速比较慢等原因。可以通过换成手机热点、换宽带等等各种方式排查一下,看看是不是用了其他的网络就能变好。
其他文章
其他相关文章,可以关注CSDN专栏(看本博客的最顶端),点进去专栏,可以看到所有与QMT量化交易相关的文章。感谢关注。
本文更新于2025年2月25日,关注本博客,csdn专栏(看本博客文章最顶端)或者WTSolutions的知乎,获取最新的更新提醒。
迅投QMT量化交易系统服务器连接 中断与再连接
行情和交易服务器的中断和再连接
在QMT程序化交易系统的右下角,能看到两个标签【行情】【交易】,如果是绿色的,则代表行情和交易服务器是连接正常的,如果变成了红色,则代表那个服务器连接中断了。 如果是红色的,则需要用鼠标点击红色部分,会弹出一个服务器的选择窗口,你需要手动的进行相应的切换,直到右下角的标签变成了绿色的。
服务器再连接
需要注意的是,有的券商的再连接发生时,当前的所有的交易数据,券商会完全再给你推送一次,所有的成交回报,所有的下单回报等等,大家一定要特别注意,不能相信券商给你推送的交易回报, 它可能是重复发送的(如deal_callback等等)。这个问题在我之前的新手指南的帖子里面已经讲解了解决办法。大家可以通过本文章顶端的博客专栏连接,进入我的专栏,查看其他的QMT相关的文章。
服务器中断的识别
很多时候,我们的QMT程序化交易系统是24小时运行的,那么我们其实希望能够识别到当前【行情】【交易】服务器连接是否正常。我自己所采用的方法比较简单,就是设置一个定时函数,在盘前的一个时间去通过获取行情来判断是否存在服务器中断。如果判断中断了,则给我发送一个消息。当然如果我在设定的时间完全没有收到任何消息的话,则说明整个QMT程序存在不正常运行的状况,需要人工干预。
我使用的方法非常简单,就是在9点15运行如下代码:
def DailySettings(ContextInfo):
if getLastClose('510300.SH',ContextInfo) != False:
sendMsg("morning")
def getLastClose(stock, ContextInfo):
stockList = [stock]
tick = ContextInfo.get_full_tick(stock_code = stockList)
if stock in tick:
if "lastClose" in tick[stock]:
return tick[stock]["lastClose"]
sendMsg("行情数据可能存在问题")
return False
如果我收到了morning,则通常QMT行情服务器连接正常。 sendMsg函数,大家可以自定义,比如发送短信,发送邮件,发送飞书消息,自己能接收到就行。
其他文章
其他相关文章,可以关注CSDN专栏(看本博客的最顶端),点进去专栏,可以看到所有与QMT量化交易相关的文章。感谢关注。
本文更新于2025年2月11日,关注本博客,csdn专栏(看本博客文章最顶端)或者WTSolutions的知乎,获取最新的更新提醒。
迅投QMT量化交易系统新手指南及常见问题
迅投QMT门槛
迅投QMT量化交易系统是一款基于python语言开发的量化交易平台,它提供了丰富的量化交易功能,包括策略开发、回测、实盘交易等。
迅投QMT量化交易系统的门槛相对较低,只需要具备一定的编程基础,资金门槛很低,就可以开始使用。
其实迅投QMT还是比较适合入门级和中级个人投资者的,如果是那种特别专业的个人投资者或者机构的投资者,不一定会选择迅投QMT,还有其他的量化交易平台,比如大家经常能在龙虎榜上面看到的华鑫某某某,当然华鑫的门槛会更高,对资金和对技术能力都会有更高的门槛。
首先就是开通一个券商,他们要能支持QMT的接入,然后开通QMT的账号,就可以开始使用了。有一些券商基本没什么开户门槛,可以开通QMT,如果有需要,可以通过底部的知乎链接,与我联系,可以与我的客户经理联系,其实也就只是帮个忙,不是全职干这个的哈。
python版本
QMT使用的语言是python,版本为3.6。如果完全不懂python的话,要么赶紧学习,要么这个帖子就是一个劝退帖。
QMT自带python库
QMT里面内置了一些常用的python库,包括:
- numpy, pandas, patsy, scipy, statsmodels, TA_Lib 其中多种指标如 ADX, MACD, RSI, 布林轨道等;K 线形态识别,如黄昏之星,锤形线等等可以使用TA_Lib库。
QMT自带策略
QMT里面自带了一些策略,包括:
- 均线策略
- 日内交易策略
- 国债逆回购策略 等等,当然这些仅供参考,基本上大家都要自己编写自己的策略。
QMT的安装
安装包要从你的券商那里下载,安装很简单,就普通安装一个软件有一样。
QMT的登陆
需要从自己的券商那里获取,有一个用户名和一个密码,然后登陆即可。一般在开通QMT交易权限的时候,券商会告诉你用户名和密码。
QMT的运行环境
需要一台Windows电脑,也可以使用云服务器,电脑的性能取决于你自己的策略,如果策略的数量不多,且策略并不复杂,其实普通的电脑都没有问题。对于新手来说,完全可以使用一台现有的电脑开始使用,如果后面上了复杂的策略,慢慢的再增加性能更好的电脑硬件。我自己的策略比较简单,我把我的电脑的一些硬件,比如USB接口只开启了一个,声卡什么用不到的硬件都关闭了,只保留了必须的硬件,这样可以保证电脑的性能,也可以保证电脑的稳定性,同时电耗也会比较低,目前我的电耗每天不到0.5度。
QMT的运行,很多时候,我们并不是一直盯着的,会需要在电脑上/云服务器上面安装一个远程协助软件,这样可以随时远程连接到QMT,然后进行一些操作。
一些Bug与解决方案
QMT量化交易系统中的 账号成交状态变化主推 deal_callback() , 当账号成交状态有变化时,这个函数被客户端调用。
在使用的过程中发现,deal_callback() 函数在会被调用多次,后来咨询国金证券QMT的工作人员后,才发现,会在至少如下两种情况下调用:
- 当账号成交状态有变化时,会调用 deal_callback() 函数。
- 当网络出现中断之后,QMT系统与服务器重新连接的时候,会调用 deal_callback() 函数, 并且把当日的所有成交全部都推送一遍。
因此务必不可以相信 deal_callback() 函数的推送数据,因为 deal_callback() 函数的推送数据可能是重复推送的。为了解决这个问题,我们需要自己建立数据库,去记录每一次下单,下单的成交状态。后续所有的下单,都要基于自己的数据库数据,不可相信QMT的推送数据。
如下摘取自迅投QMT的官方文档:
下单与回报相关
为保证以尽快的速度执行交易信号, qmt 客户端提供的交易接口是异步的, 以快速交易参数填2的passorder函数为例,调用后会立刻发出委托, 然后返回。不会等待委托回报, 也不会阻塞python线程的运行。
委托/成交/持仓/账号信息的更新, 是在客户端后台进行的, python策略中无法手动控制。python提供的取账号信息接口 get_trade_detail_data, 与四种交易回调函数, 都是从客户端本地缓存中读取数据 / 触发调用,不是调用时查询柜台再返回。客户端本地缓存状态定期接收柜台推送刷新,有交易主推的柜台50ms一次,没有交易主推的柜台1-6秒一次。 不能认为get_trade_detail_data查到的状态是与柜台完全一致的, 比如卖出委托后立刻查询, 不会查到对应委托, 可用资金也不会变多。
IBKR 盈透证券 新手指南 IBKR InteractiveBrokers for Beginner
软件工具
IBKR有网页版,手机APP版,电脑桌面版等多个软件工具。
对于新手来说,手机APP和电脑网页版可能使用起来相对比较友好一些。我感觉电脑桌面版的那个软件设计哦,只适合于金融行业资深从业者。反正就挺难用的。
手机APP, 如果是苹果的,就直接在应用商店下载,如果是安卓的,但是你又不知道怎么下载, 你就打IBKR在上海的客服电话,他们会教你,上海客服给你的下载链接下载的APP可以在国内的网络环境下稳定的使用。
另外,IBKR也是有api可以提供使用的,懂编程的朋友也可以使用API进行程序化交易。
券商佣金
对于小散来说,选阶梯式的会比较合适,一次交易,基本佣金基本是在0.35USD。
如果交易量大或者金额特别高的,估计也不会看我这个帖子,所以我就只介绍适合新手小散的佣金方式。
T+0
美国股市并不是完全T+0,
对于资金量大于25000USD的day trader账户,是可以随便T+0交易的
2000~25000USD资金量的保证金账户,5个交易日内最多3次 T+0交易
小于2000USD的现金账户,就不建议你进行T+0交易了,需要等到资金交割之后才能再次交易
如果违规账户会被暂停90天。
简单来说,有钱的就充钱吧,充25000,成为day trader,能随便T+0。没那么多钱且是新手还是别随便T+0了。IBKR的手机APP在识别到你可能触发违规的时候,一般会弹出小窗口提醒你一下,需要注意!
换汇
IBKR里面可以很方便的换汇,但换汇是有手续费的,最少2USD。据说IBKR的汇率是比较好的,但我也没有对比过。因为资金量很小的话,也不太需要在乎这个。
入金速度
如果采用银行转账的形式,转账后需要大概30分钟,一小时,才能显示到账户中,并不是实时到账的。其他的入金形式是不是能实时到账,我不确定,有知道的知友可以在评论区补充。另外,入金账户的名称和你的IBKR的账户名称要是同一个姓名,才能入金的,不能用别人的账户入金。
出金
每个月的第一笔出金是免费的,每个月从第二笔出金是要支付手续费了的。
行情
使用IBKR的任何客户端,看行情都是特别的不适应的。没有国人制作的APP看行情更舒服,可以用HK的或者SG的券商APP(FUTU,雪球,MOOMOO等)。
股票收益增长计划
这个就是当有人需要融券的时候,IBKR会找参与了股票收益计划的人,把券借给需要融券的人。借出的账户,可以收到利息。借出后,当你想卖股票的时候,完全不影响你卖出。
利息
入金后可能有一部分余额没有用于购买股票,以现金余额的形式在账户里面。
余额10000美金是没有利息的,高于10万美金的利息是能达到4.3%的。中间分了几档,利息介于0~4.3%之间。如果是小散户,估计可能也没有利息或者利息很少。
夜盘交易
IBKR支持夜盘美股交易,也就是除了美股正常的交易时间之外,大部分时间你也是可以交易股票和ETF的。
时间是美国ET时间晚上八点到第二天早晨的三点五十,大家可以相应换算北京时间,基本覆盖了A股交易的时间。
注意,并不是所有的交易产品都支持夜盘的,绝大部分散户操作的股票和ETF支持,在页面你可以看到夜盘按钮的就是支持的。另外,夜盘交易并没有正常交易时间段那么活跃,也就是流动性相对没那么好,所以交易价格可能和公允价值偏差较大。
Bit币交易
如果使用中国大陆身份进行开户的话,是不允许进行相关交易的。
股市交易时间
不同地区股市交易时间不同,如下均按照北京时间,只统计常规交易时间。像美股是有夜盘交易的,不含在如下所述的交易时间中(如果有错误,还请在评论区指正)
- 中国沪深市场:周一至周五,上午9:30至11:30,下午1:00至3:00。
- 中国香港股市:周一至周五,早市9:30至12:00,午市1:00至4:00。
- 美国股市:夏令时21:30至次日4:00,冬令时22:30至次日5:00。
- 欧洲股市:夏令时15:00至23:30,冬令时16:00至次日0:30。
- 日本股市:周一至周五,上午8:00至下午2:00。
- 我国台湾股市:周一至周五,上午9:00至下午1:30。
- 伦敦证券交易所(英国):周一至周五,16:00至次日00:30。
- 法兰克福证券交易所(德国):周一至周五,15:00至次日03:00。
- 巴黎泛欧交易所(法国):周一至周五,16:00至次日00:30。
交易品种
- 股票交易:包括美国、欧洲、亚洲等多个国家和地区的股票市场。
- 期权交易:提供多种期权交易策略。
- 期货和商品交易:涵盖能源、金属、农产品等多种期货合约。
- 外汇交易:提供主要和次要货币对的交易。
- 债券交易:包括政府债券、公司债券等。
- 基金和ETFs:提供广泛的共同基金和交易所交易基金。
保险
IBKR证券账户中持有的现金根据SEC的客户保护法规15c3-3受到保护。
除IBKR的保护外,前$250,000美元现金享受SIPC保险覆盖。
闲钱理财
有时候账户有一些余额,放着没利息(仅限低于10000美元的余额),可以选择购买BIL,类似货币基金吧(不完全等同),可以每天涨一点点利息,但交易这个BIL也是正常需要缴纳手续费的。
下单类型(美股和A股区别)
美股和A股在下单类型上存在一些差异,主要体现在市场规则和交易机制上。以下是主要区别:
- 市价单(Market Order)
美股:市价单按当前市场价格立即执行,成交速度快,但价格可能波动。
A股:A股也有市价单,但通常有价格限制(如涨跌停板),成交价不会超出当日涨跌幅范围。
- 限价单(Limit Order)
美股:限价单按指定价格或更优价格成交,未达到指定价格则不执行。