反正我是醉了。讨论着,就被对方拉黑了。
让他show me the code, 结果截图出来这么一坨shit。
函数名用 func 1, func2, 这是写hello world的程序员才会这么写的。
你的func1也就是每隔3秒一次而已呀。 3秒内扫描全场,可以马上下单几百个标的,但每两次触发要3s。怎么快速1秒扫描呢?
温馨提示:
如果后台私信他写策略啥的,开户的要注意。
0
最近发现不仅仅get_full_tick经常出错,get_market_data 和 get_market_data_ex 也是。举几个例子:
get_full_tick:
20220816 14:54:45 handlebar wrong data : ('113649.SH', 129.559, 131.89473105268948, 23981100.0, 18182, 129.201, 130.16)
分析一下行情数据出错的可能,发现amount经常不对,比如上面第一行,真实的amout为23551608,错误的为 23981100 ,
get_market_data : 昨天早上调用,
his = ContextInfo.get_market_data(fields=["open","close", "low", "high"], stock_code=[k], end_time=end_time, period='1d',
dividend_type='none', count=11)
stock_code设置为["118035.SH"];发现返回的数据缺少7月10日的数据;
get_market_data_ex : 昨天晚上调用,
now = datetime.now()
t1 = now + timedelta(days=-1)
end_time = t1.strftime("%Y%m%d")
d = ContextInfo.get_market_data_ex(fields=["open","close", "low", "high"], stock_code=[k], end_time=end_time, period='1d',
dividend_type='none', count=11)
his = d[k]
highs = his["high"]
print(f"{k} {highs}")
结果返回:
118035.SH stime
20230512 119.092
20230515 116.325
20230516 116.480
20230517 117.120
20230518 118.550
20230519 118.500
20230522 118.590
20230523 118.872
20230524 118.357
20230525 130.300
20230526 126.000
20230529 121.500
20230530 120.743
20230531 122.769
20230601 120.200
20230602 119.830
20230605 119.300
20230606 119.200
20230607 118.485
20230608 117.958
20230609 118.500
20230612 119.950
20230613 120.586
20230614 119.780
20230615 122.200
20230616 122.360
20230619 122.000
20230620 122.880
20230621 124.055
20230626 123.483
20230627 122.133
20230628 146.255
20230629 175.506
20230630 179.499
20230703 152.338
20230704 171.890
20230705 152.500
20230706 148.999
20230707 152.370
20230710 142.394
Name: high, dtype: float64
同学们有QMT相关问题可以发私信给我,大家一起学习进步
get_full_tick:
20220816 14:54:45 handlebar wrong data : ('113649.SH', 129.559, 131.89473105268948, 23981100.0, 18182, 129.201, 130.16)
分析一下行情数据出错的可能,发现amount经常不对,比如上面第一行,真实的amout为23551608,错误的为 23981100 ,
get_market_data : 昨天早上调用,
his = ContextInfo.get_market_data(fields=["open","close", "low", "high"], stock_code=[k], end_time=end_time, period='1d',
dividend_type='none', count=11)
stock_code设置为["118035.SH"];发现返回的数据缺少7月10日的数据;
get_market_data_ex : 昨天晚上调用,
now = datetime.now()
t1 = now + timedelta(days=-1)
end_time = t1.strftime("%Y%m%d")
d = ContextInfo.get_market_data_ex(fields=["open","close", "low", "high"], stock_code=[k], end_time=end_time, period='1d',
dividend_type='none', count=11)
his = d[k]
highs = his["high"]
print(f"{k} {highs}")
结果返回:
118035.SH stime
20230512 119.092
20230515 116.325
20230516 116.480
20230517 117.120
20230518 118.550
20230519 118.500
20230522 118.590
20230523 118.872
20230524 118.357
20230525 130.300
20230526 126.000
20230529 121.500
20230530 120.743
20230531 122.769
20230601 120.200
20230602 119.830
20230605 119.300
20230606 119.200
20230607 118.485
20230608 117.958
20230609 118.500
20230612 119.950
20230613 120.586
20230614 119.780
20230615 122.200
20230616 122.360
20230619 122.000
20230620 122.880
20230621 124.055
20230626 123.483
20230627 122.133
20230628 146.255
20230629 175.506
20230630 179.499
20230703 152.338
20230704 171.890
20230705 152.500
20230706 148.999
20230707 152.370
20230710 142.394
Name: high, dtype: float64
同学们有QMT相关问题可以发私信给我,大家一起学习进步
0
@Amazing11
少数几家可以
想问下QMT如何购买LV2呀,是找券商买吗还是引用外部库,翻了下文档好像没有提到LV2。大概费用是多少呀,谢谢啦~基本上大部分券商的qmt和Ptrade都没有L2数据,虽然文档上写了用法。
少数几家可以
0
@Amazing11
想问下QMT如何购买LV2呀,是找券商买吗还是引用外部库,翻了下文档好像没有提到LV2。大概费用是多少呀,谢谢啦~抱歉,我没有买过LV2,理论上是QMT的LV2是需要联系券商购买的。
0
@debo
没买LV2的话,全推返回的还是3s一次的快照。看起来程序连续不断地收到更新,实际上对每个证券来说,更新的间隔并不会小于3s想问下QMT如何购买LV2呀,是找券商买吗还是引用外部库,翻了下文档好像没有提到LV2。大概费用是多少呀,谢谢啦~
0
@boeing767
QMT 是全推机制,这个订阅式,避免了tick固定时间的限制。
买个LV2,盘口信息还得更丰富。
我没用过qmt,不太清楚它的函数。我昨天晚上回去整明白了subscribe whole quote的函数,这样一下子获取行情盘口的速度快多了,不再是固定3s tick的了。这样应该就可以做到题主说的可能是ms的行情信息更新速度了。
一般来说,会有一个或几个推送行情的函数,比如on_tick/on_bar,或者handle_tick/handle_bar之类,订阅行情后,这类型的函数会推送行情数据
QMT 是全推机制,这个订阅式,避免了tick固定时间的限制。
买个LV2,盘口信息还得更丰富。
0
@boeing767
想问下,现在版本有出一个 subscribe whole quote,不是等3s tick 推送的机制,采用一篮子订阅模式,有更新的盘口或者有tick产生就推送的。这个函数能研究分享一下用法吗?
比如怎么订阅多只个股,并将取回的数据写入dataframe呢?
谢谢。
那个股渣说的没毛病啊,有必要另起一贴对线吗专业到位。
函数名字又不是不能随便起,他或许不想让别人看到函数名。
tick数据约是3s一个,本地函数间隔多少时间运行一次完全随意,不见得非得绑定这3s,特别是run_time这种轮询的方式。
有的人为了减少本地响应的延迟,run_time间隔调成1s或更低也可以啊,这样新的tick数据来的时候可以更快的反应,旧的数据完全可以不响应,或者随便做什么响应。
通过上面的...
想问下,现在版本有出一个 subscribe whole quote,不是等3s tick 推送的机制,采用一篮子订阅模式,有更新的盘口或者有tick产生就推送的。这个函数能研究分享一下用法吗?
比如怎么订阅多只个股,并将取回的数据写入dataframe呢?
谢谢。
1
赞同来自: 自动化交易机器
@dzerzhinsky
用法:ContextInfo.get_his_st_data(stockcode)
示例:
def handlebar(ContextInfo):
print( ContextInfo.get_his_st_data('000004.SZ'))
不行吧,ContextInfo.get_stock_name(),只能获得某只股票当前的名称;回测期间某一时刻的名称获取不到吧获取某只股票ST的历史ContextInfo.get_his_st_data()
用法:ContextInfo.get_his_st_data(stockcode)
示例:
def handlebar(ContextInfo):
print( ContextInfo.get_his_st_data('000004.SZ'))
0
@cduym
上周我刚刚把海通的账户给销了,通过app。很方便,没有纠缠
我已经开满三个券商了,开不了新的了,不常用的两个券商也咨询过销户的事,基本就是用各种门槛来卡你不让你销户当时是通过哪种聚道开的户,如果是非柜台方式,应该能通过app销户的
上周我刚刚把海通的账户给销了,通过app。很方便,没有纠缠
0
@dzerzhinsky
有个获取板块的函数,试试获取里面的st板块
不行吧,ContextInfo.get_stock_name(),只能获得某只股票当前的名称;回测期间某一时刻的名称获取不到吧这个就不清楚了,甚少用qmt回测。
有个获取板块的函数,试试获取里面的st板块
0
L1行情数据是三秒刷新一次。
行情数据可以有两种方式响应。
1、异步方式
2、同步方式
异步方式可能时延比较大,同步方式时延比较小。
不同数据来源不同,不同交易代码,并不是同步刷新数据。
有些代码可能已经刷新了,有些代码下一秒才刷新,还有可能再下一秒刷新。
你只有用更高频率扫描才能发现问题。
行情数据可以有两种方式响应。
1、异步方式
2、同步方式
异步方式可能时延比较大,同步方式时延比较小。
不同数据来源不同,不同交易代码,并不是同步刷新数据。
有些代码可能已经刷新了,有些代码下一秒才刷新,还有可能再下一秒刷新。
你只有用更高频率扫描才能发现问题。
0
@自动化交易机器
是的,我持续追踪过,追踪范围没有出错。貌似qmt只是提供开发回测平台,里面的数据是券商方面自己提供的;ptrade也是如此;
异常情况肯定有,集思录数据也出错,交易所数据也能推送过来出错,之前沪深300数据直接停了。 只要在1%的情况下,都没啥问题。
假如真的完全乱的,qmt直接倒闭了
0
QMT的数据是实时吗? 我怎么经常是延迟3秒,
比如:
[2022-06-30 14:00:03][MOM ][SH000300][1分钟] 20220630 14:00:00
前面是当前时间,后面是timetag时间
设置了1秒的定时器也是如此:
ContextInfo.run_time("mom","1nSecond","2019-10-14 13:20:00")
比如:
[2022-06-30 14:00:03][MOM ][SH000300][1分钟] 20220630 14:00:00
前面是当前时间,后面是timetag时间
设置了1秒的定时器也是如此:
ContextInfo.run_time("mom","1nSecond","2019-10-14 13:20:00")
0
@boeing767
没有什么特别的。
PS,我拿qmt来应用,不造轮子,关注策略多一些。
既然肯定有异常情况,run_time内的函数运行可是定时的,这样会不会导致前面对齐了低延迟,后面正好对齐高延迟呢。返回体里面有个time tag,判断下就可以了,不用那么复杂的。和当前时间对不上就异常处理。
程序不考虑鲁棒性的吗?
不说了,再说你就什么都知道了
没有什么特别的。
PS,我拿qmt来应用,不造轮子,关注策略多一些。
0
@boeing767
异常情况肯定有,集思录数据也出错,交易所数据也能推送过来出错,之前沪深300数据直接停了。 只要在1%的情况下,都没啥问题。
假如真的完全乱的,qmt直接倒闭了
你确定能精确的对齐到0 3 6 9吗?是的,我持续追踪过,追踪范围没有出错。
你确定qmt系统的tick数据的延迟很稳定没有浮动吗?
你不怀疑qmt数据稳定性方面的质量?
异常情况肯定有,集思录数据也出错,交易所数据也能推送过来出错,之前沪深300数据直接停了。 只要在1%的情况下,都没啥问题。
假如真的完全乱的,qmt直接倒闭了
1
赞同来自: ergouzizzz
@自动化交易机器
有可能一开始认为1分钟频率就够了,后来发现下单要6秒频率足够,再后来发现延迟太高,那就1秒吧。。。。都太正常不过
你直接要代码,你觉得人家辛苦改的代码会直接贴出来吗,而且你言词不是很客气的样子,这两点可能是拉黑你的主要原因
我是欢迎好好讨论的。他拉黑了,不给我回复了。好作文都是改出来的,好程序都是一个一个小版本迭代出来的,哪有直接出最终版的道理。
你的图我明白。
我自己用的是毫秒去获取,配合L2。本身就支持毫秒。
你去股渣那里看他,开始说6s获取,变到1s,明显就是不懂。为啥不一开始设置1s?
有可能一开始认为1分钟频率就够了,后来发现下单要6秒频率足够,再后来发现延迟太高,那就1秒吧。。。。都太正常不过
你直接要代码,你觉得人家辛苦改的代码会直接贴出来吗,而且你言词不是很客气的样子,这两点可能是拉黑你的主要原因
0
@boeing767
那个股渣说的没毛病啊,有必要另起一贴对线吗而且qmt出来的数据是0,3,6,9对齐的,只要你设定间隔3s,拿到的是没有延时。
函数名字又不是不能随便起,他或许不想让别人看到函数名。
tick数据约是3s一个,本地函数间隔多少时间运行一次完全随意,不见得非得绑定这3s,特别是run_time这种轮询的方式。
有的人为了减少本地响应的延迟,run_time间隔调成1s或更低也可以啊,这样新的tick数据来的时候可以更快的反应,旧的数据完全可以不响应,或者随便做什么响应。
通过上面的...
1
赞同来自: evansviller
@boeing767
你的图我明白。
我自己用的是毫秒去获取,配合L2。本身就支持毫秒。
你去股渣那里看他,开始说6s获取,变到1s,明显就是不懂。为啥不一开始设置1s?
那个股渣说的没毛病啊,有必要另起一贴对线吗我是欢迎好好讨论的。他拉黑了,不给我回复了。
函数名字又不是不能随便起,他或许不想让别人看到函数名。
tick数据约是3s一个,本地函数间隔多少时间运行一次完全随意,不见得非得绑定这3s,特别是run_time这种轮询的方式。
有的人为了减少本地响应的延迟,run_time间隔调成1s或更低也可以啊,这样新的tick数据来的时候可以更快的反应,旧的数据完全可以不响应,或者随便做什么响应。
通过上面的...
你的图我明白。
我自己用的是毫秒去获取,配合L2。本身就支持毫秒。
你去股渣那里看他,开始说6s获取,变到1s,明显就是不懂。为啥不一开始设置1s?
2
那个股渣说的没毛病啊,有必要另起一贴对线吗
函数名字又不是不能随便起,他或许不想让别人看到函数名。
tick数据约是3s一个,本地函数间隔多少时间运行一次完全随意,不见得非得绑定这3s,特别是run_time这种轮询的方式。
有的人为了减少本地响应的延迟,run_time间隔调成1s或更低也可以啊,这样新的tick数据来的时候可以更快的反应,旧的数据完全可以不响应,或者随便做什么响应。
函数名字又不是不能随便起,他或许不想让别人看到函数名。
tick数据约是3s一个,本地函数间隔多少时间运行一次完全随意,不见得非得绑定这3s,特别是run_time这种轮询的方式。
有的人为了减少本地响应的延迟,run_time间隔调成1s或更低也可以啊,这样新的tick数据来的时候可以更快的反应,旧的数据完全可以不响应,或者随便做什么响应。
而且,行情最快是3秒更新一次,你设置为1秒,你3秒内 每一秒去查询也是 同样一个snapshot数据。通过上面的话,可以看出你对量化框架只停留在应用的层面,你写几个量化框架就不会这么肤浅了。看下图
所以我觉得他就是个托。啥也不懂。
1
赞同来自: haydengao
@haydengao
qmt和ptrade直接读取服务器数据获取。
转股价或者溢价率也能直接获取吗?我是真没找到对应的api函数。只有抓基础价格行情数据的啊内置的是没有。我直接写了一些接口数据部署在个人服务器,每天自动更新。
qmt和ptrade直接读取服务器数据获取。
3
赞同来自: ryanxzqn 、yc850k 、haydengao
@haydengao
conda env 或者 virtualenv都行
安装第三方包,正确姿势是啥,担心会升级qmt系统默认的pandas库,我看介绍有两种方式,一种是加个-D参数,指定lib地址,还一种是可以修改path环境变量?这样就安装在非软件所在的本地python目录中?正确姿势是每个特定的项目、功能,设置单独的environment。
conda env 或者 virtualenv都行
0
即使定时1秒,你拿到的分笔 lastprice在3秒内都是 一样的。 看上图数据
我是来打脸那个 一点股渣 的,让它拿数据说话呀,它贴的图完全和qmt不相关,不说策略,然后贴一堆ps的交割单,懂得都懂(叫杀啥盘来着?)。
即使定时1秒,你拿到的分笔 lastprice在3秒内都是 一样的。 看上图数据
我是来打脸那个 一点股渣 的,让它拿数据说话呀,它贴的图完全和qmt不相关,不说策略,然后贴一堆ps的交割单,懂得都懂(叫杀啥盘来着?)。
0
@haydengao
安装第三方包,正确姿势是啥,担心会升级qmt系统默认的pandas库,我看介绍有两种方式,一种是加个-D参数,指定lib地址,还一种是可以修改path环境变量?这样就安装在非软件所在的本地python目录中?安装到软件的sitepack 目录,安装的时候你的python 版本最好也要3.6 版本。
0
安装第三方包,正确姿势是啥,担心会升级qmt系统默认的pandas库,我看介绍有两种方式,一种是加个-D参数,指定lib地址,还一种是可以修改path环境变量?这样就安装在非软件所在的本地python目录中?
0
@Amazing11
你好 QMT哪个地方有详细教程攻略不,开通了一个连测试代码好像环境都没跑通,编译提示缺少什么包。。。。。 反复装了他那个python库好像还是不行 谢谢啦安装qmt的时候,路径最好不要有空格,也不要用中文。 目录的路径有点坑