变通解决方法:将bardata时间偏离设置为7小时54分。即utc_86 = timezone(timedelta(hours=7,minutes=54)),这样读取出来的数据分钟就是正常的了
csv导入MongoDB代码如下:
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)
from datetime import datetime, timedelta, timezone
# 中国时区是+8,对应参数hours=8
# utc_8 = timezone(timedelta(hours=8))
utc_86 = timezone(timedelta(hours=7,minutes=54))#变通
# datetime=row.datetime.replace(tzinfo=utc_8)
import pytz
tz = pytz.timezone('Asia/Shanghai')
print('tz=',tz)
# 封装函数
def move_df_to_mongodb(imported_data:pd.DataFrame,collection_name:str):
bars = []
start = None
count = 0
for row in imported_data.itertuples():
bar = BarData(
symbol=row.symbol,
exchange=row.exchange,
# datetime=tz.localize(row.datetime),
datetime=row.datetime.replace(tzinfo=utc_86),
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
print ('start=',start)
end = bar.datetime
# insert into database
database_manager.save_bar_data(bars,collection_name)
print(f'Insert Bar: {count} from {start} - {end}')
if __name__ == "__main__":
# 读取需要入库的csv文件,该文件是用gbk编码
imported_data = pd.read_csv('IH99_20101127_20201127_2.csv',encoding='gbk')
# 将csv文件中 `市场代码`的 SC 替换成 Exchange.SHFE SHFE
imported_data['exchange'] = Exchange.CFFEX
# 增加一列数据 `inteval`,且该列数据的所有值都是 Interval.MINUTE
imported_data['interval'] = Interval.MINUTE
# 明确需要是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)
品种代码='IH9902'
imported_data['symbol'] = 品种代码
# 因为没有用到 成交额 这一列的数据,所以该列列名不变
# imported_data.columns = ['exchange','symbol','datetime','open','high','low','close','volume','成交额','open_interest','interval']
# imported_data = imported_data.rename(index=str,
# columns={"时间": "datetime",
# "KQ.i@CFFEX.T.high": "high",
# "KQ.i@CFFEX.T.low": "low",
# "KQ.i@CFFEX.T.close": "close",
# "KQ.i@CFFEX.T.volume": "volume",
# "KQ.i@CFFEX.T.close_oi": "open_interest",
# })
# 筛选展示的列名
# imported_data = imported_data[["datetime","open", "high", "low", "close", "open_interest", "volume"]]
print('//',imported_data.head(1).append(imported_data.tail(1)),"//")
move_df_to_mongodb(imported_data,品种代码)
+
+
+
+