Обнаружил, что способ расчета DiPlus, DiMinus и, как следствие, ADX, не совпадает с описываемым тут а также со значениями из как минимум 2 программ теханализа (WLD, AlfaDirect). После моего фикса считает правильно.
Единственным исправлением было использование параметров по умолчанию у AverageTrueRange при расчете DiPart. (+удаление неиспользуемого DmTrueRange) Было:
protected DiPart()
{
_averageTrueRange = new AverageTrueRange(new ExponentialMovingAverage(), new DmTrueRange());
_movingAverage = new WilderMovingAverage();
}
Стало:
protected DiPart()
{
_averageTrueRange = new AverageTrueRange();
_movingAverage = new WilderMovingAverage();
}
в связи с чем у меня вопрос: Это вообще баг или расчет +-DI/ADX намеренно выполняется с использованием нестандартных параметров? Если это не баг, то каким образом коммитить фикс? Как отдельный индикатор?
Kommentare (1)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Мне самому нужна была формула для ADX, когда искал - нашел кучу вариаций, после чего написал в тех поддержку Альфы, они прислали мне код, правда он был не на C#, но смысл я понял.
Прикладываю класс индюка DiPart. Реализован не через Length indicator, а просто как класс. Полностью совпадает с альфой.
Получить Di+ можно свойством Dlpp, Di- свойством Dlmm.
Методом Process Добавляем готовую свечку(не через CandleIndicatorValue, а просто candle),
Также добавлен метод UpDate, чтобы индюк мог меняться внутри свечи(также добавляем туда candle). Также считает верно.