VeighNa量化社区
你的开源社区量化交易平台
Member
离线
116 帖子
声望: 2

我发现新版的vnpy已经改了orderdata的结构,我之前用的老版本。
我再用新版本测试一下

解决了,是我的路径有问题

更新之后运行无图形界面会报这个错误,但是utility确实在trader文件夹下面啊。

这是因为你没有下单。如果只是输出get_contract里的vt_symbol的话是正常的格式,但如果在下单的时候执行的话就会变成带/ctp的格式。
我发现order.data定义的就是这个格式,所以如果在converter的update_order后加上
print(order.vt_symbol)
在发送委托的时候就会输出
i2105_DCE/CTP
这会造成更新委托状态出现问题

Traceback (most recent call last):
File "C:\vnstudio\lib\threading.py", line 917, in _bootstrap_inner
self.run()
File "C:\vnstudio\lib\threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "C:\vnstudio\lib\site-packages\vnpy\event\engine.py", line 60, in _run
self._process(event)
File "C:\vnstudio\lib\site-packages\vnpy\event\engine.py", line 73, in _process
[handler(event) for handler in self._handlers[event.type]]
File "C:\vnstudio\lib\site-packages\vnpy\event\engine.py", line 73, in <listcomp>
[handler(event) for handler in self._handlers[event.type]]
File "C:\vnstudio\lib\site-packages\vnpy\app\cta_strategy\engine_test.py", line 167, in process_order_event
self.offset_converter.update_order(order)
File "C:\vnstudio\lib\site-packages\vnpy\trader\converter.py", line 42, in update_order
if not self.is_convert_required(order.vt_symbol):
File "C:\vnstudio\lib\site-packages\vnpy\trader\converter.py", line 83, in is_convert_required
contract = self.main_engine.get_contract(vt_symbol)
File "C:\vnstudio\lib\site-packages\vnpy\trader\engine.py", line 450, in get_contract
print(f'contracts:{self.contracts[vt_symbol]}')
KeyError: 'i2105_DCE/CTP'

我在get_contract里面加了一行
print(f'contracts:{self.contracts[vt_symbol]}')
就会报上面的错误。
或者在converter的update_order后加上
print(order.vt_symbol)
在发送委托的时候会输出
i2105_DCE/CTP

发现一个问题,main_engine里的contracts列表是按照vt_symbol来索引的,像'i2105_DCE'这样。
但是当发送委托的时候,order.vt_symbol后面会多一个/CTP,像这样:
i2105_DCE/CTP
由于格式不对,导致后面对contracts列表的更新都是没有正确执行的。
这个问题应该怎么修正?

想请问converter里的offsetconverter的作用是什么?其中is_convert_required这个函数又是起什么作用?

我发现问题出在哪里了。是开盘前的第一根tick的时间有问题。
我在BarGenerator的update_tick下加了一句话:
print(f'{tick.symbol}:{tick.datetime}')

于是早上启动策略后(开盘之前)就print出了如下:

rb2105:2020-12-25 23:00:00.500000+08:00
因为时间出现在今天晚上,所以开盘以后出现的tick都没有正常地被生成bar的数据。为什么会出现一个这样的时间戳?
更奇怪的是,另一个关于螺纹钢的策略输出的是正常的:
rb2105:2020-12-25 07:53:40+08:00

请问这可能是什么原因造成的?

我检查过了,am.inited也是Ture,也有tick推送,但on_bar上就是没有bar推送。最关键的一点就是如果在9点开盘前就启动,那么就没有on_bar的数据;在开盘后启动,就有on_bar的数据。在夜盘上,一直都有数据。

我的策略是在分钟线上运行的。具体情况就是on_bar函数里的内容完全不执行,也接收不到bar里的任何信息。我其实不需要am计算指标,只需要当前的收盘价就行了。但问题是夜盘是没有任何问题的,早上开盘后再重启策略也是没有问题的。所以我不理解为什么在早上会出现这个问题。

而且为啥我开盘以后重新运行就成功了呢

刚刚试过了。tick是推送过来了。好奇怪,我用的
self.am = ArrayManager(1)
self.load_bar(10)
不存在数据准备的问题啊

在早上9点开盘的时候,经常会出现某些期货的标的接受不到数据。夜盘没有这种问题。我敢肯定不是策略内部的bug,因为重启就恢复正常了。最近两天rb2105都出现了这个问题。我用的无图形界面,并且是在实盘上运行的。请问有人遇到和我类似的问题吗?

我根据
https://www.vnpy.com/forum/topic/2504-vnpyjin-jie-on-tickhan-shu-nei-che-dan-zhui-dan-xiang-jie-shi-pan-zai-yong-de-dai-ma-mei-you-keng-e
这个帖子修改了代码,但发现程序并没有成功的追单撤单。
首先我发现
working_order_dict = self.get_position_detail(tick.vt_symbol).active_orders
这个列表一直是空的,在有委托发出后且没有成交时,列表依然是空的。
于是我在converter里面找到了相关的update_order函数,我发现当新的委托出现时,其状态为Status.SUBMITTING;但这种状态的委托update_order不会处理,于是就造成active_orders列表一直没有更新。那么on_tick里的追单撤单也不会执行了。
请问这是什么原因造成的?是因为我用的仿真环境吗?是不是只有实盘的时候才能正确执行?

@上弦之月 请问为什么要把self.cancel_status改为字典类型,保持原来的bool类型不行吗

我明白了。
因为class variable会在同一类中share从而导致一些问题,我想用instance variable做一些替代(我不用图形界面)。问题是instance variable能用json文件做读取吗?

有个问题一直没弄明白,为什么cta策略里的parameter和variable要用class variable?
假设我在两个标的上运行同一种策略,那么这两个标的应该有各自的一些参数和变量,这样的话不是使用instance variable更好吗?vnpy里选择class variable的原因什么?

楼主你好,请问cancel_surplus_order这个函数是不是可以直接放在cta_template里面?

我想自己设计一个直连交易所的平台,想学习vnpy的连接期货公司的方法。但是很关键的一部分是在pyd文件里面。我想知道这部分有方法查看吗?我不是学计算机的,自学的python。c++只在课上学过但从没有用过。想请教我这个背景有希望靠自学单独设计连接交易所的程序吗?如果没什么希望的话我也不去浪费时间了。

请问直达的接口vnpy升级了吗?
我仍然登录不上账号。(交易服务器和行情服务器均可以连接成功。)
直达那边告诉我说没有看到我的登录请求,我觉得还是vnpy内部的登录函数的问题。
请问怎么解决?

© 2015-2022 微信 18391752892
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】