Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 199
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Прокомментируйте тогда в порядке буквоедства, как для равномерного непрерывного распределения плотность в крайней точке положительная, а интеграл равен нулю: https://en.wikipedia.org/wiki/Uniform_distribution_(continuous)
Давайте вернемся к исходному утверждению об ошибках R в статье.
Наше мнение остается в силе - ошибки присутствуют и вызваны они небрежностью в реализации.
Дело в том, что @Quantum в чистом виде занимается реализации и полной проверкой аналога математических библиотек R в MQL5.
Это не рассуждения теоретика. И он глубоко копает в поисках при написании юнит тестов, которые обеспечивают уверенность в корректности библиотеки.
Не надо априори считать, что в R все правильно. Я бы сказал наоборот, что там даже при наличии С++ реализации функций, все достаточно примитивно реализовано. И по скорости видно, как MQL5 библиотека в исходниках на нашем компиляторе выигрывает в среднем в 3 раза.
Мы потрудились перепроверить все и нашли явные ошибки. Эти ошибки подтверждены:
Посмотрите на даты публикаций, пожалуйста. Увидите, как идет работа с советами ученых.
Кроме того, ошибкой будет не считать @Quantum ученым.
Уважаемый Ренат!
По Вашим последним постам у меня возникли следующие вопросы, которые для меня носят принципиальный характер:
1. Судя по дате публикации статьи - это 2003 год. Совершенно естественно, что в R, как и в любой другой программной системе имеются ошибки и при публикации релизов всегда публикуется список исправлений. При этом R всегда подчеркивало, что в качестве достоинства R - это низкий уровень багов за счет чрезвычайно большого количества пользователей. А тут с 2003 года на уровне публикации выявлен баг в алгоритме и не исправлено. Мне это не понятно.
Делали ли Вы запрос в R по этому вопросу?
2. Хотелось бы увидеть код, по которому сравнивалось быстродействие R и MQL5.
Заранее признателен.
Уважаемый Ренат!
По Вашим последним постам у меня возникли следующие вопросы, которые для меня носят принципиальный характер:
1. Судя по дате публикации статьи - это 2003 год. Совершенно естественно, что в R, как и в любой другой программной системе имеются ошибки и при публикации релизов всегда публикуется список исправлений. При этом R всегда подчеркивало, что в качестве достоинства R - это низкий уровень багов за счет чрезвычайно большого количества пользователей. А тут с 2003 года на уровне публикации выявлен баг в алгоритме и не исправлено. Мне это не понятно.
Это элементарно и абсолютно понятно.
Все делают ошибки - такова суть разработчиков. Мы делаем ошибки тоннами и не унываем.
Данная ошибка в R просто от небрежности и доверия к одной базовой функции, которая испортила другие. Поправят.
Делали ли Вы запрос в R по этому вопросу?
Мы провели испытания, детально во всем разобрались во время написания библиотеки, постоянно сравнивали результаты MQL5 - Wolfram Alpha - R, показали свои результаты и готовы отвечать за них публично. Конечно, мы приложили в свой математический пакет(который весь в исходниках) три больших скрипта с контрольными юнит-тестами и бенчмарком.
Уверен, что @Quantum напишет багрепорт в R. Обновленную статью выпустили всего пару часов назад.
2. Хотелось бы увидеть код, по которому сравнивалось быстродействие R и MQL5.
Бенчмарк код на MQL5 лежит в \Scripts\UnitTests\Stat\TestStatBenchmark.mq5, а код на R приведен в конце статьи Статистические распределения в MQL5 - берем лучшее из R и делаем быстрее в разделе "Приложение. Результаты измерения времени расчета статистических функций".
Обязательно обновитесь до MetaTrader 5 build 1467, подключившись к серверу MetaQuotes-Demo, пожалуйста. Именно в эту бета-версию мы включили новую библиотеку и все скрипты тестирования.
Это элементарно и абсолютно понятно.
Все делают ошибки - такова суть разработчиков. Мы делаем ошибки тоннами и не унываем.
Данная ошибка в R просто от небрежности и доверия к одной базовой функции, которая испортила другие. Поправят.
Мы провели испытания, детально во всем разобрались во время написания библиотеки, постоянно сравнивали результаты MQL5 - Wolfram Alpha - R, показали свои результаты и готовы отвечать за них публично. Конечно, мы приложили в свой математический пакет(который весь в исходниках) три больших скрипта с контрольными юнит-тестами и бенчмарком.
Уверен, что @Quantum напишет багрепорт в R. Обновленную статью выпустили всего пару часов назад.
Бенчмарк код на MQL5 лежит в \Scripts\UnitTests\Stat\TestStatBenchmark.mq5, а код на R приведен в конце статьи Статистические распределения в MQL5 - берем лучшее из R и делаем быстрее в разделе "Приложение. Результаты измерения времени расчета статистических функций".
Обязательно обновитесь до MetaTrader 5 build 1467, подключившись к серверу MetaQuotes-Demo, пожалуйста. Именно в эту бета-версию мы включили новую библиотеку и все скрипты тестирования.
Пока не могу сформировать свое мнение по поводу сравнения быстродействия. Причем это носит принципиальный характер.
Дело в том, что R идеальная среда для разработки - интерпретатор одним словом. Но код, который существует при разработке очень сильно отличается от рабочего кода - по количеству строк многократно. А вот рабочий код, он очень краткий и при этом очень емкий содержательно. Поэтому сравнивать надо на каких-либо функциях из пакетов, которые имеют смысл при принятии торговых решений, например, randomforest, в которых используются вычислительно емкие алгоритмы, матричные операции, загрузка всех ядер....
ПС.
Вы используете устаревшую версию R. Надо брать R version 3.3.1 (2016-06-21) с сайта MRAN - Microsofn R Open. При этом обязательно устанавливать MKL. Майкрософт в указанном релизе R утверждал, что сумел повысить скорость исполнения некоторых пакетов и функций до 50 (!) раз.
Пока не могу сформировать свое мнение по поводу сравнения быстродействия. Причем это носит принципиальный характер.
Дело в том, что R идеальная среда для разработки - интерпретатор одним словом. Но код, который существует при разработке очень сильно отличается от рабочего кода - по количеству строк многократно. А вот рабочий код, он очень краткий и при этом очень емкий содержательно. Поэтому сравнивать надо на каких-либо функциях из пакетов, которые имеют смысл при принятии торговых решений, например, randomforest, в которых используются вычислительно емкие алгоритмы, матричные операции, загрузка всех ядер....
Мы методично переводим возможности R в MQL5. Причем так, что суть вызовов функций получается очень близкой.
Вот например, пример соответствия из статьи:
Равномерное
Стараемся сделать так, что код из R был близко идентичен по затрачиваемому времени написания и размеру в MQL5.
Завтра выпустим в бету графическую библиотеку и продемонстрируем одинаково близкие по размеру куски кода в R и MQL5 вместе с изображениями.
Сомневаюсь, что штатная версия R может неожиданно ускориться - код там не сильно меняется. Понятно, что некоторые функции можно ускорить, а особенно матричные. Причем ваше утверждение подтверждает мое мнение, что код в R написан достаточно небрежно в плане производительности.
Вот если бы вы прочитали статью, то увидели бы, что мы даже на базовых функциях получили ускорение до 46 раз без всяких многопоточностей и MKL:
Расчеты производились на Intel Core i7-4790, CPU 3.6 Ghz, 16 GB RAM, Windows 10 x64. Результаты измерения времени расчетов в микросекундах
расчета PDF (мкс)
расчета PDF (мкс)
R/MQL5
расчета CDF (мкс)
расчета CDF (мкс)
R/MQL5
квантилей (мкс)
квантилей (мкс)
R/MQL5
случайных чисел (мкс)
случайных чисел (мкс)
R/MQL5
Но указанную версию конечно проверим. Как на скорость, так и на производительность.
Вы ошибаетесь по поводу "не правильный ответ"
...
Например, в документации по MQL приводится пример по арксинусу и утверждается, что арксинус(2) = бесконечность. Это не точно. Точно: арксинус(2) = NaN, т.е. нет числового значения, арксинус(1) = Inf, а вот пропуск котировок во время торгов = NA, т.е. должно быть (или могло быть в выходные дни), а их нет.
Я это немного с иронией писал о неправильности ответов. Нужно было смайлик добавить... Я вообще дописал в конце что это не ошибка в обоих случаях, так как поведение компиляторов и интерпретаторвов в недефенированных областях функций полностью зависит от архитектуры системы и разработчиков. Лучше вернуть nan в таком случае, конечно.
Я вообще о том что не надо вызывать функцию с теми параметрами для которых она не дефинирована, а потом сравнивать результаты с другой библиотекой, а то так можно сотни "ошибок" найти.
С арксинусом интересный пример кстати.
mql -
MathArcsin(1) = MathArcsin(2) = -nan(ind)
Wolfram -
Arcsin(1) = Pi/2
Arcsin(2) = что-то комплексное. Решения с действительным результатом нету.
R -
asin(1) = Pi/2
asin(2) = nan (ответ для действительных чисел)
asin(2+0i) = что-то комплексное, как и в wolfram
wiki говорит что asin(1) всё-таки дефинирован (https://en.wikipedia.org/wiki/Inverse_trigonometric_functions), можно в сервисдеск багрепорт писать.
а вот asin(2) это уже недефинированная область, с этим всё норм и везде совпадает.
И ещё раз насчёт прошлого поста - делить на 0 в простой математике нельзя, поэтому логично что mql скрипт вылетает с ошибкой, тут багов нету. Но очень странно видеть такую дотошность к точности результатов до 16 знаков после запятой, а вернуть nan или Inf при делении на ноль почему-то нельзя. Имхо нужно вернуть Inf и не мучать девелоперов внезапными вылетами их скриптов.
Для отключения контроля за делением вещественных на ноль, используйте параметр FpNoZeroCheckOnDivision=1 в разделе [Experts] файла metaeditor.ini
При наличии данного параметра, следующий код выдаст inf
Естественно, наличие данного параметра не избавит от ошибки компиляции при делении на константу 0.0
'0.0' - division by zero in the constant expression s1.mq5 8 12
Ренат, неужели этот перевод нескольких функций с R на mql и был тем сюрпризом о котором вы говорили когда то?
Нет.
Сюрприз не имеет смысла, мы все будем делать в рамках MQL5 и MetaTrader 5.
При наличии данного параметра, следующий код выдаст inf