dataframe 数据,如上图,需要数据入库SqliteDatabase,先已经将dataframe数据整理成BarData
入库如下:
_from vnpy.trader.database import BaseDatabase, get_database
database: BaseDatabase = get_database()
database.save_bardata(bars)
遇到这个时间戳转换问题,如何解决呢?
dataframe 数据,如上图,需要数据入库SqliteDatabase,先已经将dataframe数据整理成BarData
入库如下:
_from vnpy.trader.database import BaseDatabase, get_database
database: BaseDatabase = get_database()
database.save_bardata(bars)
遇到这个时间戳转换问题,如何解决呢?
版本太老了吧,综合升级到3.8.0试试
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楼添加了时区,如下图
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)试试
按照这个 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.
搞清楚了,记录下过程,本人爬到的数据以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)
建议先把数据处理成单一合约按时序排列的格式再导入试试看