计算多个移动平均交叉

问题描述

我想计算多个移动平均交叉点。

我的目标是从空头 = 20 和多头 = 21 开始。一旦空头移动平均线穿过多头,我将在特定基础上做多。我想将 long 变量从 21 增加到 200,然后从头开始使用 short = 21 和 long = 22 并重复该过程。

我的嵌套循环如下所示:

#Calculate moving averages first
for GD in range(20,200,1):
    aapl[GD] = aapl.Adj_Close.rolling(GD).mean()

#Calculate MA crossovers
short = 20
long = 21
while short < 200:
    while long < 200:
        aapl[short,long] = np.where(aapl[short] > aapl[long],1,0)
        long = long + 1
    short = short + 1

如何更改代码,使嵌套循环重复执行,直到计算出所有可能的交叉?

解决方法

您需要在外循环的每次迭代中重置 long。设置一次不行,每次都要设置。我猜你希望它比 short 大 1,所以像这样:

short = 20
while short < 200:
    long = short + 1
    while long < 200:
        aapl[short,long] = np.where(aapl[short] > aapl[long],1,0)
        long = long + 1
    short = short + 1

然后您可以通过使用 for 循环遍历范围来简化这两个循环。单个 for 循环将在一行中处理初始化、循环和递增循环变量。

for short in range(20,200):
    for long in range(short + 1,200):
        aapl[short,0)