首页 > 解决方案 > 两 (2) 个范围内差异的绝对值 - 第 II 部分

问题描述

希望这比昨天更容易阅读。试图找到一种方法来改变测量“波动率”的周期数“N”昨天建议的完整函数的代码如下,并将“N”固定为 10。函数对 KAMA 工作得很好,默认值为“ N”(在此 KAMA 函数的默认版本中不需要 N0Addr 和 N1Addr,但它们是获取变量“N”的步骤)

此公式适用于 Excel:

=SUMPRODUCT((ABS(I26:I36-I25:I35)))

我还可以获得两个范围内差异的正确总和,但不能获得绝对值。此 VBA 代码使用命名范围“N0Addr”和“N1Addr”执行此操作:

Rng0 = WorksheetFunction.Sum(Range(N0Addr)) - WorksheetFunction.Sum(Range(N1Addr))

Function nTEST(Price, nPer, mPer, N)        
    'Variables
    Fast = 2 / (nPer + 1)
    Slow = 2 / (mPer + 1)


    'One(1) Prior Period Calculation
    nTEST1 = Application.Caller.Offset(-1)

    N0Addr = Application.WorksheetFunction.Concat(Price.Offset(-N, 0).Address & ":" & Price.Address)
    N1Addr = Application.WorksheetFunction.Concat(Price.Offset(-(N + 1), 0).Address & ":" & (Price.Offset(-1, 0).Address))

    'Change Formula (Y - Yn)
    E = Abs(Price - Price.Offset(-N, 0))

    'Volatility Formula { =SUM(ABS(Y:Yn)-(Y1:Yn1))) }
    'VOLATILITY (N = 10)
    '1-10
    R = Abs(Price - Price.Offset(-1, 0)) + Abs(Price.Offset(-1, 0) - Price.Offset(-2, 0)) _
         + Abs(Price.Offset(-2, 0) - Price.Offset(-3, 0)) _
        + Abs(Price.Offset(-3, 0) - Price.Offset(-4, 0)) + Abs(Price.Offset(-4, 0) - Price.Offset(-5, 0)) _
        + Abs(Price.Offset(-5, 0) - Price.Offset(-6, 0)) + Abs(Price.Offset(-6, 0) - Price.Offset(-7, 0)) _
        + Abs(Price.Offset(-7, 0) - Price.Offset(-8, 0)) + Abs(Price.Offset(-8, 0) - Price.Offset(-9, 0)) _
        + Abs(Price.Offset(-9, 0) - Price.Offset(-10, 0))

    'EFFICIENCY RATIO
    ER = E / R

    Smooth = (ER * (Fast - Slow) + Slow) ^ 2

    'Formula Calculation
    nKAMA = Smooth * Price + (1 - Smooth) * nKAMA1

End Function

寻找一个 VBA 公式或方法来输入可以在 N 个周期内变化的“波动性”的工作公式。我可以得到差异的总和,但不能得到绝对差异的总和。

Rng0 = WorksheetFunction.Sum(Range(N0Addr)) - WorksheetFunction.Sum(Range(N1Addr))

我也可以在 Excel 中输入一个公式来完成提供绝对差的总和。

=SUMPRODUCT((ABS(I26:I36-I25:I35)))

标签: excelvbarange

解决方案


推荐阅读