问题描述:我在我自己的每个用户策略,都开了一个Timer的定时任务线程,self.timer=Timer(1,self.Timer_Task),并且在Timer_Task不断的开启定时任务循环运行Timer_Task,开这个定时任务的主要目的是在开盘的时候第一时间发单(我现在已经知道我这个做法不对,我已经修改.现在我主要想请教一下我遇到的故障的原因)
但是有出现的情况是这样,两个策略A和B,在各自的定时任务线程下同一时间发单,A和B策略发单后,两个策略都返回取得了同一个订单号(正常应该是各自取得策略本身的订单号)
A策略发单之后,返回了A的订单号,但是后续的order和trade并没有推送给A策略
B策略发单之后,返回的也是A的订单号,并且把A策略的这个订单的order和trade都推送到B策略这边了
而B策略本身发出去的那个订单,有在委托列表中,但是不被识别了
我读了代码,觉得应该是订单ID和策略之间的映射字典出错了.但是我不懂是什么原因?
请问,是不是2个线程同时调用CTP gateway的send_order,然后订单号返回给了错误的策略?
ROHON接口,在主界面出现一个什么Keyerr的错误(具体错误我没有记录下来就关掉了,因为那时候我不知道真的出错,大概有印象是这么个名字)
然后我发现账户的实际持仓和我程序记录的不一样,我就打开LOG,发现如下问题:
在正常情况下,一个单子完全成交后,既有推送OrderData过来,也有推送TradeData过来.并且,OrderData状态会更新为"完全成交"
但是,这次,完全成交完后,只有推送几条TradeData,没有推送OrderData过来
并且,在盘后,我的代码有主动调用main_engine.get_order(vt_orderid)打印出来的order信息仍然为"未成交"
在CTA界面模式下,是否可能实现某个策略的重载?
比如我是策略运行过程中,需要修改其中的某个策略的代码,盘中就需要把这个策略的新代码重载应用到策略里
现在的做法是必须停止所有策略,退出CTA,然后再重新启动开始.
但是这种做法,其他策略也不得不停止,已经挂出去的订单不得不重新排队
所以,请问,界面模式下,能否实现只重载单个策略?
RT,vnpy.trader.engine里面的get_all_orders,这个取的是当前策略的orders,还是账户里所有品种的orders?
RT,CTA策略中的self.pos变量,在界面上显示的那个后台是否有使用,用户代码里,是否可以改变管理这个self.pos,不会对下单等产生冲突吧?
在收到on_order回调的时候,根据order: OrderData读取到订单已经成交,记录入下:
20230417_09:49:28.957018:('order触发,trading值:', True)
20230417_09:49:28.957018:(OrderData(gateway_name='ROHON', extra=None, symbol='SPD CF307&CF309', exchange=<Exchange.CZCE: 'CZCE'>, orderid='1681689782_151_4', type=<OrderType.LIMIT: '限价'>, direction=<Direction.LONG: '多'>, offset=<Offset.OPEN: '开'>, price=-130.0, volume=2, traded=2, status=<Status.ALLTRADED: '全部成交'>, datetime=datetime.datetime(2023, 4, 17, 9, 3, tzinfo=zoneinfo.ZoneInfo(key='Asia/Shanghai')), reference=''),)
然后我根据全部成交状态,发出一个平多订单:
20230417_09:49:28.957018:('order触发,trading值:', True)
20230417_09:49:28.957018:(OrderData(gateway_name='ROHON', extra=None, symbol='SPD CF307&CF309', exchange=<Exchange.CZCE: 'CZCE'>, orderid='1681689782_151_49', type=<OrderType.LIMIT: '限价'>, direction=<Direction.SHORT: '空'>, offset=<Offset.CLOSE: '平'>, price=-120.0, volume=2.0, traded=0, status=<Status.SUBMITTING: '提交中'>, datetime=None, reference='CtaStrategy_CF307309_ren_02'),)
20230417_09:49:28.957018:('trade触发,trading值:', True)
20230417_09:49:28.957018:(TradeData(gateway_name='ROHON', extra=None, symbol='CF309', exchange=<Exchange.CZCE: 'CZCE'>, orderid='1681689782_151_4', tradeid=' 3182', direction=<Direction.SHORT: '空'>, offset=<Offset.OPEN: '开'>, price=15080.0, volume=2, datetime=datetime.datetime(2023, 4, 17, 9, 49, 29, tzinfo=zoneinfo.ZoneInfo(key='Asia/Shanghai'))),)
20230417_09:49:28.957018:('trade触发,trading值:', True)
20230417_09:49:28.957018:(TradeData(gateway_name='ROHON', extra=None, symbol='CF307', exchange=<Exchange.CZCE: 'CZCE'>, orderid='1681689782_151_4', tradeid=' 3183', direction=<Direction.LONG: '多'>, offset=<Offset.OPEN: '开'>, price=14950.0, volume=1, datetime=datetime.datetime(2023, 4, 17, 9, 49, 29, tzinfo=zoneinfo.ZoneInfo(key='Asia/Shanghai'))),)
然后这个订单被拒了:
20230417_09:49:28.988440:('order触发,trading值:', True)
20230417_09:49:28.988440:(OrderData(gateway_name='ROHON', extra=None, symbol='SPD CF307&CF309', exchange=<Exchange.CZCE: 'CZCE'>, orderid='1681689782_151_49', type=<OrderType.LIMIT: '限价'>, direction=<Direction.SHORT: '空'>, offset=<Offset.CLOSE: '平'>, price=-120.0, volume=2, traded=0, status=<Status.REJECTED: '拒单'>, datetime=None, reference=''),)
20230417_09:49:28.988440:('平多委托失败,订单号:', '1681689782_151_49', ',数量:', 2, ',价格:', -120.0)
在错误信息那边提示:交易委托失败,代码:30,信息:多仓不足,无法平仓[投机][卖][平仓][SPD CF307&CF309][2][-120.000][1 < 2]
请问这是咋回事?根据最后的错误信息[1 < 2],也就是仓位只有1,不足2,所以下单失败.
可是on_order过来的数据是显示已全部成交了呀?
我已经实现在界面模式下的CTA交易模块,在策略中实现了定时器触发,并通过修改engine.py和template.py,在20点40分实现了自动重连行情服务器和交易服务器.
从而实现了,15点收盘后,不关机,晚上夜盘自动开始进行新一天的交易.
但是现在有个问题,在交易窗口,比如"行情","活动","委托"窗口那边,还会停留前一交易日的委托信息,没有自动清屏.
如何代码实现在收盘后清屏交易界面的"活动""委托"中的订单?
要去修改调用哪个文件的哪个函数?
刚装好的WIN10系统,刚装好的VNPY,启动融航模块显示如下错误:
2023-04-06 19:16:36 --------------------------------------------------
2023-04-06 19:16:36 VeighNa Trader进程启动
2023-04-06 19:16:37 Traceback (most recent call last):
File "C:\veighna_studio\lib\runpy.py", line 196, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\veighna_studio\lib\runpy.py", line 86, in _run_code
2023-04-06 19:16:37 exec(code, run_globals)
File "build\bdist.win-amd64\egg\veighna_station\trader.py", line 39, in <module>
File "build\bdist.win-amd64\egg\veighna_station\trader.py", line 24, in run_trader
AttributeError: module 'vnpy_rohon' has no attribute 'RohonGateway'
2023-04-06 19:16:48 VeighNa Trader进程终止
如题,交易服务器会每天21点开盘前自动重连吗?
能实现每天自动重连服务器,实现7*24小时自动交易吗?
假设有2个信号先后几乎同时到达,如果有TICK触发的同时,也有一个ONE ORDER触发
那么,VNPY是等on_tick回调函数处理完了,再触发on_order回调函数.
还是两个函数双线程同时触发回调?
如题,每天下午3点收盘后,晚上21点前,交易服务器和行情服务器能否自动登录,从而实现程序的7*24小时自动交易?
假设在程序运行过程中,断网了一段时间,导致没有收到成交回报
是否有提供主动查询账户订单信息的接口?根据订单号去CTP服务器主动查询?
能否创建一个定时器,从而实现定时回调的功能?
我在on_start回调函数里创建一个Timer定时任务,想实现每隔1秒调用我的处理函数.但是只执行了一次.
请问,能否实现一个定时触发的功能,实现在没有TICK和BAR回调的时候,也能定期执行我的主程序?
比如我的策略,订阅的是品种A.但是在策略中,我需要对品种B和品种C也进行查询等操作,可以实现吗?
可以主动查询品种B和C,或者开平仓品种B和C吗?
当一个买卖单发出去后,能否对这个订单进行后续的跟踪和精细化管理?
比如根据定单号,对定单进行撤单.查询定单的发单价格,发单数量,查询已成交数量,查询定单目前的状态(比如发单失败,提交中,未成交,已完全成交,部分成交,已撤单等状态)
同时启动CTP和CtaStrategy应用模块
2023-03-24 20:44:38 VeighNa Trader进程启动
2023-03-24 20:44:39 找不到数据服务驱动vnpy_,使用默认的RQData数据服务
2023-03-24 20:44:45 Connect to 180.168.146.187:10202
2023-03-24 20:44:45 Session -1690501119 Connected
RQData数据服务初始化失败:用户名为空!
请问这个是啥问题,怎么解决?
我有2台电脑,其中一台安装好后,运行PyQtGraph Examples里的Basic Plotting,一切正常,可以正常显示图形
但是另外一台电脑也是那样安装,却无法显示,错误提示如下:
C:\Users\Hitomi>python
[VeighNa Studio] Python 3.10.9 (heads/new_nsis-dirty:06eefe2, Jan 11 2023, 23:06:02) [MSC v.1934 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
from pyqtgraph import examples
examples.run()
libpng warning: iCCP: cHRM chunk does not match sRGB
PySide6/init.py: Unable to import Shiboken from C:\veighna_studio\lib\site-packages\pyqtgraph\examples, C:\veighna_studio\lib\site-packages, C:\veighna_studio\python310.zip, C:\veighna_studio\DLLs, C:\veighna_studio\lib, C:\veighna_studio, C:\veighna_studio\lib\site-packages\win32, C:\veighna_studio\lib\site-packages\win32\lib, C:\veighna_studio\lib\site-packages\Pythonwin
Traceback (most recent call last):
File "C:\veighna_studio\lib\site-packages\pyqtgraph\examples\Plotting.py", line 9, in <module>
import pyqtgraph as pg
File "C:\veighna_studio\lib\site-packages\pyqtgraph__init.py", line 17, in <module>
from .colors import palette
File "C:\veighna_studio\lib\site-packages\pyqtgraph\colors\palette.py", line 1, in <module>
from ..Qt import QtGui
File "C:\veighna_studio\lib\site-packages\pyqtgraph\Qt\init.py", line 47, in <module>
import(lib)
File "C:\veighna_studio\lib\site-packages\PySide6\init.py", line 143, in <module>
_setupQtDirectories()
File "C:\veighna_studio\lib\site-packages\PySide6\init.py", line 64, in _setupQtDirectories
from shiboken6 import Shiboken
File "C:\veighna_studio\lib\site-packages\shiboken6\init.py", line 23, in <module>
import typing
File "C:\veighna_studio\lib\site-packages\typing.py", line 1359, in <module>
class Callable(extra=collections_abc.Callable, metaclass=CallableMeta):
File "C:\veighna_studio\lib\site-packages\typing.py", line 1007, in new__
self._abc_registry = extra._abc_registry
AttributeError: type object 'Callable' has no attribute '_abc_registry'
如需进行程序化对接,烦请将您Appid提供给我们下(即符合ctp格式要求的APPID)
我们这边提供对应的认证码给您,供您进行登录。
请问软件的APP ID是多少?