Below you will find pages that utilize the taxonomy term “服务器”
迅投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的知乎,获取最新的更新提醒。