VeighNa量化社区
你的开源社区量化交易平台
tianxinfeng's Avatar
Member
离线
2 帖子
声望: 0

xiaohe wrote:

你的exchange是一个str,没有value。检查一下格式吧
谢谢,好像是格式问题,虽然我赋值的时候是类属性,但是我没有直接导入,而是重新写回了CSV文件,结果写回之后变成了str类,这点我还没搞明白。
现在又有新问题了,
```
from vnpy.trader.constant import (Exchange, Interval)
import pandas as pd
from vnpy.trader.database import database_manager
from vnpy.trader.object import (BarData, TickData)

封装函数

def move_df_to_mongodb(imported_data: pd.DataFrame):
bars = []
start = None
count = 0

for row in imported_data.itertuples():

    bar = BarData(
        symbol=row.symbol,
        exchange=row.exchange,
        datetime=row.datetime,
        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)

    # do some statistics
    count += 1
    if not start:
        start = bar.datetime
end = bar.datetime

# insert into database
database_manager.save_bar_data(bars)
print(f'Insert Bar: {count} from {start} - {end}')


if name == "main":
datatype = 1 # 1分钟数据用,2日线数据用

csvfilepath = 'e:\\test\\1test.csv'
# 读取需要入库的csv文件,该文件是用gbk编码
imported_data = pd.read_csv(csvfilepath, encoding='gbk')
# 将csv文件中 `市场代码`的 SC 替换成 Exchange.SHFE SHFE
imported_data.loc[imported_data['exchange'].values == 'SSE', 'exchange'] = Exchange.SSE
imported_data.loc[imported_data['exchange'].values == 'SZSE', 'exchange'] = Exchange.SZSE
imported_data.loc[imported_data['exchange'].values == 'CFFEX', 'exchange'] = Exchange.CFFEX
# 增加一列数据 `inteval`,且该列数据的所有值都是 Interval.MINUTE
if datatype == 1:
    imported_data['interval'] = Interval.MINUTE
elif datatype == 2:
    imported_data['interval'] = Interval.DAILY
# 明确需要是float数据类型的列
float_columns = ['open', 'high', 'low', 'close', 'volume', 'open_interest']
for col in float_columns:
    imported_data[col] = imported_data[col].astype('float')
# 明确时间戳的格式
# %Y/%m/%d %H:%M:%S 代表着你的csv数据中的时间戳必须是 2020/05/01 08:32:30 格式
datetime_format = '%Y/%m/%d %H:%M:%S'
imported_data['datetime'] = pd.to_datetime(imported_data['datetime'], format=datetime_format)
# 因为没有用到 成交额 这一列的数据,所以该列列名不变
imported_data.columns = ['exchange', 'symbol', 'name', 'datetime', 'open', 'high', 'low', 'close', 'volume',
                         'open_interest','interval']

move_df_to_mongodb(imported_data)

```
我因为是导入A股数据,本地时间格式2021/6/1 9:31:00 这样的,csv格式如下

description

VNPY的版本是2.3,现在出了
Traceback (most recent call last):
File "D:/study/论坛的入库程序.py", line 68, in <module>
move_df_to_mongodb(imported_data)
File "D:/study/论坛的入库程序.py", line 37, in move_df_to_mongodb
database_manager.save_bar_data(bars)
File "D:\Python\Miniconda3\lib\site-packages\vnpy\database\mongodb\mongodb_database.py", line 163, in save_bar_data
bar.datetime = convert_tz(bar.datetime)
File "D:\Python\Miniconda3\lib\site-packages\vnpy\trader\database.py", line 20, in convert_tz
dt = dt.astimezone(DB_TZ)
File "pandas/_libs/tslibs/timestamps.pyx", line 884, in pandas._libs.tslibs.timestamps.Timestamp.tz_convert
TypeError: Cannot convert tz-naive Timestamp, use tz_localize to localize

我看到楼上有兄弟同样的问题说是换了下时间格式可以了,麻烦问下,我这种情况,时间格式应该用什么的?
补充:我后来又print了一下datetime字段 print(imported_data['datetime'])
居然显示是3359 2021-06-09 15:00:00
Name: datetime, Length: 3360, dtype: object
于是后来我又试着把 # 明确时间戳的格式

# %Y/%m/%d %H:%M:%S 代表着你的csv数据中的时间戳必须是 2020/05/01 08:32:30 格式
datetime_format = '%Y/%m/%d %H:%M:%S'

这句修改成datetime_format = '%Y-%m-%d %H:%M:%S' 结果依然报错TypeError: Cannot convert tz-naive Timestamp, use tz_localize to localize
甚至也改过datetime_format = '%Y%m%d %H:%M:%S' 还是不对
我也不知道怎么办了,麻烦哪位能帮我解答一下,谢谢

Traceback (most recent call last):
File "d:/study/论坛的入库程序.py", line 43, in <module>
move_df_to_mongodb(imported_data)
File "d:/study/论坛的入库程序.py", line 26, in move_df_to_mongodb
gateway_name="DB",
File "<string>", line 14, in init
File "D:\Python\Miniconda3\lib\site-packages\vnpy\trader\object.py", line 99, in post_init
self.vt_symbol = f"{self.symbol}.{self.exchange.value}"
AttributeError: 'str' object has no attribute 'value'
奇怪我的报错为啥和别人不同?版本2.3

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

沪公网安备 31011502017034号

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