废话不多,直接上代码

        

        

        

        

        

        

如果您没时间,这个函数您可以直接拿去用了

如果您想知道我之所以这样写的原因,可以往下看:

第一行很简单,np.cumsum是逐项累加的意思

举个例子:

a1=np.array([1,2,3,4,5])

a2=np.cumsum(a1)

所以a2就是[  1,3,6,10,15]

那这里为什么要逐项累加呢?

因为我们要求移动均线嘛,均线嘛,当然要先求和,再求平均啦

第二行,mov[n:]=mov[n:]-mov[:-n]怎么理解?

我举个例子吧,

假如array=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],n=5(炒股的人都懂吧,n=5,求出来的结果就是5日线),

那么,

mov=[  1,3,6,10,15,21,28,36,45,55, 66,78,91,105,120] ,

mov[n:]=[21,28, 36,45,55,66,78,91,105,120],即从index=5的数开始往后取,也就是说舍弃了前5个数,

mov[:-n]=[1,3,6,10,15,21,28,36,45,55],即从index=-6的数开始往前取,也就是说舍弃了后5个数。

  • 那mov[n:]-mov[:-n]怎么理解呢?为什么要相减?

        因为5日线啊,我们只要最近5天的股价之和,再往前的数我们就不要了。

        而cumsum把从开始到结束所有的项目都逐个累加。

        所以我们在第6天的时候,就要把数组里累加了1天的值减掉;

        在第7天的时候,就要把数组里累加了2天的值减掉;

        在第8天的时候,就要把数组里累加了3天的值减掉;

        …………

        在最后一天的时候,就要把数组里累加到了倒数第6天(也就是-5,即mov[-n])的值减掉。

        发现规律了没?错位就是5,就是那个n,每天都要减去往前5天的累加值。

        所以mov[n:]很好理解,就是从第6天开始取每天累加的值,

        mov[:-n]就是从第1天开始取每天累加的值一直到倒数第6天。

        所以mov[n:]-mov[:-n]什么意思呢?

        因为mov[n:]把mov的前5个数都不取,所以

        mov[n:]的第1项就是累加了6天的值,

        第2项就是累加了7天的值,以此类推。

        所以mov[n:]-mov[:-n],每个对应位置相减,正好就是:

        [(第6天的累加值-第1天的累加值),(第7天的累加值-第2天的累加值),……,(最后一天的累加值-倒数第6天的累加值)]

        也就是移动的最近5天的股价之和

        是不是突然就豁然开朗了?

  • 那mov[n:]=mov[n:]-mov[:-n]怎么理解?为什么要把移动的最近5天的股价之和,放回原累加和的数组?

        因为前5个数,对于我们来说还有用的。 我们之所以从第6天往后的数拿出来处理,是因为前面5天,都没超过5天,所以不需要处理

第三行,mov[(n-1):]/n怎么理解呢?

        /n很好理解,我们要求5日均线嘛,所以当然要除以5。

        那为什么分子是mov[(n-1):],而不是mov[n:]?

        注意这里mov[(n-1):]是指从第5(index=4)项(包括第5项)开始往后的所有项。

        虽然我们从第6天的累加值开始处理,但实际上第5天就开始,它的累加值除以5就有意义啦!

        不信我们打开新股金龙鱼来看,是不是上市的第5天开始出现5日线了?

所以以上就是为什么这样写的原因,而这样写,也明显运行起来更快。