Below you will find pages that utilize the taxonomy term “服务器”
如何低成本选择讯投QMT 的服务器/电脑,低成本运行?
本文适合给正在使用讯投QMT 做程序化交易的新手朋友,当然也非常欢迎老手门参观,在评论区互相交流。
关注 WTSolutions Invest 的专栏,分享IBKR 的交易指南,讯投QMT 的使用经验等。专栏链接如下。
https://blog.csdn.net/wtsolutions/category_12891723.html
今天分享下,我目前使用的讯投QMT的情况,是通过某券商开通的QMT的函数交易权限,基本没有什么门槛,大家都可以开,能交易大A的股票和可转债。ETF期权的开通,门槛比较高,且审核也比较繁琐,所以没有开。
在讯投QMT上同时有四个策略在同时运行,使用的是大QMT,也就是原装的QMT,不是极简版的。对于交易产品行情的获取,关注的数量一般在几十只预先选定的产品,不会全市场的实时扫全场的数据。交易的频率应该在几分钟甚至更长时间,也只是简单的采用一些TALIB带的一些指标分析的函数,所以对硬件的要求并不高。
最开始我使用的是我自己的笔记本电脑,也用过一段时间的云服务器,最后还是选择了一台小主机独立的去运行QMT。
最开始用自己的笔记本电脑的时候,和我日常使用笔记本电脑感觉有冲突,QMT会弹出提醒,对我在电脑上干别的有影响。另外,还会担心在笔记本上使用比较消耗性能、网速的程序的时候,会影响到QMT。还有就是,笔记本电脑开的时间长了,风扇会一直转,比较烦,就放弃了在笔记本上使用的想法。
后来选了云服务器,趁着某大厂的云服务器迎新大折扣的时候买了一年,其实感觉整体还是挺不错的。系统选的是 win server 版本,自己安装了QMT和我自己需要的数据库,就这样跑了差不多一年。云数据库比较好的点是因为有人管理,所以会不用担心断电、断网这些事情,但不好的点是策略是放在别人家的机器上的,也不知道安不安全。后来一年快到期的时候,续费的时候价格翻了好多倍,羊毛不让薅了,就没有续费了。
找了自己家里面的之前买的 mini 主机,买的时候我记得是 800 多,国产品牌,升级到了 win11,配置了配置就放到一个角落里面,让他 24 小时自己运行了,没有连接显示器,只插了一根网线,把声卡、用不到的USB口什么的禁用了,功率比较低在六~七瓦,一个月电费几块钱。只是六日的时候,会关机让他休息,平时就一直开着。这样也用了一年了吧,没出过什么问题,家里的电源和网络也是非常的稳定。其实主要还是因为是新手,策略下的交易量没有那么大,不是分分钟几万的那种,所以硬件上就没有那么好。我看他们专职做量化的,硬件配置相当的高,甚至还有UPS不间断电源,网速也要最快的那种。
以上,是我作为一个小散,新手,非专业量化从业者的给QMT配硬件的思路,觉得适合的人可以参考,不适合的也根据自己的情况去配置。毕竟大家的策略不同,交易量不同,票票的大小不同,对硬件的要求会有很大的区别。我这个分享呢,可能更适合那些刚开始做程序化交易的朋友。
迅投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里面,我们可以通过代码定时实现国债逆回购。
国债逆回购的代码
代码仅供参考,不构成投资建议,请谨慎操作。
account = 'xxxxx'
def DRR(ContextInfo):
afund = get_trade_detail_data(account,'stock','account')[0].m_dAvailable
avolume = int((afund )/1000)*10
if avolume >= 10:
passorder(24,1101,account,'204001.SH',14,-1,avolume,'DRR',2,'DRR',ContextInfo)
print('DRR ' + str(avolume) )
else:
print('DRR skipped')
如上定义了个DRR函数,通过定时函数,在盘中的14:57分运行。
问题
如果有问题,可以到我的知乎上与我联系。https://zhuanlan.zhihu.com/p/23309424857
其他文章
其他相关文章,可以关注CSDN专栏(看本博客的最顶端),点进去专栏,可以看到所有与QMT量化交易相关的文章。感谢关注。
本文更新于2025年2月12日,关注本博客,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的知乎,获取最新的更新提醒。