Надеюсь, это легче читать, чем вчера. Попытка найти способ варьировать число периодов «N», которые измеряют «VOLATILITY» Код для полной функции, как было предложено вчера, приведен ниже и фиксирует «N» на 10. Функция прекрасно работает для KAMA со значением по умолчанию для «» N "(N0Addr и N1Addr не нужны в этой версии по умолчанию функции KAMA, но являются шагами для перехода к переменной" 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)))