Коллеги, столкнулся со следующей проблемой:
АДХ, который я считаю на достаочно длинных периодах при явно гладких значения дает локальные всплески. Например
20 20 20 21 20 20 20
Конечные значения почти всегда сходятся с Quik, но вот эта лишняя/недостающая единица ломает всю мою стратегию.
Я склоняюсь к неправильному сглаживанию с моей стороны, Воможно что-то не учитываю или есть проблемы округлеения.
Делаю следующим образом:
All prices rounded bye 2 (ex. round(price,2)
1. First the positive and the negative derectional movement is calculated - +DMj and -DMj
if Highj > Highj-1, then +DMj = Highj - Highj-1, otherwise +DMj = 0
if Lowj < Lowj-1, then -DMj = Lowj-1 - Lowj, otherwise -DMj = 0
The lesser of +DMj and -DMj is set to zero; if they are equal, both are set to zero.
round(DM, 6)
2. True range is calculated - TRj
TRj = max( |Lowj - Closej-1|, |Highj - Closej-1|, |Highj - Lowj| )
round(TR,6)
3. A positive and negative directional index is calculated - + and -DIj
if TRj = 0, then +SDIj = 0, -SDIj = 0,
if TRj ? 0, then +SDIj = +DMj / TRj; -SDIj = -DMj / TRj
round(SDI,6)
By smoothing +SDI and -SDI with exponential moving average (EMAve), get +DIj and -DIj
+DIj = EMAvej(+SDI, N)
-DIj = EMAvej(-SDI, N)
round(DI,6)
4. Calculate average directional movement - ADXj. First calculate directional movement DXj:
DXj = (|+DIj - -DIj| / |+DIj + -DIj|) ? 100
round(DX,6)
By averaging DX find ADX:
ADXj = EMAvej(DX, N)
round(ADX) -> final
У кого какие мысли?
АДХ, который я считаю на достаочно длинных периодах при явно гладких значения дает локальные всплески. Например
20 20 20 21 20 20 20
Конечные значения почти всегда сходятся с Quik, но вот эта лишняя/недостающая единица ломает всю мою стратегию.
Я склоняюсь к неправильному сглаживанию с моей стороны, Воможно что-то не учитываю или есть проблемы округлеения.
Делаю следующим образом:
All prices rounded bye 2 (ex. round(price,2)
1. First the positive and the negative derectional movement is calculated - +DMj and -DMj
if Highj > Highj-1, then +DMj = Highj - Highj-1, otherwise +DMj = 0
if Lowj < Lowj-1, then -DMj = Lowj-1 - Lowj, otherwise -DMj = 0
The lesser of +DMj and -DMj is set to zero; if they are equal, both are set to zero.
round(DM, 6)
2. True range is calculated - TRj
TRj = max( |Lowj - Closej-1|, |Highj - Closej-1|, |Highj - Lowj| )
round(TR,6)
3. A positive and negative directional index is calculated - + and -DIj
if TRj = 0, then +SDIj = 0, -SDIj = 0,
if TRj ? 0, then +SDIj = +DMj / TRj; -SDIj = -DMj / TRj
round(SDI,6)
By smoothing +SDI and -SDI with exponential moving average (EMAve), get +DIj and -DIj
+DIj = EMAvej(+SDI, N)
-DIj = EMAvej(-SDI, N)
round(DI,6)
4. Calculate average directional movement - ADXj. First calculate directional movement DXj:
DXj = (|+DIj - -DIj| / |+DIj + -DIj|) ? 100
round(DX,6)
By averaging DX find ADX:
ADXj = EMAvej(DX, N)
round(ADX) -> final
У кого какие мысли?