Не верный расчет простейших арифметических действий при использовании HLOC для баров.
Posted: 02 Feb 2017
Приветствую.
Обнаружил такой очень не хороший баг:
Найдем для примера среднее значение между Хай и Лоу любого бара следующим способом: averageVal = (Bars.High[0] + Bars.Low[0]) / 2;
Если затем произвести вычитание averageVal из того же Хай, то в качестве результата (diference) получается значение с неадекватным десятичным остатком (синий указатель на рис)
Если сложить averageVal и Хай, то на первый взгляд результат будет верный (summa). Однако, если результат сложения сравнить с таким же числом, но введенным вручную (handVal) перед началом работы скрипта, то результат будет, что они НЕ равны. (желтый указатель на рис1)
Если попробовать из полученной суммы (summa) вычесть введенное вручную (handVal), то результат будет просто не адекватный. (красный указатель на рис1)
Однако ситуация со сложением встречается не на всех барах, некоторые бары считает правильно (см. рис 2 соответствующие поля).
Таким образом, все возможные расчеты, базирующиеся на подобных вычислениях дают искаженный результат, что приводит к не правильному принятию решения.
Этот баг характерен для инструментов, имеющих шаг цены с десятичным остатком (т.е. Bars.Info.PriceScale > 1). Для инструментов с целочисленным остатком шага цены таких косяков не замечено.
Проверялось на двух разных машинах, и с разными версиями МС.NET: с 9 и с 10(Build 13630). Код используемого скрипта прилагаю.
Обнаружил такой очень не хороший баг:
Найдем для примера среднее значение между Хай и Лоу любого бара следующим способом: averageVal = (Bars.High[0] + Bars.Low[0]) / 2;
Если затем произвести вычитание averageVal из того же Хай, то в качестве результата (diference) получается значение с неадекватным десятичным остатком (синий указатель на рис)
Если сложить averageVal и Хай, то на первый взгляд результат будет верный (summa). Однако, если результат сложения сравнить с таким же числом, но введенным вручную (handVal) перед началом работы скрипта, то результат будет, что они НЕ равны. (желтый указатель на рис1)
Если попробовать из полученной суммы (summa) вычесть введенное вручную (handVal), то результат будет просто не адекватный. (красный указатель на рис1)
Однако ситуация со сложением встречается не на всех барах, некоторые бары считает правильно (см. рис 2 соответствующие поля).
Таким образом, все возможные расчеты, базирующиеся на подобных вычислениях дают искаженный результат, что приводит к не правильному принятию решения.
Этот баг характерен для инструментов, имеющих шаг цены с десятичным остатком (т.е. Bars.Info.PriceScale > 1). Для инструментов с целочисленным остатком шага цены таких косяков не замечено.
Проверялось на двух разных машинах, и с разными версиями МС.NET: с 9 и с 10(Build 13630). Код используемого скрипта прилагаю.