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

在分钟回测时,如果是最后一根bar来触发下单,好像都要第二天的第一根bar成交。 而实际是希望能将这个成交算在当天。 有什么方式可以达到目标? 谢谢

暂时解决问题1)的办法,手动将数据库表的datetime字段修改长度为6,就可以插入毫秒数据了。不知道最初创建的是不是有bug?
其他问题,继续请教各位老大们。

1)用行情记录模块的功能,记录一个合约的tick数据。(mysql数据库)。可是查看数据库的时候,发现只有1秒一笔数据,而且只精确到秒。这是为什么?

2)如果只用vnpy框架来订阅合约,并指定保存到文件的方式记录tick。可以每秒2笔,发现一天下来,保存会有数据遗漏(大概几百笔,每天数量不定)。 这种遗漏是否用行情记录模块记录也会发生(现在每秒一笔也是有遗漏)。是网络丢包造成,还是程序写入时有错误,或者是ctp漏报?

3)实盘交易的时候,是否也会有收不到的tick数据? 怎样可以解决这种问题,交易程序放到(交易所)期货公司机房里边?

谢谢

报错如下:
Traceback (most recent call last):
File "c:\vnstudio\lib\site-packages\vnpy\app\portfolio_manager\ui\widget.py", line 207, in process_trade_event
self.monitor.update_trade(trade)
File "c:\vnstudio\lib\site-packages\vnpy\app\portfolio_manager\ui\widget.py", line 278, in update_trade
reference_cell = BaseCell(trade.reference, trade)
AttributeError: 'TradeData' object has no attribute 'reference'

在CTP的order回报中。关于时间的字段有很多:
///报单日期
TThostFtdcDateType InsertDate;
///委托时间
TThostFtdcTimeType InsertTime;
///激活时间
TThostFtdcTimeType ActiveTime;
///挂起时间
TThostFtdcTimeType SuspendTime;
///最后修改时间
TThostFtdcTimeType UpdateTime;
///撤销时间
TThostFtdcTimeType CancelTime;
自己看了下vnpy的代码,
在object.py 当中定义的OrderData 有两个时间字段,datetime: datetime = None 和 cancel_time: str = ""
在ctp_gateway.py 当中的onRtnOrder里边,有timestamp = f"{data['InsertDate']} {data['InsertTime']}"

疑问1)OrderData 的datetime代表什么?
测试在CTA策略模块里,下委托单后,打印每次收到on_order 里边的datetime,时间是变化的,而且比tick行情的时间早?
例如 09:45:10.400 tick行情触发下单,然后在on_order收到的情况是:09:45:09 提交中;09:45:09 提交中;09:45:10全部成交;
从上面的代码来看,OrderData 当中的datetime应该是委托报单时间才对?这个时间应该是ctp报过来的,不是本地时间对吧?那为什么会实际收到的变化的时间呢?

2)怎么可以在orderdata对象中增加对应CTP里边的CancelTime撤单时间 和 UpdateTime最后更新时间(我理解就是order的全部成交时间)?
在ctp_gateway.py 当中的data有定义data['CancelTime']吗,哪里可以增加这个定义,从而让接口有这个数据? 然后在ctp_gateway.py 的onRtnOrder添加一行 canceltime = data[CancelTime]? 同样的,这笔委托的最后更新时间 updatetime = data[updateTime]?

感谢!

委托来源字段记录了委托来自哪个策略(实例),可是VNPY没有将这些信息保存到文件或者数据库当中。当系统重启动后,这些来源字段就变成空了。。。。

请问,是否有接口可以直接查询并获取客户端显示的所有委托信息,从而自行保存?

青青子荆 wrote:

  1. 是的
  2. 可以的,自行修改.vntrader目录下的cta_strategy_data.json文件里对应策略的pos

第一个问题,是说 无法比较,只能在策略部分自行维护?

同一个策略(不同参数)的两个实例,交易的是同一个品种。这种情况下,vnpy可以识别委托是属于哪一个策略实例的。
问题是:
1)如何去检查某个策略实例的持仓与实际持仓是否一致?
如果只有一个策略实例的时候,可以通过查询实际持仓 与 策略持仓比较来发现是否持仓一致。但是,两个实例(同一品种)的话,因为在同一个实际账户里边,查询实际持仓是得到两个策略实例的实际持仓,无法区分某个策略实例。一般是怎么做最理想呢?(是否只能通过成交回报来自行维护实例的持仓,无法进行实际持仓的比较?)

2)如果想要手动补单到对应的策略实例当中,可以怎么操作?
能否可以将某笔成交指定到某个策略实例当中。 假设当发现策略实例和实际持仓不一致时,想要手动补单到策略中。。

谢谢。我的处理方法是,在call_strategy_func()里边增加了一个发邮件的动作。目前大部分错误都能收到邮件。

谢谢,已确认是报的数据有问题。

xiaohe wrote:

请问你是6.5.1还是6.3.19?

请问,如果要适配一个新的ctp版本,需要做哪些事情呢? 有没有文档可参考?

用Python的交易员 wrote:

用Python的交易员 wrote:

  1. 不会影响
  2. 可以用send_email函数发送邮件到QQ邮箱(自动推送到手机微信)提醒

谢谢回复。
在策略代码的每个地方,自己写抓取错误的代码?vnpy本身有没有统计的入口把错误抓出来的(界面上能显示,这些错误是哪里获得的呢)? 看到CTAEngine 有个call_strategy_func()是这里边直接可以得到错有错误吗?

如果不是版本问题,那这个报错是什么问题?

好像是CTP版本问题。
请问,VNPY2.1.8 对应CTP什么版本? 如果要使用CTP 6.3.19的版本,要怎么做?

谢谢。

仿真环境下,ctpgateway报错。。。
ValueError: time data '20210408 144916.0' does not match format '%Y%m%d %H:%M:%S.%f'

At:
C:\vnstudio\lib_strptime.py(359): _strptime
C:\vnstudio\lib_strptime.py(577): _strptime_datetime
C:\vnstudio\lib\site-packages\vnpy\gateway\ctp\ctp_gateway.py(315): onRtnDepthMarketData

ValueError: time data '20210408 144917.0' does not match format '%Y%m%d %H:%M:%S.%f'

At:
C:\vnstudio\lib_strptime.py(359): _strptime
C:\vnstudio\lib_strptime.py(577): _strptime_datetime
C:\vnstudio\lib\site-packages\vnpy\gateway\ctp\ctp_gateway.py(315): onRtnDepthMarketData

ValueError: time data '20210408 144918.0' does not match format '%Y%m%d %H:%M:%S.%f'

At:
C:\vnstudio\lib_strptime.py(359): _strptime
C:\vnstudio\lib_strptime.py(577): _strptime_datetime
C:\vnstudio\lib\site-packages\vnpy\gateway\ctp\ctp_gateway.py(315): onRtnDepthMarketData

ValueError: time data '20210408 144919.0' does not match format '%Y%m%d %H:%M:%S.%f'

At:
C:\vnstudio\lib_strptime.py(359): _strptime
C:\vnstudio\lib_strptime.py(577): _strptime_datetime
C:\vnstudio\lib\site-packages\vnpy\gateway\ctp\ctp_gateway.py(315): onRtnDepthMarketData

在vnpy程序已经启动,并且CTA模块对应策略开始运行了。
如果在某些特殊情况,策略代码发生错误了。一般,在CTA界面上可以看到有报错提示。

1)某个策略错误,是否不影响其他策略的运行?
2)是否CTA模块在监测策略代码运行状态?什么位置可以获取这个错误。。。因为不一定随时都盯着界面看,想要及时知道报错发生了的话,在哪个地方可以增加一个处理:例如,在界面上报错的同时,发邮件微信或者做什么动作进行提醒?

谢谢

对一个未成交单进行撤单操作:cancel_order().想要知道撤单的处理结果,怎么能够的到呢?

1)在on_order() 里边好像也得不到回报? 好像"已撤单"状态可以收到. 但是如果撤单失败哪里得到??

2)撤单可能成功,也可能失败. 有各种原因的失败(比如, id报的不对; 单已被撤;等等) 这些错误信息又可以怎么获得?

谢谢

请问,关于延迟问题,有哪位大佬有分享代码可以参考吗? (之前好像有位大佬分享过代码,找不到了)

另外,想要分表存储(2.0以上版本不再支持?),有代码参考吗,谢谢

谢谢,是我自己把买卖开平那4个委托指令搞混淆了,所以转不出来。。。

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

沪公网安备 31011502017034号

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