from vnpy.trader.constant import (Exchange, Interval)
import pandas as pd
from datetime import datetime, timedelta, timezone
# 中国时区是+8,对应参数hours=8
# 日本时区是+9,hours=9
utc_8 = timezone(timedelta(hours=8))
# 读取需要入库的csv文件,该文件是用gbk编码
imported_data = pd.read_csv('C:/cta_data/2020年1分钟数据(含主连)/a2001.csv',encoding='gbk')
# 将csv文件中 `市场代码`的 SC 替换成 Exchange.SHFE SHFE
imported_data['市场代码'] = Exchange.DCE
# 增加一列数据 `inteval`,且该列数据的所有值都是 Interval.MINUTE
imported_data['interval'] = Interval.MINUTE
# 明确需要是float数据类型的列
float_columns = ['开', '高', '低', '收', '成交量', '持仓量']
for col in float_columns:
imported_data[col] = imported_data[col].astype('float')
datetime_format = '%Y%m%d %H:%M:%S'
imported_data['时间'] = pd.to_datetime(imported_data['时间'],format=datetime_format)
# imported_data['时间'] = imported_data['时间'].dt.strftime('%Y%m%d %H:%M:%S') # 使用sqlite数据入库
# imported_data['时间'] = imported_data['时间'].replace(tzinfo=utc_8)
imported_data.columns = ['exchange','symbol','datetime','open','high','low','close','volume','成交额','open_interest','interval']
imported_data['symbol'] = 'a2001'
# imported_data.to_csv('C:/cta_data/tobe_into_library/a2001.csv',encoding='gbk',index=False)
from vnpy.trader.database import get_database
from vnpy.trader.object import (BarData,TickData)
database_manager = get_database()
# from vnpy.trader.database.database import Driver
def move_df_to_sqlite(imported_data:pd.DataFrame):
bars = []
start = None
count = 0
for row in imported_data.itertuples():
datetimes = row.datetime.replace(tzinfo=utc_8)
bar = BarData(
symbol=row.symbol,
exchange=row.exchange,
datetime=datetimes,
interval=row.interval,
volume=row.volume,
open_price=row.open,
high_price=row.high,
low_price=row.low,
close_price=row.close,
open_interest=row.open_interest,
gateway_name="DB",
)
bars.append(bar)
count += 1
if not start:
start = bar.datetime
end = bar.datetime
database_manager.save_bar_data(bars=bars)
print(f"Insert Bar: {count} from {start} - {end}")
move_df_to_sqlite(imported_data)
报错是:
(base) PS C:\veighna_studio\Lib\site-packages\vnpy_ctastrategy\strategies> & C:/veighna_studio/python.exe c:/veighna_studio/Lib/site-packages/vnpy_ctastrategy/strategies/into_library.py
Traceback (most recent call last):
File "C:\veighna_studio\lib\site-packages\peewee.py", line 3237, in execute_sql
cursor.execute(sql, params or ())
sqlite3.InterfaceError: Error binding parameter 2 - probably unsupported type.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "c:\veighna_studio\Lib\site-packages\vnpy_ctastrategy\strategies\into_library.py", line 72, in <module>
move_df_to_sqlite(imported_data)
File "c:\veighna_studio\Lib\site-packages\vnpy_ctastrategy\strategies\into_library.py", line 69, in move_df_to_sqlite
database_manager.save_bar_data(bars=bars)
File "C:\veighna_studio\lib\site-packages\vnpy_sqlite\sqlite_database.py", line 176, in save_bar_data
求大佬指点一二
真的很苦恼,自己手动改成load_bar就又报别的错
在vnpy客户端的数据库已经下好了日线和分钟线数据,vnpy是否可以分别加载和使用日线和分钟线数据呢,还是必须使用分钟线合成日线?? 困扰我好久了,求大佬解答
在on_bar_day 函数中读取不到日线数据
回测模式下