Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Не надо просить разработчиков, если нужна матрица отличий - вычитаем матрицы друг их друга, поскольку https://www.mql5.com/ru/docs/matrix/matrix_operations (*):
"Математические операции — сложение, вычитание, умножение и деление — можно производить над матрицами и векторами почленно. "
Если нужны более хитрые сравнения, то https://www.mql5.com/ru/docs/matrix/matrix_manipulations :
Compare
Сравнивает элементы двух матриц/векторов с указанной точностью
CompareByDigits
Сравнивает элементы двух матриц/векторов на совпадение с точностью до значащих цифр
По поводу умножения на 100 см. пример на той же странице (*) с вычитанием скаляра из вектора:
double avr=r.Mean(); // среднее значение массива
vector d=r-avr; // вычислим массив отклонений от среднего значения
Дело в том, что получив разницу между чисел или булево значение о равенстве мы вынуждены для дальнейшей работы всё равно проводить сравнение полученных результатов. А если мы по результатам применения неравенств к матрицам получим ответ булевый, то сможем применить switch для ветвления дальнейших действий, что ускорит процесс вычисления.
Конечно я смотрю всё, что сейчас публикуется разработчиками.
Добавил генератор исходных данных - теперь можно пробовать подумать об ускорении вычислений.
Компьютер потратил 28 секунд на таблицу из 1000000 элементов. Конечно, компьютер слабенький - но всё же это не мало времени.
Ниже код с использованием матриц. Генерацию случайными числами я оставил на базе массивов - думаю источник должен быть сопоставим.
Не заменил на вектора или матрицы массивы:
Прошлый код (Primer_00 - 22 секунды) и новый (Primer_01 - 14 секунд) - выборка 10000 строк и 10000 столбцов, процессор FX-8350.
Прирост получается 8 секунд, не плохо.
Сам код, если есть идеи как ускорить или перевести на OpencCL - пишите.
А вот памяти в пики терминал потреблял 687 мегабайт - Primer_00 (на массивах) и 1257 мегабайт (на матрицах) - Primer_01, что конечно не очень хорошо. Да, можно было бы очистить массив с датой, но в реальной задаче мне она нужна, поэтому не вижу смысла.
Видимо я описался, провел ещё раз замер матрица 10000 на 10000, терминал с 1 чартом, на массивах 661, на матрице 1636, на новом коде с матрицей пишу сразу результаты в m_Data, минуя m_Data_Q, таким образом экономим на памяти - расчет занял 1244 мегабайт.
Немного ускорил код, упростив и сократив вычисления индекса массивов.
Сделал версию на OpenCL, если сравнивать с последним скриптом, то получается, что таблица 10000 на 10000 рассчиталась за 4,3 секунды, при этом время вычисления основного цикла для прошлого и текущего варианта было следующее
Т.е. увеличение скорости примерно в 3 раза, на мой взгляд прирост недостаточный, даже я бы сказал маленький, что бы идти и покупать видеокарту.
Но, будем объективны, возможно мой код можно оптимизировать, что значительно повысит производительность - пишите, если знаете, как это сделать!
Код скрипта:
Сами кернелы
По идее, матрицы появились как метод решения систем линейных уравнений с многими переменными.
Соответственно, на мой взгляд, главное направление использования матриц - это задачи, предусматривающие такие расчёты.
Классический пример - Метод Наименьших Квадратов.
Вот, я когда-то делал индикатор:
Скриншоты торговой платформы MetaTrader
EURGBP, M15, 2018.09.03
Alpari International Limited, MetaTrader 4, Real
По идее, матрицы появились как метод решения систем линейных уравнений с многими переменными.
Соответственно, на мой взгляд, главное направление использования матриц - это задачи, предусматривающие такие расчёты.
Классический пример - Метод Наименьших Квадратов.
Вот, я когда-то делал индикатор:
Хорошо бы обсуждать код, какие то примеры...
Сейчас к матрицам надо относится как к динамичному двухмерному массиву - и тут применение уже шире, чем математический прок от матриц.
Хорошо бы обсуждать код, какие то примеры...
Сейчас к матрицам надо относится как к динамичному двухмерному массиву - и тут применение уже шире, чем математический прок от матриц.
Ну, у меня этот код был сделан с применением самописного класса матрицы. Тебе это разве интересно?
Вот, например, включаемый файл класса ядра метода МНК (mqh и mq5 файлы приложу ниже, они используют мою общую библиотеку, и для применения их надо будет подкорректировать, но основную мысль из них можно увидеть и так) - решается вопрос аппроксимации от нулевой до третьей степени. Перегружаем виртуальные функции, дающие пары (x;y) и число таких пар, и получаем готовый класс для аппроксимации. Именно с помощью этого класса были нарисованы границы параболического и кубического каналов в картинке выше:
Ну, у меня этот код был сделан с применением самописного класса матрицы. Тебе это разве интересно?
Интересно увидеть код с матрицами нового формата в сравнении со старым. Оценить прирост производительности. Да и код должен тогда значительно лучше восприниматься по идеи.