VeighNa量化社区
你的开源社区量化交易平台
bill-wong's Avatar
Member
离线
35 帖子
声望: 1

七月雪 wrote:

bill-wong wrote:

xiaohe wrote:

默认是在用户目录下启动,自然是存到后面那个路径里。如果想存到前面那个路径,需要在C:/veighna_studio/启动
老师您好,抱歉又来打扰了。今天开盘出现了之前说的存不了数据的问题,我在每个关键节点都打印信息排查了一下,发现程序卡在sqlite_database.save_tick_data的upsert环节(一直卡住,重启后才正常),因此才会出现on_tick有数据但数据库里没有数据的情况。
我觉得可能的原因有两个:1、有别的程序占用了CPU资源导致写入数据这一步无法执行;2、有别的线程在读取sqlite(我确定没有别的写入线程,但有读取的线程),导致sqlite出错。
我IT基础比较弱,可能没有切中要害。请问您判断这个bug出现的原因可能是什么呢?谢谢!
程序一直卡在那个环节,指的是程序一直在运行吗,还是指整个电脑屏幕卡住了?其他电脑程序有没有受到影响?

一直在运行,只是写数据库的进程卡住了,行情接收之类的没收到影响。其他程序也没有受到影响。

MTF wrote:

bill-wong wrote:

我大概找到原因了,但不知道对不对,请大佬们指教:
我观察了下今天收到的数据,前10秒每个品种在每个时间戳都收到了4条重复的tick data,那么在入库的时候,用DbTickData.insert_many(c).on_conflict_replace().execute()批量存储的时候,如果c中有完全重复的数据,就会导致异常,无法执行操作。

  1. 数据库的去重主键,基于symbol、exchange、interval、datetime四个字段,如果完全重复就会去重覆盖
  2. 如果插入失败,正常也会抛出异常信息,而不会直接卡住了

目前用的就是默认SQLite吗?
是的,您说得对,今天又卡住了,不是重复数据问题。我用的是sqlite。目前不知道是什么原因了。

我大概找到原因了,但不知道对不对,请大佬们指教:
我观察了下今天收到的数据,前10秒每个品种在每个时间戳都收到了4条重复的tick data,那么在入库的时候,用DbTickData.insert_many(c).on_conflict_replace().execute()批量存储的时候,如果c中有完全重复的数据,就会导致异常,无法执行操作。

七月雪 wrote:

你确定是没有写入吗?先启动一下图形窗口,加载datamanager模块刷新一下,看看里面有没有数据
确定的,从一开始这个问题的表现就是ui界面行情数据能跳动,但database里没有数据,而且这个bug是偶发的,平均10天才发生一次
今天我打印了行情,发现刚开盘的10秒收到的tick数量是之前的4倍多,这也是触发bug的表面上的条件。

xiaohe wrote:

默认是在用户目录下启动,自然是存到后面那个路径里。如果想存到前面那个路径,需要在C:/veighna_studio/启动
老师您好,抱歉又来打扰了。今天开盘出现了之前说的存不了数据的问题,我在每个关键节点都打印信息排查了一下,发现程序卡在sqlite_database.save_tick_data的upsert环节(一直卡住,重启后才正常),因此才会出现on_tick有数据但数据库里没有数据的情况。
我觉得可能的原因有两个:1、有别的程序占用了CPU资源导致写入数据这一步无法执行;2、有别的线程在读取sqlite(我确定没有别的写入线程,但有读取的线程),导致sqlite出错。
我IT基础比较弱,可能没有切中要害。请问您判断这个bug出现的原因可能是什么呢?谢谢!

xiaohe wrote:

默认是在用户目录下启动,自然是存到后面那个路径里。如果想存到前面那个路径,需要在C:/veighna_studio/启动
谢谢老师,我可能有时候一时兴起用cmd启动veighna,没注意启动路径,导致了这个问题。我以后会多加注意,再次感谢!

xiaohe wrote:

是的
老师您好,我找到原因了。理论上数据默认会存进C:/veighna_studio/.vntrader/database.db中,但是他今天启动的时候却写进了C:/Users/xxx/.vntrader/database.db中。我不知道原因,感觉可能是之前的vnstation没有删干净,请问您感觉我出现的这个bug是什么原因呢?谢谢!

xiaohe wrote:

是的
谢谢您!所以遇到的问题是on_tick能收到数据,process_tick_event或save_tick_data环节可能出错,我现在已经在每个可能出错的步骤前打印tick了,等我下次遇到这个问题,排查清楚后再回到这篇帖子来汇报

xiaohe wrote:

如果on_tick收到了tick只是被update_tick过滤掉了可以通过调整process_tick_event函数调整,但是如果on_tick收不到tick那就没有办法了。还是需要先自己打印排查一下
请教一下:如果vntrader界面能正常显示行情跳动,是不是说明on_tick收到了tick?谢谢!

xiaohe wrote:

bill-wong wrote:

xiaohe wrote:

可以自己在process_tick_event函数里过滤掉非交易时段数据再试试看
这个问题我排查了很久,很难解决,因为他是间歇性出现的,10个交易日里可能会出现2~3次开盘录不进数据的问题。
您说的方法我之前已经这样做了,过滤掉非交易时间段的tick以及时间戳和本地时间相差一分钟以上的tick,但仍未完全解决这个问题。
有可能这是我特有的问题,但是他不报错,我就不知道该如何排查,请问有推荐的排查方案吗?谢谢!
在bargenerator的update_tick函数下的if self.last_tick and tick.datetime < self.last_tick.datetime逻辑里打印,如果走到这里了,打印一下tick.datetime和self.last_tick.datetime
抱歉又打扰了,今天再次发生卡顿,并且没有走到if self.last_tick and tick.datetime < self.last_tick.datetime逻辑里。为了对比,我在本地电脑和云服务器里用相同的环境、相同的穿透式接入账号来录制行情。
现象是这样的:本地电脑可以正常显示行情跳动,但是没有合成1分钟bar,dbtickdata数据库里也没有东西;但是云服务器里在同样的配置环境下可以正常录制tick数据和合成1分钟线。
所以我感觉应该是网络问题,但我不知道应该如何解决这个问题,因为本地没有录到tick数据(数据库里没有行情,但vntrader界面行情跳动是正常的)。请问您有推荐的解决方案吗?谢谢!

xiaohe wrote:

可以自己在process_tick_event函数里过滤掉非交易时段数据再试试看
这个问题我排查了很久,很难解决,因为他是间歇性出现的,10个交易日里可能会出现2~3次开盘录不进数据的问题。
您说的方法我之前已经这样做了,过滤掉非交易时间段的tick以及时间戳和本地时间相差一分钟以上的tick,但仍未完全解决这个问题。
有可能这是我特有的问题,但是他不报错,我就不知道该如何排查,请问有推荐的排查方案吗?谢谢!

解决了吗?我用3.2.0版本出现同样的问题,开盘data_manager里没有正常存储数据,但ui界面的数据跳动是正常的,要盘中重启vntrader后才可以正常存储数据。会不会是订阅合约太多导致的?

有原 wrote:

请升级到最新版本试试看。
感谢指导,升级到2.7.0后有很多不兼容,我打算单独升级需要升级的包,请问想要解决这个问题,哪些包需要升级?目前我升级了vnpy_ctp和vnpy_datamanager。谢谢!

xiaohe wrote:

请问你的vnpy_ctp的版本是?
您好,我是直接安装的vnstation2.6.0版本

rt,今天早上(11月12日早上)检查数据时发现,录到了11月12日晚上的数据(也就是未来数据),检查了下发现tick级数据的时间戳就是未来的,请问这是出现了什么问题?谢谢!
description

xiaohe wrote:

那请把vnpy_datarecorder.ui.widget的set_interval的self.recorder_engine.interval改成self.recorder_engine.timer_interval试试看
解决了,非常感谢!

用Python的交易员 wrote:

请使用DataManager查看数据内容
不好意思,追问一下:在用dolphindb的时候,我的”数据管理“模块里没有数据,但是切换成sqlite的时候就可以正常录制了,”数据管理“模块里也显示了新录制的数据,请问是什么原因呢?
还有一个奇怪的现象,就是昨晚我把数据库从sqlite切换成dolphindb的时候,dolphindb居然成功录下了第一个bar,但是之后的数据都没有在录,如图:

description

用Python的交易员 wrote:

bill-wong wrote:

如题,我在VN trader里的“行情记录”界面,手动将写入间隔改成1秒,读取数据时发现写入间隔仍然是10秒,请问如何解决?谢谢!

请问用的是最新的2.6.0版本吗?
是的

如题,我在VN trader里的“行情记录”界面,手动将写入间隔改成1秒,读取数据时发现写入间隔仍然是10秒,请问如何解决?谢谢!

“录制不到”意思是dolphindb和VN trader的数据管理模块里都没有数据

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

沪公网安备 31011502017034号

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