VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 12
声望: 0
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

求大佬指点一二

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

datetimes = row.datetime.replace(tzinfo=utc_8)

这里你的datetimes对象查下数据类型,猜测是pd.Timestamp,不是SQLite要求的datetime对象

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

沪公网安备 31011502017034号

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