Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Написал код на классическом MQL5 - дабы предметно обсуждать, как его ускорить.
Решением являются 3 массива - принтуются в лог, но формат представления данных я немного изменил для второй и третьей задачи. Причина изменения- так показалось легче работать с индексами виртуальных таблиц.
Цветом выделены шапки, которых по понятным причинам нет в массивах.
Таблица №5 с результатами вычислений процента принадлежности классов к целевой.
Таблица №6 с результатами вычислений процента откликов классов ко всей таблице (выборке).
Сколько брать данных из каждого столбца для дальнейшей работы - можно узнать из массива arr_N_Quant или arr_Quant_Trans.
В код хотел добавить генератор больших таблиц для оценки времени работы, но пока не сделал. Может кто добавит?
Жду идеи по оптимизации и ускорению кода, в том числе интересны реализации с применением матриц и OpenCL/OpenGL.
Код на R или Python так же приветствуется!Можете показать, как реализовать это преимущество на конкретном примере?
Ниже я выложу код, как сделал - наверняка не оптимально и на MQL5 - поэтому открыт к критике и замечаниям.
Думаю, на конкретных примерах доказывать быстродействие должны разработчики этих функций, это их работа. Я всего лишь поделился своим опытом в реализации обработки векторов и матриц, точнее массивов структур, на языках, где можно применять арифметику указателей.
Мне это быстродействие понадобилось для вывода в файл статистики - отчета о результатах имитации торговли за прошедшую неделю на 37 счетах по 29 инструментам с десятком характеристик этой торговли. Это не матрица, есть разные типы данных, скорее следовало бы отнести это к таблицам.
ещё раз - у вас задача не матричных операций. Там приткнуть их некуда
опции OMP или CUDA запрятанные внутрь их операторов, вам не помогут.
Перемножение двух матриц - очевидно будет быстрее средствами ново-встроенных типов vector/matrix. А у вас оно где-нить может быть применимо ?
Спасибо! А конкретной ссылке нет куда смотреть? Увы, я не знаю где искать :(
В поиске можно ввести CMatrixDouble и получить кучу результатов. Определение находится тут: %MQL5\Include\Math\Alglib\matrix.mqh.
Думаю, на конкретных примерах доказывать быстродействие должны разработчики этих функций, это их работа. Я всего лишь поделился своим опытом в реализации обработки векторов и матриц, точнее массивов структур, на языках, где можно применять арифметику указателей.
Мне это быстродействие понадобилось для вывода в файл статистики - отчета о результатах имитации торговли за прошедшую неделю на 37 счетах по 29 инструментам с десятком характеристик этой торговли. Это не матрица, есть разные типы данных, скорее следовало бы отнести это к таблицам.
К сожалению, без реальных примеров сложно понять, если ничего подобного ранее не делал.
А разработчики - нет, они ничего не доказывают, не их это дело.
ещё раз - у вас задача не матричных операций. Там приткнуть их некуда
опции OMP или CUDA запрятанные внутрь их операторов, вам не помогут.
Перемножение двух матриц - очевидно будет быстрее средствами ново-встроенных типов vector/matrix. А у вас оно где-нить может быть применимо ?
Если бы я видел возможность применить, то не открыл бы ветку. Бывает, что люди находят нестандартное применение обыденным инструментам, может это тот случай - поэтому и решил обсудить.
В поиске можно ввести CMatrixDouble и получить кучу результатов. Определение находится тут: %MQL5\Include\Math\Alglib\matrix.mqh.
Не совсем понял, что я могу увидеть в этом классе полезного, быть может покажете конкретный пример применительно к выше описанной задаче?
Если бы я видел возможность применить, то не открыл бы ветку. Бывает, что люди находят нестандартное применение обыденным инструментам, может это тот случай - поэтому и решил обсудить.
вам нужно применить модные в этом сезоне средства или решать задачу ?
вы уж определитесь..:-)
---
и кстати про определители, если надо ознакомиться где и как применимы vector и matrix то стоит почитать материалы https://www.alglib.net/ и https://www.gnu.org/software/gsl/doc/html/index.html
там и там (а они родственные души, про одно и то-же) есть утрированные примеры. И в описаниях разделов дана сжато математика и области применения. А в библиографии есть ссылки на нелишнюю информацию
вам нужно применить модные в этом сезоне средства или решать задачу ?
вы уж определитесь..:-)
Мне нужно ускорить вычисления - в этом цель.
Матрицы/вектора я воспринимаю не как математический аппарат, а как техническую возможность - как я понял скорость вычислений выше за счет подачи на процессор очередь заданий, которое выполняется как бы одной инструкцией (одним набором), за счет чего сокращается процессорное время. Поэтому, если не хватает именно математического аппарата, то разработчиков надо убедить ввести свои функции, к примеру находить корень в каждом элементе матрице, или делать сравнение чисел с возвратом булевой матрицы - думаю это возможно с программной точки зрения.
Далее по коду - в нем есть расчет процентов в массивах, и эта часть кода кажется претендентом на матричные/векторные вычисления.
Нужно сложить два вектора в матрице, потом каждый вектор поделить на полученную сумму предшествующего действия и результат умножить на 100 (можно на число или надо вектор заполнять соразмерный им - не знаю пока).
Мне нужно ускорить вычисления - в этом цель.
Матрицы/вектора я воспринимаю не как математический аппарат, а как техническую возможность - как я понял скорость вычислений выше за счет подачи на процессор очередь заданий, которое выполняется как бы одной инструкцией (одним набором), за счет чего сокращается процессорное время. Поэтому, если не хватает именно математического аппарата, то разработчиков надо убедить ввести свои функции, к примеру находить корень в каждом элементе матрице, или делать сравнение чисел с возвратом булевой матрицы - думаю это возможно с программной точки зрения.
Далее по коду - в нем есть расчет процентов в массивах, и эта часть кода кажется претендентом на матричные/векторные вычисления.
Нужно сложить два вектора в матрице, потом каждый вектор поделить на полученную сумму предшествующего действия и результат умножить на 100 (можно на число или надо вектор заполнять соразмерный им - не знаю пока).
Не надо просить разработчиков, если нужна матрица отличий - вычитаем матрицы друг их друга, поскольку 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; // вычислим массив отклонений от среднего значения