量化分析入门9:backtrader策略入门1(数据处理),读取数据,并将数据格式化为backtrader的数据格式

#量化分析入门9:backtrader策略入门1(数据处理)
#读取数据,并将数据格式化为backtrader的数据格式(即DataFeeds形式)
#作者:冯德平(山野雪人)

import pandas_datareader.data as web
import datetime
import numpy as np
import pandas as pd

'''
#从网络(雅虎)读取数据5年(默认为5年)的股票数据:
#stock=web.get_data_yahoo("600797.SS")   #上交所股票用.SS,深交所用.SZ
#print(stock)
#读取某一时间到今天的数据:
start = datetime.datetime(2019,1,1)  #获取数据的时间段-起始时间
end = datetime.date.today()  #获取数据的时间段-结束时间
stock = web.DataReader("000002.SZ", "yahoo", start, end)  #获取万科的数据
#stock = web.DataReader("MSFT", "yahoo", start, end)  #获取微软的数据
#print(stock)
stock.columns=["high","low","open","close","volume","adj close"]   #修改列名(将字段开头字母小写)
#print(stock)
stock=np.round(stock,2)   #保留小数点两位
print(stock)
stock.to_csv("000002net.csv")

'''

#从文件中读取数据:
stock=pd.read_csv("000002net.csv")
stock.rename(columns={'Date':'datetime'},inplace=True)   #修改列名,将Date改成datetime
#print(stock)

'''
#也可以这样修改列名
stock["datetime"]=stock["Date"]   #复制Date列
del stock["Date"]   #删除Date列
'''

#注意下面的读取字段(列)与前面的顺序不同(按backtrader的列的顺序读取)
stock=stock[["datetime","open","high","low","adj close","volume"]]
stock.rename(columns={'adj close':'close'},inplace=True)   #修改列名,将adj close改成close
#print(stock)
#stock.insert(6, 'openinterest', np.zeros(1216))
#stock.insert(6, 'openinterest', np.zeros(len(stock)))
#print(stock)
#stock=pd.read_csv("MSFT.csv",index_col="datetime",parse_dates=["datetime"])[["datetime","open","high","low","close","volume"]]
#stock=stock.insert(5,column='openinterest',value=0)   #错!不要前面的“stock=”
stock.insert(6,column='openinterest',value=0)   #在第6列加入列名为openinterest的列,且其值=0
stock.reset_index()   # 所有的索引都改为列
#stock=stock[["datetime",'open','high','low','close','volume','openinterest']]
#set_index=stock["datetime"]   #设置索引值
print(stock)   #数据格式已经为backtrader的数据格式(即DataFeeds形式)
stock.to_csv("000002.csv",index=False)