计算多个移动平均线交叉

Calculate multiple moving average crossovers

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

我的目标是从空头 = 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,long] = np.where(aapl[short] > aapl[long],1,0)