AD:(本人录制的backtrader视频课程,大家多多支持哦~ https://edu.csdn.net/course/detail/9040)
无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。教程链接:https://www.cbedai.net/qtlyx
上次我们讲述了strategy的完整生命周期,并引入了一个indicator。今天,我们先讲述几个零碎的知识点,然后正式编写一个SSA策略,包括indicator的编写和策略的回测。
1.关于data
1.1datafeed
在一开始我们就讨论过datafeed,也就是cerebro的本源,数据。我们看一下上次我们的策略是怎么来的。
dataframe = pd.read_csv('dfqc.csv', index_col=0, parse_dates=True)
dataframe['openinterest'] = 0
data = bt.feeds.PandasData(dataname=dataframe,
fromdate = datetime.datetime(2015, 1, 1),
todate = datetime.datetime(2016, 12, 31)
)
# Add the Data Feed to Cerebro
cerebro.adddata(data)
我们的数据是从一个dfqc的csv文件里面来的,这里,可能大家没有这个数据,之前上传的csdn,不只是还没通过还是怎么的。今天就把他存到百度云,大家有需要的可以自行下载。这是东风汽车的股票数据,是从wind上获取的。大家没有wind也可以用tushare之类的免费api获得。
链接:http://pan.baidu.com/s/1slnULbv 密码:wi3k
文件里面的数据大概是这样的:
2014-03-13 00:00:00.005,1.425,1.434,1.449,1.418,457767208.0
2014-03-14 00:00:00.005,1.429,1.422,1.436,1.416,196209439.0
2014-03-17 00:00:00.005,1.433,1.434,1.437,1.422,250946201.0
2014-03-18 00:00:00.005,1.434,1.425,1.437,1.424,245516577.0
2014-03-19 00:00:00.005,1.423,1.419,1.423,1.406,331866195.0
2014-03-20 00:00:00.005,1.412,1.408,1.434,1.407,379443759.0
2014-03-21 00:00:00.005,1.406,1.463,1.468,1.403,825467935.0
dataframe = pd.read_csv('dfqc.csv', index_col=0, parse_dates=True)
大家注意我们把csv读入pandas的参数,index_col=0表示第一列时间数据是作为pandas 的index的,parse_dates=Ture是自动把数据中的符合日期的格式变成datetime类型。为什么要这样呢?其实读入后的pandas长怎么样都是由backtrader规定的。
1.2 strategy中的data
大家不知道有没有注意,strategy的初始化函数(init)中,
self.dataclose = self.datas[0].close
有这样一句。在backtrader中,self.datas[0] 与self.data是等价的,换句话说,同一个东西不同的叫法罢了。为什么会有前面这种,笔者认为,backtrader应当可以支持多个datafeed,目前还没有使用到,先按下不表。
看看前面的pandas的要求的结构,我们就知道,不仅仅有self.datas[0].close,还会有self.datas[0].open。也确实如此。只是我们通常拿close作为一个价格基准罢了。这里,
self.datas[0].close
返回的是一个lines。lines是backtrader一个很重要的概念,我们可以理解为时间序列流,这类数据,后面可以跟index,也就是说,可以有
self.datas[0].close[0]
self.datas[0].close[1]
self.datas[0].close[-1]
等等,但是这里的index是有意义的,0代表当前时刻,-1代表前一时刻,1代表后一时刻,一次类推。
所以在next中使用self.dataclose[0],self.dataclose[-1]就很好理解了。
2.SSA
接下来,开始进入完整的一个策略的研究,同时学习编写一个indicator。
SSA就是奇异谱分析。
奇异谱分析是近年来兴起的一种研究非线性时间序列数据的强大的方法。它根据所观测到的时间序列构造出轨迹矩阵,并对轨迹矩阵进行分解、重构,从而提取出代表原时间序列不同成分的信号,如长期趋势信号、周期信号、噪声信号等,从而对时间序列