Обсуждение статьи "Применение OpenCL для тестирования свечных моделей" - страница 2

 
Aleksey Vyazmikin:

И ещё вопрос, сколько времени занимает передача\подготовка данных для видеокарты, слышал мнение, что OpenCL для видеокарты нет смысла применять для реальной торговли из-за потерь времени на передачу данных для обработки, это действительно так?

На рисунке 8 приведён вывод в консоль терминала значений промежутков времени между контрольными точками в коде программы. Продублирую здесь:

Времена

Где:

  • OpenCL init - инициализация OpenCL устройства и создание кернелов из ресурсов
  • OpenCL buffering - копирование буферов OHLC в память видеокарты (полугодовая история, период M1)
  • OpenCL total execution - выполнение (запуск нескольких кернелов с чтением результатов и т.д..)
  • OpenCL test и OpenCL prepare orders - это этапы выполнения, которые включает в себя OpenCL total execution

Загрузка данных в массив (на рисунке - Buffering) заняла 26.6ms (возможно, пришлось подгружать или что-то синхронизировать), загрузка этих же данных в память видеокарты - 8.7ms.

Да, если гонять большие данные много раз туда-сюда, можно потерять много времени. Поэтому, нужно строить алгоритм так, чтобы копирование в/из памяти GPU свести к минимуму. Я в ближайшее время хочу модифицировать код для тестирования на тиковой истории. Там объемы будут побольше. Вот там уже интересно будет посмотреть на время копирования.

Пока самый затратный процесс - это инициализация. Целых 316ms. Но её можно провести один раз, если дальше использовать те же кернелы.


 
Serhii Shevchuk:

На рисунке 8 приведён вывод в консоль терминала значений промежутков времени между контрольными точками в коде программы. Продублирую здесь:

Где:

  • OpenCL init - инициализация OpenCL устройства и создание кернелов из ресурсов
  • OpenCL buffering - копирование буферов OHLC в память видеокарты (полугодовая история, период M1)
  • OpenCL total execution - выполнение (запуск нескольких кернелов с чтением результатов и т.д..)
  • OpenCL test и OpenCL prepare orders - это этапы выполнения, которые включает в себя OpenCL total execution

Загрузка данных в массив (на рисунке - Buffering) заняла 26.6ms (возможно, пришлось подгружать или что-то синхронизировать), загрузка этих же данных в память видеокарты - 8.7ms.

Да, если гонять большие данные много раз туда-сюда, можно потерять много времени. Поэтому, нужно строить алгоритм так, чтобы копирование в/из памяти GPU свести к минимуму. Я в ближайшее время хочу модифицировать код для тестирования на тиковой истории. Там объемы будут побольше. Вот там уже интересно будет посмотреть на время копирования.

Пока самый затратный процесс - это инициализация. Целых 316ms. Но её можно провести один раз, если дальше использовать те же кернелы.


Спасибо, очень познавательно! Однако как аналогично это сравнить с процессором?

В любом случае, для многих стратегий, которые работают по открытию бара, это может быть полезно, если надо сделать сложные вычисления, к примеру автоматическая адаптация под рынок, как при инициализации, так и раз в день.

 
Aleksey Vyazmikin:

Спасибо, очень познавательно! Однако как аналогично это сравнить с процессором?

В любом случае, для многих стратегий, которые работают по открытию бара, это может быть полезно, если надо сделать сложные вычисления, к примеру автоматическая адаптация под рынок, как при инициализации, так и раз в день.

В конце статьи есть таблицы сравнения производительности. Запускается оптимизация советника в тестере стратегий, далее полученные результаты и затраты времени сравниваются с тем, что было получено тестером OpenCL. Пункт 3, "Сравнение производительности".

При глубине тестирования 9 месяцев в режиме "OHLC на M1" тестер OpenCL укладывается максимум в 1 секунду при оптимизации двух параметров по 100 шагов каждый (10000 проходов).

Такую оптимизацию можно выполнять хоть каждую минуту на 60 парах, что уже можно с натяжкой назвать автоматической адаптацией под рынок, если я правильно понял, о чём Вы говорите.

 
Serhii Shevchuk:

В конце статьи есть таблицы сравнения производительности. Запускается оптимизация советника в тестере стратегий, далее полученные результаты и затраты времени сравниваются с тем, что было получено тестером OpenCL. Пункт 3, "Сравнение производительности".

При глубине тестирования 9 месяцев в режиме "OHLC на M1" тестер OpenCL укладывается максимум в 1 секунду при оптимизации двух параметров по 100 шагов каждый (10000 проходов).

Такую оптимизацию можно выполнять хоть каждую минуту на 60 парах, что уже можно с натяжкой назвать автоматической адаптацией под рынок, если я правильно понял, о чём Вы говорите.

Табличку то я видел, вопрос в одной итерации (результате одного прохода) как для CPU так GPU, так-как там происходит подготовка и передача данных. Впрочем, явно это полезная тема, жаль, что пока не все могут ей воспользоваться в силу не простоты.

 
Правильно понимаю, что при наличии GPU фермы из нескольких карт вычисления будут производиться на всех картах?
 
kogriv:
Правильно понимаю, что при наличии GPU фермы из нескольких карт вычисления будут производиться на всех картах?

MT5 поддерживает только одно устройство GPU, к сожалению.

 
Aleksey Vyazmikin:

MT5 поддерживает только одно устройство GPU, к сожалению.

Можно использовать несколько устройств.

Разработчик сам решает, какие устройства и как использовать.

 
Renat Fatkhullin:

Можно использовать несколько устройств.

Разработчик сам решает, какие устройства и как использовать.

Если я не ошибаюсь, то ранее Вы писали, что одновременно можно использовать только одно устройство - выбрать какое, да можно, что-то изменилось?

Речь идет не о агентах, они, как я понимаю, каждый может использовать по устройству, только опять же не понятно, как агента привязать к конкретному устройству...
 

Very interesting article!

Unfortunately your solution does not offer 'genetic optimization'.
But these could easily be added, even one that exceeds the user's options and benefits compared to MQ5. Mq5 has only one option - genetic or everything or slow.

All you have to do
1) Create a table of the results with their parameter combinations,
2) sort them according to the results,
3) divide into e.g. 5 or (user definable n) sections,
4) then randomly select parameter combinations from each section,
5) Change a value for these selected parameter combinations,
6) check if this combination has already been tested (then return to 4)
7) Test.
8) Start again at 1) unless an abort criterion has been reached.

Only one combination is selected from the worst section, two from the next best, then three, and so on.
Thus, the density of the optimizations is highest in the best section, and since all sections are always about the same size relative to each other (1/5 or 1/n), the section boundaries shift, resulting in an additional increase in density in the best results.

You could also let the user determine: Should another combination be tested from section to section - i.e. 1, 2, 3, 4, 5 in the 5th top section - or two - 1, 3, 5, 7, 9 - or even more to further increase the density in the best section?

Maybe you could introduce something very interesting and useful?
If you do a cluster analysis of the parameter combinations in each section of the table, you could not (only) select the combinations randomly, but selectively:
a) in the middle between the best values of two clusters - to fathom the valley in between
b) in the middle between two as different as possible combinations of one and the same cluster - to find a new best value, a new top.
This will probably significantly improve the quality of the results of genetic optimization. You would have to try it!

Cluster analysis


Очень интересная статья!

К сожалению, ваше решение не предлагает "генетическую оптимизацию".
Но их можно легко добавить, даже если они превосходят возможности и преимущества пользователя по сравнению с MQ5. У Mq5 есть только один вариант - генетический, полный или медленный.

Все, что тебе нужно сделать.
1) Составить таблицу результатов с их комбинациями параметров,
2) сортировать их по результатам,
3) разделить на, например, 5 или (определяемые пользователем n) разделов,
4) затем случайным образом выбрать комбинации параметров из каждой секции,
5) Измените значение для этих выбранных комбинаций параметров,
6) проверить, была ли эта комбинация уже протестирована (затем вернуться к 4)
7) Тест.
8) Начните сначала с 1) если не достигнут критерий прерывания.

Из худшего раздела выбирается только одна комбинация, из лучшего - две, затем три и так далее.
Поэтому плотность оптимизаций наиболее высока в лучшей секции, и поскольку все секции всегда имеют одинаковый размер относительно друг друга (1/5 или 1/n), границы секции смещаются, приводя к дополнительному увеличению плотности в лучших результатах.

Кроме того, пользователь также может быть определен: если будет испытана другая комбинация из секции в секцию - т.е. 1, 2, 3, 4, 5 в 5-й самой верхней секции - или две - 1, 3, 5, 7, 9 - или даже больше, для дальнейшего увеличения плотности в лучшей секции.

Может быть, вы могли бы представить что-нибудь очень интересное и полезное?
Если вы также выполните кластерный анализ комбинаций параметров в каждом разделе таблицы, вы сможете не только (только) выбрать комбинации случайным образом, но и конкретно:
a) посередине между лучшими значениями двух кластеров - постичь долину между ними
b) посередине между двумя максимально разными комбинациями одного и того же кластера - найти новое наилучшее значение, новую вершину.
Это, вероятно, существенно улучшит качество результатов генетической оптимизации. Тебе придется попробовать!

Кластерный анализ


PS: In addition to my proposal, would you like to add that you could also develop a presentation of the results in the form of clusters?
The Strategy Tester always shows only the results of the whole range of a variable, it would be much more informative, if one sees, for example, there are three clusters and for each cluster the respective best value (the bigger, the better), their dispersion (the bigger, the better) and the statistics of the individual parameters (max., min., middle, standard deviation (the bigger, the better). This makes it easier to see where the more robust parameter combinations are likely to be and where the more random best values could be.

PS: В дополнение к моему предложению, не могли бы вы добавить, что вы могли бы также разработать презентацию результатов в виде кластеров?
Тестер стратегий всегда показывает только результаты всего диапазона переменных, было бы гораздо информативнее, если бы вы видели, например, три кластера и для каждого кластера было бы определено наилучшее значение (чем больше, тем лучше), их дисперсия (тем больше, тем лучше) и статистика отдельных параметров (максимальное, минимальное, среднее, стандартное отклонение (тем больше, тем лучше). Это облегчает поиск наиболее надежных комбинаций параметров и наилучших случайных значений.


PPS: By chance I found this article: "Optimizing OpenCL Kernels
for Iterative Statistical Applications on GPUs"
that would fit my suggestion :)

Случайно я нашел эту статью: "Оптимизация ядра OpenCL
для итеративных статистических приложений на GPU"
, что соответствует моему предложению :)



Cluster analysis - Wikipedia
Cluster analysis - Wikipedia
  • en.wikipedia.org
Cluster analysis itself is not one specific algorithm, but the general task to be solved. It can be achieved by various algorithms that differ significantly in their understanding of what constitutes a cluster and how to efficiently find them. Popular notions of clusters include groups with small distances between cluster members, dense areas...
 

Добрый день.

Подскажите примерный путь как добиться открытия только одной сделки единовременно на покупку и также только одну на продажу в Вашем коде.