VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 104
声望: 5

description

description

dataframe 数据,如上图,需要数据入库SqliteDatabase,先已经将dataframe数据整理成BarData
入库如下:

_from vnpy.trader.database import BaseDatabase, get_database
database: BaseDatabase = get_database()
database.save_bardata(bars)

description
遇到这个时间戳转换问题,如何解决呢?

Member
avatar
加入于:
帖子: 1486
声望: 105

版本太老了吧,综合升级到3.8.0试试

Member
avatar
加入于:
帖子: 104
声望: 5

MTF wrote:

版本太老了吧,综合升级到3.8.0试试

应该不是版本问题,现在是3.7.0版本

Member
avatar
加入于:
帖子: 4739
声望: 287

是你datetime类型的问题,可参考https://www.vnpy.com/forum/topic/4137-qing-jiao-:-csvwen-jian-yong-jiao-ben-dao-ru-sqlitebao-cuo-shi-qu-fang-mian

Member
avatar
加入于:
帖子: 104
声望: 5

xiaohe wrote:

是你datetime类型的问题,可参考https://www.vnpy.com/forum/topic/4137-qing-jiao-:-csvwen-jian-yong-jiao-ben-dao-ru-sqlitebao-cuo-shi-qu-fang-mian
按照原贴12,13楼添加了时区,如下图

description

from vnpy.trader.database import BaseDatabase, get_database
insert into database
database: BaseDatabase = get_database()
database.save_bar_data(bars)

但按照这种方法入库,报错,Error binding parameter 2 - probably unsupported type.检查了下只有枚举类型,时间戳,float数据类型都能对得上;
现在这个sqlite_manager怎么创建的?我换成sqlite_manager.save_bar_data(bars)试试

Member
avatar
加入于:
帖子: 104
声望: 5

按照这个 Debug过程请参考 https://github.com/Yiran13/Strategies/tree/master/debug_process ,bardata中datetime要储存为str形式,可把datetime变成str形式,database.save_bar_data(bars)入库sqlite时候,报错AttributeError: 'str' object has no attribute 'astimezone'; 如果datetime变成Timestamp形式存储,报错InterfaceError: Error binding parameter 2 - probably unsupported type.

Member
avatar
加入于:
帖子: 104
声望: 5

搞清楚了,记录下过程,本人爬到的数据以dataframe形式缓存,其中日期是str形式存储,按照论坛内容转换df["date"] = pd.to_datetime(df["date"],format = '%Y%m%d %H:%M:%S'),此时日期时间存储形式是Timestamp(时间戳),且没有时区属性, 而bardata 入sqlite 需要以带有时间戳的datetime形式存储,所以需要增加时区属性,同时将Timestamp形式变成datetime形式;合成bardata时处理如下:
datetime = datetime.fromtimestamp(int(row.datetime.timestamp()),pytz.timezone('Asia/Shanghai'));
因为sqlite 版本不同,时间存储Timestamp,datatime形式有区别,参考 https://baijiahao.baidu.com/s?id=1671113933155288895&wfr=spider&for=pc

我的数据是交易所每个交易日所有合约开盘、最高、最低、收盘等数据,而不是按照单一合约按照交易日排序的数据,直接用下面的方法入库,看了下数据库dbbardata入了所有数据,但映射到dbbaroverview 就不是每个合约按照日期排序,清空dbbaroverview数据,在数据管理窗口刷新下,才能映射成功,
1.有什么方法可以直接入库映射成功呢?
2.本地sqlite数据库存储了数据,且映射成功,在cta策略窗口,在不接入rqdata情况下,执行初始化依然没有历史数据初始化,这个初始化难道不是先从sqlite数据库读历史数据?
3.接入的rqdata数据,通过vnstation界面,cta策略初始化的数据,在数据库里面都没找到,这个初始化数据存储在哪儿呢?
from vnpy.trader.database import BaseDatabase, get_database
database: BaseDatabase = get_database()
database.save_bar_data(bars)

Member
avatar
加入于:
帖子: 4739
声望: 287

建议先把数据处理成单一合约按时序排列的格式再导入试试看

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

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