Новая версия платформы MetaTrader 5 build 2530: Сортировка в Обзоре рынка и удобная работа с результатами оптимизации - страница 14

 

Хотелось бы один раз выяснить, как устроено.

При каком-нибудь обновлении сказано, что такая-то штатная функция оптимизирована и значительно ускорена. Например, HistorySelect (или CopyTicks*).

Когда это обозначает, что для получения ускорения нужно перекомпилировать советник под новый билд? А когда этого не требуется?

 
fxsaber:

Хотелось бы один раз выяснить, как устроено.

При каком-нибудь обновлении сказано, что такая-то штатная функция оптимизирована и значительно ускорена. Например, HistorySelect (или CopyTicks*).

Когда это обозначает, что для получения ускорения нужно перекомпилировать советник под новый билд? А когда этого не требуется?

Не требуется.


Но вообще компилятор постоянно улучшается, так что время от времени нужно перекомпилировать программы. Особенно после релизов.

 
MetaQuotes:
Не требуется.


Но вообще компилятор постоянно улучшается, так что время от времени нужно перекомпилировать программы. Особенно после релизов.

Понял, Спасибо!

 
prostotrader:

В пятницу (10.07.2020) Открытие обновил ПО шлюза ФОРТС  МТ5, 

появились огромные задержки выставления ордеров.

Откатите, пожалуйста, на старую версию.

Брокер говорит, что сам сделать откат не может.

Открывашка перегрузила свой сервер (был сбой)

и все заработало нормально

2020.07.17 19:12:56.076 Trades  'ххххх': cancel order #129468059 sell limit 3 FEES-12.20 at 19528 placed for execution in 3.596 ms
2020.07.17 19:12:56.091 Trades  'ххххх': buy limit 1 NOTK-12.20 at 106055 placed for execution in 3.873 ms
 
Renat Fatkhullin:

в любом случае будем дальше искать и оптимизировать.

b2538 - лагов стало значительно меньше на боевом советнике. При работе с историей проскакивают еще проблемы.

2020.07.17 22:53:12.463 Alert: Time[::HistorySelect(TimeMsc/1000,INT_MAX)] = 20 ms.
 
fxsaber:

b2538 - лагов стало значительно меньше на боевом советнике. При работе с историей проскакивают еще проблемы.

В 2539 должно стать лучше.

Проверьте, пожалуйста.

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


2539 Build.
Webrequest из сервиса по прежнему работает не корректно.
Ответ сервера 200, приходит только на первом добавлении сервиса. На последующих запусках сервиса, ответ 1001.
Если удалить и добавить сервис заново, то всё повторяется.
Первый запуск 200, последующие 1001.

P.S.
Ренат, добавьте пожалуйста в Webrequest keep-alive режим, c автоматическим реконнектом.
Что то на подобие этого, с флагом True устанавливается keep-alive режим.

WebRequest("GET", url, header, 5000, data, result, resHeader, KeepAliveTrue);

Или ввести новую функцию KeepAlive() для Webrequest, которая будет устанавливать этот режим.
Это позволит снизить время запроса к серверам, которые поддерживают keep-alive.
Добавьте пожалуйста.

Файлы:
 
2020.07.19 06:42:06.150 Terminal        MetaTrader 5 x64 build 2539 started for MetaQuotes Software Corp.


Массив (string) содержит порядка 48690 элементов.

ArrayPrint в принципе может распечатать все элементы или стоит какое-то ограничение?


При таком варианте

ArrayPrint(array,2);

я по-умолчанию использую флаг 

ARRAYPRINT_LIMIT – print only the first 100 and the last 100 array elements. Use if you want to print only a part of a large array.

и получаю первые и последние 100 элементов. (об этом кстати говорит подсказка после 100-й строки)

        [100-9637] 9538 elements skipped by ARRAYPRINT_LIMIT flag


Вариант два:

         ArrayPrint(array,2,NULL,0,ARRAYPRINT_HEADER|ARRAYPRINT_INDEX|ARRAYPRINT_ALIGN);

(как видите, среди флагов я не указал ARRAYPRINT_LIMIT - предполагаю, что теперь должен распечататься весь массив)

но в результате получаю только первые 50 строк.


Код скрипта:

//+------------------------------------------------------------------+
//|                                         All Symbols all path.mq5 |
//+------------------------------------------------------------------+
#property version   "1.002"
#property script_show_inputs
//---
input bool InpVariant   = true;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   string array[][5]; // [][0] - Symbol, [][1] - Path, [][2] - Volume min, [][3] - Contract size, [][4] - Filling mode
   int total=SymbolsTotal(false);
   ArrayResize(array,total);
   for(int i=0; i<total; i++)
     {
      string name=SymbolName(i,false);
      array[i][0]=name;
      array[i][1]=SymbolInfoString(name,SYMBOL_PATH);
      array[i][2]=DoubleToString(SymbolInfoDouble(name,SYMBOL_VOLUME_MIN),2);
      array[i][3]=DoubleToString(SymbolInfoDouble(name,SYMBOL_TRADE_CONTRACT_SIZE),2);
      array[i][4]=IntegerToString(SymbolInfoInteger(name,SYMBOL_FILLING_MODE));
     }
   Print("ArraySize(array): ",ArraySize(array));
   if(InpVariant)
      ArrayPrint(array,2);
      else
         ArrayPrint(array,2,NULL,0,ARRAYPRINT_HEADER|ARRAYPRINT_INDEX|ARRAYPRINT_ALIGN);
  }
Файлы:
 

build 2539

input double InVolume = 0.07; //Order Volume
//+------------------------------------------------------------------+
int OnInit()
{
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnTick()
{

}
//+------------------------------------------------------------------+

если кликнуть в окно настроек, и кликнуть для редактирования 0.07 , то значение 0.07 будет удалено (будет пусто)


если по умолчанию сделать 

input double InVolume = 0.05; //Order Volume

то окно настроек редактирует значение 0.05 без удаления, т.е. как раньше было