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

 
Anton:

Желательно указывать хоть какую-то информацию. Билд терминала, сервер брокера. Лучше сразу лог терминала.

Ветка про 2690 - подумал, что его обсуждаем

2020.11.19 17:51:09.977 Terminal        Открытие Брокер x64 build 2690 started for АО ''Открытие Брокер''
2020.11.19 17:51:09.979 Terminal        Windows 7 Service Pack 1 build 7601, AMD FX-8350 Eight-Core Processor, 12 / 23 Gb memory, 19 / 499 Gb disk, IE 10, Admin, GMT+3
2020.11.19 17:51:09.979 Terminal        F:\FX\Открытие Брокер_Demo
2020.11.19 17:51:11.682 MQL5.community  activated for '-aleks-', balance: 685.17 (frozen: 30.00)
2020.11.19 17:51:11.979 MQL5.chats      activated for '-Aleks-'
2020.11.19 17:51:29.719 Network '41443': authorized on Open-Broker through Access Server II (ping: 22.00 ms, build 2560)
2020.11.19 17:51:29.719 Network '41443': previous successful authorization performed from 85.140.233.137 on 2020.11.19 17:49:01
2020.11.19 17:51:29.774 Network '41443': terminal synchronized with АО ''Открытие Брокер'': 0 positions, 0 orders, 3942 symbols, 28 spreads
 
Aleksey Vyazmikin:

Ветка про 2690 - подумал, что его обсуждаем

Т.е. были подключены к

Access Server II (ping: 22.00 ms, build 2560)

и терминал потерял соединение. Потом переподключились на другой сервер и соединение было установлено.

Вот это все и надо показывать в логах. Можно в личку.

 
Anton:

Т.е. были подключены к

и терминал потерял соединение. Потом переподключились на другой сервер и соединение было установлено.

Вот это все и надо показывать в логах. Можно в личку.

Сбросил весь лог в личку.

Сервер не знаю какой был - по логу вроде как одинаковый ip, но я точно поменял в списке.

А дамп нужен терминала?

Со вчерашней ошибкой что делать в следующий раз - что предоставить?


 

Уважаемые разработчики.
Почему для массива фиксированного размера происходит копирование элементов "хвоста" ?
Пример из документации. https://www.mql5.com/ru/docs/array/arrayremove

   //объявим массив фиксированного размера и заполним значениями 
   int array[10]; 
   for(int i=0;i<10;i++) 
   { 
      array[i]=i; 
   } 
   //покажем массив до удаления элементов 
   Print("До вызова ArrayRemove()"); 
   ArrayPrint(array); 
   //удалим 2 элемента из массива и покажем новый состав 
   ArrayRemove(array,4,2); 
   Print("После вызова ArrayRemove()"); 
   ArrayPrint(array);   
2020.11.19 22:36:48.650 TestScript (ENQZ20,M1)  До вызова ArrayRemove()
2020.11.19 22:36:48.650 TestScript (ENQZ20,M1)  0 1 2 3 4 5 6 7 8 9
2020.11.19 22:36:48.650 TestScript (ENQZ20,M1)  После вызова ArrayRemove()
2020.11.19 22:36:48.650 TestScript (ENQZ20,M1)  0 1 2 3 6 7 8 9 8 9

Разве это правильная логика? 
Ведь создаются дубли элементов!

   //объявим массив фиксированного размера и заполним значениями 
   int array[10]; 
   for(int i=0;i<10;i++) 
   { 
      array[i]=i; 
   } 
   //покажем массив до удаления элементов 
   Print("До вызова ArrayRemove()"); 
   ArrayPrint(array); 
   //удалим 10 элементов из массива и покажем новый состав 
   ArrayRemove(array,0,10); 
   Print("После вызова ArrayRemove()"); 
   ArrayPrint(array);
2020.11.19 22:46:39.760 TestScript (ENQZ20,M1)  До вызова ArrayRemove()
2020.11.19 22:46:39.761 TestScript (ENQZ20,M1)  0 1 2 3 4 5 6 7 8 9
2020.11.19 22:46:39.761 TestScript (ENQZ20,M1)  После вызова ArrayRemove()
2020.11.19 22:46:39.761 TestScript (ENQZ20,M1)  0 1 2 3 4 5 6 7 8 9


Предлагаю исправить поведение ArrayRemove(), и "хвост" заполнять:
или значением NULL
или значением ноль для численного типа массива
или значением "" для строкового типа массива
или значением '\0' для символьного типа массива

Вам виднее, чем лучше заполнить "хвост" для универсальности функции, но заполнение дублями, не верная логика.

Документация по MQL5: Операции с массивами / ArrayRemove
Документация по MQL5: Операции с массивами / ArrayRemove
  • www.mql5.com
Если функция используется для массива фиксированного размера, то сам размер массива не меняется: при этом происходит физическое копирование оставшегося "хвоста" в позицию . Для точного понимания работы функции смотрите пример ниже. "Физическое" копирование означает, что копируемые объекты не создаются с помощью вызова конструктора или оператора...
 

Какое реалистичное тестирования по всем тикам на реальных данных - даже сбой сервера брокера имитируется - стопы не срабатывают - Брокер Открытие!


 
Roman:

Почему для массива фиксированного размера происходит копирование элементов "хвоста" ?

Разве это правильная логика? 

В данном случае единственно правильная логика, это "запретить" ArrayRemove. Т.е. вызов ArrayRemove для массива фиксированного размера должен возвращать false. А иначе это в любом случае будет приводить к трудноуловимым ошибкам

 
A100:

В данном случае единственно правильная логика, это "запретить" ArrayRemove. Т.е. вызов ArrayRemove для массива фиксированного размера должен возвращать false

Зачем запрещать то?  ArrayRemove работает с элементами массива.
Просто не корректно заполняется "хвост" для массива фиксированного размера , создаются дубли элементов.
Логичнее их заNULLять

 
Aleksey Vyazmikin:

Какое реалистичное тестирования по всем тикам на реальных данных - даже сбой сервера брокера имитируется - стопы не срабатывают - Брокер Открытие!


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


 
Aleksey Vyazmikin:

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


В открывашке бывает бид выше аска стоит. Надо все эти аномалии проверять.

 
Roman:

Зачем запрещать то?  ArrayRemove работает с элементами массива.
Просто не корректно заполняется "хвост" для массива фиксированного размера , создаются дубли элементов.
Логичнее их заNULLять

А самостоятельно заNULLить что мешает? Ведь всего одна строка кода.