Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 198
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я ещё одну ошибку в R нашёл. R неправильно на 0 делит.
Вот скрипт:
//| test.mq5 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property script_show_inputs
input double div = 0.0;
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
Print(1.0/div);
}
//+------------------------------------------------------------------+
Правильный ответ, в mql -
zero divide in 'test.mq5' (20,13)
с остановкой скрипта
Неприавильный, в R:
> 1/0
Inf
с продолжением работы скрипта
Я это веду к тому же что и Алексей - поведение программ в неопределённых условиях может отличаться, и это не ошибка. Как архитектурой положено, такой результат и будет.
Вы ошибаетесь по поводу "не правильный ответ"
Ответ в R совершенно правильный и очень удобный. Дело в том, что в R доведено до своего логического завершения понятие "значение переменной" и имеется три специфических значения для переменной: NA (значение есть, но оно не известно), NaN (числового значения нет) и Inf - бесконечность. Это такое значение и совершенно неправильно прерывать работу программы. Если учесть ограничения компа по реальной точности, то Inf может иметь вполне конечное значение. И совершенно естественно продолжить работу и аккуратно написанная программа должна проверять такие результаты, если они предполагаются.
Например, в документации по MQL приводится пример по арксинусу и утверждается, что арксинус(2) = бесконечность. Это не точно. Точно: арксинус(2) = NaN, т.е. нет числового значения, арксинус(1) = Inf, а вот пропуск котировок во время торгов = NA, т.е. должно быть (или могло быть в выходные дни), а их нет.
То, что Wolfram говорит 0 - это не истина в последней инстанции. Я про то, что слово "ошибка" в формулировке излишнее...
Тут дело не в Wolfram. Интеграл от ненулевых положительных значений не может быть нулевым.
В процессе проверок были также обнаружены ошибки в алгоритмах.
Например, для нецентрального t-распределения не обращаются квантили:
Здесь неправильно вычислены квантили 0-0.6.
Пример аналогичного расчета в MQL5:
2016.11.10 17:53:32.645 TestStatNCT (EURUSD,H1) Unit tests for Package Stat
2016.11.10 17:53:32.645 TestStatNCT (EURUSD,H1)
2016.11.10 17:53:32.645 TestStatNCT (EURUSD,H1) Noncentral T distribution test started
2016.11.10 17:53:32.645 TestStatNCT (EURUSD,H1) Noncentral T distribution test: Test 1: Calculations for single values
2016.11.10 17:53:32.645 TestStatNCT (EURUSD,H1) 1 0, PDF=4.92773299108629100851e-15, CDF=6.23274905782904190070e-16, Q=1.51119154775858715131e-18,
2016.11.10 17:53:32.646 TestStatNCT (EURUSD,H1) 1 1, PDF=1.13022616309487516453e-14, CDF=1.38993895779573769266e-15, Q=9.99999999999989369615e-02,
2016.11.10 17:53:32.647 TestStatNCT (EURUSD,H1) 1 2, PDF=2.64161256619123119969e-14, CDF=3.16755115913693189175e-15, Q=2.00000000000004840572e-01,
2016.11.10 17:53:32.648 TestStatNCT (EURUSD,H1) 1 3, PDF=6.28106243570810575054e-14, CDF=7.36381790305861902898e-15, Q=2.99999999999998601119e-01,
2016.11.10 17:53:32.648 TestStatNCT (EURUSD,H1) 1 4, PDF=1.51636983962646374250e-13, CDF=1.74303935907449069191e-14, Q=4.00000000000005184742e-01,
2016.11.10 17:53:32.648 TestStatNCT (EURUSD,H1) 1 5, PDF=3.70864175555731463525e-13, CDF=4.19192812277470617962e-14, Q=5.00000000000000000000e-01,
2016.11.10 17:53:32.649 TestStatNCT (EURUSD,H1) 1 6, PDF=9.16615229573755101565e-13, CDF=1.02187737277044947465e-13, Q=5.99999999999998867573e-01,
2016.11.10 17:53:32.651 TestStatNCT (EURUSD,H1) 1 7, PDF=2.28327725393015114329e-12, CDF=2.51850847368662607692e-13, Q=6.99999999999999289457e-01,
2016.11.10 17:53:32.652 TestStatNCT (EURUSD,H1) 1 8, PDF=5.71609303970751591223e-12, CDF=6.25821417361289428232e-13, Q=7.99999999999999267253e-01,
2016.11.10 17:53:32.653 TestStatNCT (EURUSD,H1) 1 9, PDF=1.43395037240077606742e-11, CDF=1.56338059375202603523e-12, Q=8.99999999999998578915e-01,
2016.11.10 17:53:32.655 TestStatNCT (EURUSD,H1) 1 10, PDF=3.59391445912256345050e-11, CDF=3.91468724033560601170e-12, Q=9.99999999999998889777e-01,
2016.11.10 17:53:32.655 TestStatNCT (EURUSD,H1) Noncentral T distribution test: Test 2: Calculations on arrays
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 0, PDF=4.92773299108629100851e-15, CDF=6.23274905782904190070e-16, Q=1.51119154775858715131e-18,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 1, PDF=1.13022616309487516453e-14, CDF=1.38993895779573769266e-15, Q=9.99999999999989369615e-02,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 2, PDF=2.64161256619123119969e-14, CDF=3.16755115913693189175e-15, Q=2.00000000000004840572e-01,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 3, PDF=6.28106243570810575054e-14, CDF=7.36381790305861902898e-15, Q=2.99999999999998601119e-01,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 4, PDF=1.51636983962646374250e-13, CDF=1.74303935907449069191e-14, Q=4.00000000000005184742e-01,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 5, PDF=3.70864175555731463525e-13, CDF=4.19192812277470617962e-14, Q=5.00000000000000000000e-01,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 6, PDF=9.16615229573755101565e-13, CDF=1.02187737277044947465e-13, Q=5.99999999999998867573e-01,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 7, PDF=2.28327725393015114329e-12, CDF=2.51850847368662607692e-13, Q=6.99999999999999289457e-01,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 8, PDF=5.71609303970751591223e-12, CDF=6.25821417361289428232e-13, Q=7.99999999999999267253e-01,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 9, PDF=1.43395037240077606742e-11, CDF=1.56338059375202603523e-12, Q=8.99999999999998578915e-01,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 10, PDF=3.59391445912256345050e-11, CDF=3.91468724033560601170e-12, Q=9.99999999999998889777e-01,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) Noncentral T distribution test: Test 3: R-like overloaded functions
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 0, PDF=-3.29438973521509552711e+01, CDF=-3.50115439911437320575e+01, Q=9.32008491370933962264e-15,
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 1, PDF=-3.21137735448868468779e+01, CDF=-3.42095165639872504926e+01, Q=9.99999999999992561506e-02,
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 2, PDF=-3.12648017507063613607e+01, CDF=-3.33858176105613679852e+01, Q=2.00000000000004563017e-01,
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 3, PDF=-3.03986521580849320401e+01, CDF=-3.25421978598387227066e+01, Q=2.99999999999998490097e-01,
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 4, PDF=-2.95172869939179705057e+01, CDF=-3.16805609544090991392e+01, Q=4.00000000000005240253e-01,
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 5, PDF=-2.86229405029589081266e+01, CDF=-3.08030305013295588878e+01, Q=5.00000000000000000000e-01,
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 6, PDF=-2.77180886076848480570e+01, CDF=-2.99119647118446110312e+01, Q=5.99999999999998756550e-01,
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 7, PDF=-2.68054093129466934897e+01, CDF=-2.90099393581479034765e+01, Q=6.99999999999999400480e-01,
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 8, PDF=-2.58877355789277032727e+01, CDF=-2.80997113402901490531e+01, Q=7.99999999999999489297e-01,
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 9, PDF=-2.49680028891657173062e+01, CDF=-2.71841705920503962091e+01, Q=8.99999999999998689937e-01,
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 10, PDF=-2.40491940358795979193e+01, CDF=-2.62662856772029869035e+01, Q=9.99999999999998889777e-01,
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) Noncentral T distribution test: Test 4: Generators of random values
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) Noncentral T distribution test passed
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) Noncentral T distribution test: PDF max error : 1.48634016318122160328e-25
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) Noncentral T distribution test: CDF max error : 2.75966439373922392108e-18
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) Noncentral T distribution test: Quantile max error : 5.16253706450697791297e-15
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) Noncentral T distribution test: PDF correct digits : 24
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) Noncentral T distribution test: CDF correct digits : 17
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) Noncentral T distribution test: Quantile correct digits: 14
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1)
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) 1 of 1 passed
Результат скрипта TestStatNCT.mq5 (тест из TestStat.mq5, в тестовую функцию TestNoncentralTDistribution добавлен вывод рассчитанных значений)
Как видно, квантили обращаются и тесты проходят.
Что касается погрешностей, то они такие:
double calc_precision_pdf=10E-15;
double calc_precision_cdf=10E-15;
double calc_precision_quantile=10E-14;
В статье Denise Benton, K. Krishnamoorthy, "Computing discrete mixtures of continuous distributions: noncentral chisquare, noncentral t and the distribution of the square of the sample multiple correlation coefficient" было показано, что у алгоритма AS 243 есть ошибки:
Таким образом, ошибки в R есть и их вероятная причина в алгоритме AS 243, который используется при расчете CDF.
1)Тут дело не в Wolfram. Интеграл от ненулевых положительных значений не может быть нулевым.
2)В процессе проверок были также обнаружены ошибки в алгоритмах.
3)Например, для нецентрального t-распределения не обращаются квантили:
1 - Если вы тоже пишете об ошибке касательно гамма-распределения, значит я свою претензию адресую вам. Некорректно говорить, что в R это с ошибкой. Я вижу в этом сообщении какие-то попытки навешивания ярлыков. Видимо, вы не советовались с учеными, которые используют пакеты и не видят там ошибок. Функция в Python также выдает 1 плотность в нуле.
Еще раз. Значение плотности не определено в нуле. Вольфрам считает, что оно 0 и вы просто с этим соглашаетесь, не приводя самостоятельных измышлений.
вы говорите, что Вольфрам не причем, а сами на мой вопрос о возведении нуля в нулевую степень ответить не можете. Вместо этого показываете Вольфрам...
Вы же сами видите, что в правом приближении значение уходит к единице, а значит интеграл в приближении тоже не нулевой. А в нуле его нет, как и плотности, так как интегрировать неопределенную величину бессмысленно.
2 - Это можно дополнительно проверить и установить, например, ошибку в алгоритме.
3) например, это можно проверить.
Например, для нецентрального t-распределения не обращаются квантили:
Здесь неправильно вычислены квантили 0-0.6.
1) Как можно объяснить, что в точке cdf=0, при этом pdf ненулевое?
2) как можно объяснить, что квантили не совпали с исходными?
Простите, а где в вашем коде инициализируется переменная nt_quantile? то есть, откуда она идет?
Прошу прощения, в скрипте была опечатка, исправил.
Скрипт такой:
1) Как можно объяснить, что в точке cdf=0, при этом pdf ненулевое?
2) как можно объяснить, что квантили не совпали с исходными?
Дело в том, что @Quantum в чистом виде занимается реализации и полной проверкой аналога математических библиотек R в MQL5.
Это не рассуждения теоретика. И он глубоко копает в поисках при написании юнит тестов, которые обеспечивают уверенность в корректности библиотеки.
Не надо априори считать, что в R все правильно. Я бы сказал наоборот, что там даже при наличии С++ реализации функций, все достаточно примитивно реализовано. И по скорости видно, как MQL5 библиотека в исходниках на нашем компиляторе выигрывает в среднем в 3 раза.
Мы потрудились перепроверить все и нашли явные ошибки. Эти ошибки подтверждены:
Для расчета вероятности нецентрального T-распределения Стьюдента в языке R используется алгоритм AS 243, предложенный Lenth [Lenth, R.V., "Cumulative distribution function of the noncentral t distribution", Appled Statistics, vol. 38 (1989), 185–189]. Достоинством этого метода является быстрый рекуррентный расчет членов бесконечного ряда с неполной бета-функций. Но в статье [D. Benton, K. Krishnamoorthy, "Computing discrete mixtures of continuous distributions: noncentral chisquare, noncentral t and the distribution of the square of the sample multiple correlation coefficient", Computational Statistics & Data Analysis, 43, (2003), 249-267] было показано, что из-за ошибки оценки точности при суммировании членов ряда данный алгоритм приводит к ошибкам (таблица 3 в статье), особенно для больших значений параметра нецентральности delta. Авторы статьи предложили скорректированный алгоритм рекуррентного расчета вероятности нецентрального T-распределения.
У нас в в статистической библиотеке MQL5 используется правильный алгоритм для расчета вероятностей из статьи [D. Benton, K. Krishnamoorthy, "Computing discrete mixtures of continuous distributions: noncentral chisquare, noncentral t and the distribution of the square of the sample multiple correlation coefficient", Computational Statistics & Data Analysis, 43, (2003), 249-267] , что дает точные результаты.
Чтобы быть уверенными в точности расчетов и дать возможность сторонним разработчикам проверить качество библиотеки, мы включили несколько unit test скриптов в поставку. Их можно найти в каталоге /Scripts/UnitTests/Stat.Посмотрите на даты публикаций, пожалуйста. Увидите, как идет работа с советами ученых.
Кроме того, ошибкой будет не считать @Quantum ученым.
Прокомментируйте тогда в порядке буквоедства, как для равномерного непрерывного распределения плотность в крайней точке положительная, а интеграл равен нулю: https://en.wikipedia.org/wiki/Uniform_distribution_(continuous)
Дело в том, что @Quantum в чистом виде занимается реализации и полной проверкой аналога математических библиотек R в MQL5.
Это не рассуждения теоретика. И он глубоко копает в поисках при написании юнит тестов, которые обеспечивают уверенность в корректности библиотеки.
Не надо априори считать, что в R все правильно. Я бы сказал наоборот, что там даже при наличии С++ реализации функций, все достаточно примитивно реализовано. И по скорости видно, как MQL5 библиотека в исходниках на нашем компиляторе выигрывает в среднем в 3 раза.
Мы потрудились перепроверить все и нашли явные ошибки. Эти ошибки подтверждены:
Посмотрите на даты публикаций, пожалуйста. Увидите, как идет работа с советами ученых.
Кроме того, ошибкой будет не считать @Quantum ученым.
Про это ошибку я ничего не говорил. Есть так есть.
Про гамма распределение - я так и понял, что он занимается у вас реализацией. И я повторю, что его претензии по этому поводу - чистое буквоедство.