我觉得凡是做一个什么研究,首先要求的是可复现性,所以我很看不起学校里的一些实验,用的都是一些指定的器材和实验环境,每个人做出来的东西别人都很难复现,就不知道到底是编的数据还是真的数据(毕竟发论文的人谁没编过数据呢?应该有,但是我没见过好吧)
首先先找一下数据集,这个网上有一些是有现成的了,不过要找到具体的还是有些小难度。
数据集可以获取的网站
http://www.wstock.net/wstock/services.htm国内的网站
这个网站需要下他一个app进行数据解码
https://unibit.ai/signup国外的网站
这个网站需要,积分进行下载,所以要先找到dia这个名字,再通过它里面的一个下载url进行下载,格式要选csv不然用json直接就给你跳一个网页出来,那个是用于api程序下载的。
这个网站上基本上我要的数据都有了,但是这个网站一个月只有50k的免费分,所以可能要多几个账号。
首先我们先来看看道琼斯指数,道琼斯指数是一个综合指数,如果我们要追踪它,必须要先找到一个标的,也就是它的ETF,它的ETF叫SPDR Dow Jones Industrial Average ETF(DIA),隶属于一个专门交易ETF的市场NYSEARCA。
数据处理
然后我们把数据下下来进行一个处理:
这俩数据集看起来其实还是有一些格式上的不一样的,毕竟是从两个不同的网站下的,在时间这一行的不一样会导致判断条件的失败。
我就把这个数据处理的代码贴一下。
#读数据
dia_data = pd.read_csv("../data/dia_data.csv")
szzz_data = pd.read_csv("../data/399106_data.csv")
szzz_data['date']= pd.to_datetime(szzz_data['Date'])
dia_data['date']=pd.to_datetime(dia_data['date'])
#处理名称问题
szzz_data.rename({'Open':'sz_open','High':'sz_high','Low':'sz_low','Close':'sz_close','Volume':'sz_volume'},inplace=True,axis='columns')
szzz_data.drop({'Date','Amount'},axis=1,inplace=True)
dia_data.drop({'adj close','ticker'},axis=1,inplace=True)
#数据时间选取
dia_data.rename({'open':'dia_open','high':'dia_high','low':'dia_low','close':'dia_close','volume':'dia_volume'},inplace=True,axis='columns')
szzz_data=szzz_data[szzz_data['date']>='2012-01-02']
#数据格式整理
dia_data=dia_data[dia_data['date']<='2020-02-28']
dia_data=dia_data.iloc[::-1] #反转df
#设置统一index,这样使用concat函数才能成功
szzz_data.set_index('date',inplace=True)
dia_data.set_index('date',inplace=True)
#整合两个表,做na值处理,因为有些时间中国交易美国不交易,美国交易中国不交易,使用的填充方法是向上填充,就是用前一天或者几天的填充下面的数据
combined_data = pd.concat([dia_data,szzz_data],axis=1)
combined_data = combined_data.fillna(method='ffill')
print(combined_data)
#再把新的这个表存起来
combined_data.to_csv('data.csv')
这样就得到了一个可以使用的数据表了。
结果
我选取了开高收低四个选项,然后统一了时间格式,选取了2012-1-3~2020-2-28的数据进行训练和测试。