Python 写的adx 指标代码有时候运行答案正确有时候不正确

def calculate_adx(high, low, close):
    up = high.diff()
    down = -low.diff()

    plus_array = []
    minus_array = []
    for index in up.index:
        if up.isna()[index] is True:
            plus_array.append(pd.NA)
        elif up[index] > down[index] and up[index] > 0:
            plus_array.append(up[index])
        else:
            plus_array.append(0)

    for index in down.index:
        if down.isna()[index] is True:
            minus_array.append(pd.NA)
        elif down[index] > up[index] and down[index] > 0:
            minus_array.append(down[index])
        else:
            minus_array.append(0)

    plus_dm = pd.Series(plus_array)
    minus_dm = pd.Series(minus_array)

    tr1 = pd.DataFrame(high - low)
    tr2 = pd.DataFrame(abs(high - close.shift(1)))
    tr3 = pd.DataFrame(abs(low - close.shift(1)))
    frames = [tr1, tr2, tr3]
    tr = pd.concat(frames, axis = 1, join = 'inner').max(axis = 1)
    tr = rma(tr)
    # print(tr)
    # plus_dm = 100 * rma(plus_dm) / tr
    # minus_dm = 100 * rma(minus_dm) / tr
    plus_dm = 100 * rma(plus_dm)
    minus_dm = 100 * rma(minus_dm)
    for index in plus_dm.index:
        plus_dm[index] = plus_dm[index] / tr[index]
        minus_dm[index] = minus_dm[index] / tr[index]
    sum = plus_dm + minus_dm
    sum[sum == 0] = 1
    adx = 100 * rma(abs(plus_dm - minus_dm) / sum)
    # print(sum)
    return adx

def rma(data):
    test = []
    sum = 0
    alpha = 1 / 12
    count = 0
    length = len(data)
    for index in range(0, length):
        if count < 11:
            if math.isnan(data.iloc[index]):
                test.append(np.nan)
                continue
            sum = sum + data.iloc[index]
            test.append(np.nan)
            count = count + 1
        elif count == 11:
            test.append(sum / 12)
            count = count + 1
        else:
            test.append(alpha * data[index] + (1-alpha) * test[-1])
    
    result = pd.Series(test)
    return result

如果你的ADX指标代码在不同时间执行时结果不一致,可能有以下几个原因:

  1. 输入数据不一致:ADX指标需要根据一定的时间序列数据进行计算。如果每次运行时输入的数据不同,例如时间范围、间隔或者数据本身的不同,那么结果可能会有所变化。

  2. 参数设置不准确:ADX指标通常有一些参数需要设置,例如移动平均周期长度、最小价格变动等。确保你在每次运行时使用相同的参数,否则结果可能有所不同。

  3. 代码逻辑错误:检查你的ADX指标代码是否有错误或逻辑问题,例如计算公式、边界条件或循环结构。确保你的代码能够正确地计算ADX指标,并且不依赖于外部因素。

  4. 随机性:在一些情况下,ADX指标的计算可能包含随机性或随机抽样。这可能导致每次执行时的结果略有不同。在此情况下,你可以尝试多次运行代码并对结果取平均值或进行统计分析。

在调试代码时,可以逐步检查以发现问题所在。例如,使用打印语句输出中间结果,验证计算逻辑的正确性,并确保输入数据和参数的一致性。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^