Новая версия платформы MetaTrader 5 build 3500: улучшения и исправления - страница 2

 
Актуальным было бы смена валюты счета без потери торговой истории. Конечно это не релевантно в нынешних условиях бешенной волатильности фиатной системы не иметь механизмов защиты кроме как с потерей истории торгов. 
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Новая версия платформы MetaTrader 5 build 3490: мобильная версия веб-терминала и новые методы матриц в MQL5

Aleksey Vyazmikin, 2022.11.05 11:05

Так как тема о вчерашнем обновлении терминала самоликвидировалась пока я писал сообщение, то спрошу тут.

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

1. Как программе на MQL5 принудительно указать, какое устройство использовать для вычислений?

2. Как привязать устройство к конкретному агенты? Ведь очевидно, что при оптимизации только один агент будет рационально использовать устройство, в противном случае будет большая очередь.

3. Как в клауде рассчитывается стоимость устройства - на скринах видел там на порядок другой оценочный коэффициент?

4. Как в клауде выбрать агентов с нужным мне устройством - ведь у карт разная архитектура, и возможно, что мне достаточно старого и дешёвого поколения для вычислений, так как в моих задачах прирост будет минимален.

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

Какое там значение ставиться по умолчанию, зависит ли оно как то от архитектуры самой карты?

bool  Execute( 
   const int   kernel_index,           // индекс кернела 
   const int   work_dim,               // размерность пространства задач  
   const uint  &work_offset[],         // начальное смещение в пространстве задач  
   const uint  &work_size[],           // общее количество задач  
   const uint  &local_work_size[]      // количество задач в локальной группе  
   );

 
Aleksey Vyazmikin #:

1. Вы сами в настройках терминала можете включить и отключить нужные OpenCL устройства

В MQL5 программе у вас есть два метода выбора OpenCL устройств:

  • в CLContextCreate задав номер доступного устройства
  • или задав тип предпочитаемого устройства

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

2. В агентах OpenCL еще не используется, мы сначала готовим полноценное использование в самом терминале в следующих релизах

3. ответ выше

4. ответ выше

Документация по MQL5: Работа с OpenCL / CLContextCreate
Документация по MQL5: Работа с OpenCL / CLContextCreate
  • www.mql5.com
CLContextCreate - Работа с OpenCL - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Renat Fatkhullin #:

1. Вы сами в настройках терминала можете включить и отключить нужные OpenCL устройства

В MQL5 программе у вас есть два метода выбора OpenCL устройств:

  • в CLContextCreate задав номер доступного устройства
  • или задав тип предпочитаемого устройства

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

2. В агентах OpenCL еще не используется, мы сначала готовим полноценное использование в самом терминале в следующих релизах

3. ответ выше

4. ответ выше

Про выбор устройства в терминале понятно - спасибо.

Про то, что агенты ещё не поддерживают OpenCL и ответы не будут даны на вытекающие из поддержки вопросы - понял.

Возможно ли будет сразу запускать задачу на нескольких устройствах?

Что стоит основного ожидать от "полноценной поддержки в следующих релизах"?


И всё же, хотел бы понять про параметр "const uint  &local_work_size[]"

bool  Execute( 
   const int   kernel_index,           // индекс кернела 
   const int   work_dim,               // размерность пространства задач  
   const uint  &work_offset[],         // начальное смещение в пространстве задач  
   const uint  &work_size[],           // общее количество задач  
   const uint  &local_work_size[]      // количество задач в локальной группе  
   );
 

Посмотрите примеры использования этого параметра в MQL5\Scripts\Examples\OpenCL\Float\FFT.mq5

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

Home
Home
  • 2017.12.05
  • opencl.org
Welcome to the OpenCL.org website. Here you’ll find ways to improve yourself by learning more about OpenCL and ways to improve OpenCL by working on various projects. ASTRON, the Netherlands eScience Center, and the University of Amsterdam have started ALERT, the Apertif Lofar Exploration of the Radio Transient Sky. ALERT aims to identify the...
 
Renat Fatkhullin #:
А почему вы считаете const чудом, отменяющим результаты создания/удаления обьекта в цикле?

Ноги тормозов в любом конструировании обьектов внутри больших циклов. И это на совести прикладного программиста.

Потому что компилятор, а не интерпретатор. Должен был выкинуть const-объект и сделать напрямую.

 
fxsaber #:

Потому что компилятор, а не интерпретатор. Должен был выкинуть const-объект и сделать напрямую.

Не должен.

Объект не может быть сконструирован/пропущен частично на основе запредельной логики минимализма использования. Иначе на каждый инстанс объекта пришлось бы строить полный граф использования каждого члена.

На простых типах типа int такое легко делается, но не для сложного/любого объекта/структуры.

 

Ренат,

можно ли провести аудит EventChartCustom()


Вот такой код выдает:

Print("start");

double marker;

long ch = ChartID();

for (int i = 0; i < 50; i++) {

  marker = GetMicrosecondCount();     

  EventChartCustom(ch, 1011, 123, 0, "");    

  marker = (GetMicrosecondCount() - marker) / 1000.0;       

  Print(marker);

}


Выдает вот такой результат:

start

11.484

1.058

0.085

0.187

0.169

0.139

0.535

0.145

0.056

...

Поскольку эта функция вызывается редко в коде, то average получается 3-4 мсек, что странно...

 
Проверим
 
Похоже, новое поведение typename неоднозначно.
void OnStart()
{
  const MqlTick Array1[] = {};
  const string Array2[] = {};
  
  Print(typename(Array1)); // struct MqlTick const []
  Print(typename(Array2)); // string [] - куда const потерялся?
}