经济周期是一种理论认为诸如股票市场的波动具有周期性, 那么我们能不能通过分析A股指数来得到具体的周期大小呢?
假设我们和前面一篇文章一样, 利用tushare获得了A股指数的每日收盘价格。我们作如下步骤来利用MMA计算其波动周期:
-
导入A股指数的日期和收盘价格
SetDirectory["E:\\cygwin64 \\home\\van\\development\\stock"]; data = Import["AS_index.csv"]; data[[1 ;; 2]] // TableForm
输出为
date date high low close volume amount 2018-06-28 2959.67 2913.97 2918.64 11821880600 129596964939 -
计算每月的平均值
t = data[[2 ;;, 1]]; stdt = ToExpression@StringSplit[#, "-"] & /@ t; stdt[[1 ;; 2]] v = data[[2 ;;, 5]]; tv = Transpose[{Cases[stdt, {x_, y_, z_} -> {x, y, 1}], v}]; gatherByDate = GatherBy[tv, First]; stdData = Table[{x[[1, 1]], N[Mean[x[[All, -1]]]]}, {x, gatherByDate}]; DateListPlot[stdData]
这里的过程是, 首先
stdt
表示将日期转换为标准的{2018,6,29}
这样的格式; 然后将月份统一变成同一个月的第一天Cases[stdt, {x_, y_, z_} -> {x, y, 1}]
接着我们将新的数据按照相同的月份来收集(
A股指数月平均图GatherBy
), 最后我们计算了同一个月A股收盘价格的平均值并作图。
-
利用离散Fourier变换绘制频谱图
{montht, monthMeanv} = Transpose[stdData]; DateListPlot[Transpose[{montht, Abs[Fourier[monthMeanv]]}], PlotRange -> Full]
得到按照日期的频谱图
A股指数月平均日期频谱图
或者按照数据顺序的频谱图
ListLinePlot[Abs[Fourier[Reverse@monthMeanv]], PlotRange -> Full]
A股指数月平均数据顺序频谱图
由此可见, A股指数并没有明显的周期性。
网友评论