Новая версия платформы MetaTrader 5 build 2980: Push-уведомления о торговых операциях - страница 22

 
Rashid Umarov:

Не воспроизводится в 3010 билде

Это был не пример для воспроизведения указанной ошибки, а обоснованный ответ на сообщение пользователя, что он якобы что то там непонятное у себя проверил и неуместный совет по поиску ошибки (искать там где ее заведомо нет)

 
b3010, просьба исправить поведение на прежнее (b2958).

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

Новая версия платформы MetaTrader 5 build 2940: Перенос витрин MQL5-сервисов в рабочую область и обновление дизайна

fxsaber, 2021.06.19 14:39

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

#property script_show_inputs

input bool inFlag = true;  // Проверка истории с открытием ордеров
input datetime inFrom = 0; // Не ноль приведет к ошибке и с новыми ордерами

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

void OnTick()
{    
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick) && Tick.ask)
  {
    Print("------------\n" + (string)inFlag); // Отделили строки разных запусков скрипта.
  
    if (inFlag) // Проверка на новых ордерах.
    {
      // Попытка сформировать кеш на случай, если начальная дата будет всегда постоянной, но ненулевой.
      HistorySelect(inFrom, INT_MAX);
      
      Print("Create/Delete orders.");
      
      // Создали первый ордер.
      const TICKET_TYPE Ticket1 = OrderSend(_Symbol, OP_BUYLIMIT, 0.1, Tick.ask - 1000 * _Point, 0, 0, 0);
      
      Sleep(2000); // Подождали и создали второй ордер.
      const TICKET_TYPE Ticket2 = OrderSend(_Symbol, OP_BUYLIMIT, 0.1, Tick.ask - 1000 * _Point, 0, 0, 0);
      
      Print(Ticket1); // Тикет первого.
      Print(Ticket2); // Тикет второго.
      
      OrderDelete(Ticket2); // Удалили второй - попал в историю.
      
      Sleep(2000); // Подождали и удалили первый - попал в историю.
      OrderDelete(Ticket1);
    
      // Проверка последовательности ордеров в истории - последних двух.
      if (HistorySelect(inFrom, INT_MAX))
      {
        Print("Check the History. inFrom = " + (string)inFrom);
        
        const int Total = HistoryOrdersTotal();
        
        for (int i = Total - 2; i < Total; i++)
          Print(HistoryOrderGetTicket(i)); // Распечатываем тикеты в конце таблицы. 
      }
  
      ExpertRemove();  
    }  
  }  
}


Результат Тестера.

2021.06.19 15:30:46.582 Core 1  EURUSD,M1: testing of Experts\Test9.ex5 from 2021.06.18 00:00 to 2021.06.19 00:00 started with inputs:
2021.06.19 15:30:46.582 Core 1    inFlag=true
2021.06.19 15:30:46.582 Core 1    inFrom=0
2021.06.19 15:30:46.582 Core 1  EURUSD : real ticks begin from 2021.03.15 00:00:00
2021.06.19 15:30:46.582 Core 1  2021.06.18 00:00:00   ------------
2021.06.19 15:30:46.582 Core 1  2021.06.18 00:00:00   true
2021.06.19 15:30:46.582 Core 1  2021.06.18 00:00:00   Create/Delete orders.
2021.06.19 15:30:46.582 Core 1  2021.06.18 00:00:00   buy limit 0.1 EURUSD at 1.18097 (1.19057 / 1.19097)
2021.06.19 15:30:46.582 Core 1  2021.06.18 00:00:02   buy limit 0.1 EURUSD at 1.18097 (1.19057 / 1.19069)
2021.06.19 15:30:46.582 Core 1  2021.06.18 00:00:02   2
2021.06.19 15:30:46.582 Core 1  2021.06.18 00:00:02   3
2021.06.19 15:30:46.582 Core 1  2021.06.18 00:00:02   order canceled [#3 buy limit 0.1 EURUSD at 1.18097]
2021.06.19 15:30:46.582 Core 1  2021.06.18 00:00:04   order canceled [#2 buy limit 0.1 EURUSD at 1.18097]
2021.06.19 15:30:46.582 Core 1  2021.06.18 00:00:04   Check the History. inFrom = 1970.01.01 00:00:00
2021.06.19 15:30:46.582 Core 1  2021.06.18 00:00:04   3
2021.06.19 15:30:46.582 Core 1  2021.06.18 00:00:04   2
2021.06.19 15:30:46.582 Core 1  2021.06.18 00:00:04   ExpertRemove() function called

Все четко и правильно в Тестере! Это не повод ломать Тестер. Это повод вернуть хотя бы поведение Терминала к тому, что было еще в b2958. Там работало только для inFrom = 0, но работало. В Тестере работает для любого inFrom правильно. Это абсолютно логично.


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


Заметьте, не упоминаю сортировку по какому-либо признаку во время работы советника. Просто говорю о дозаписи в конец (а не в середину) новых элементов истории.

Если же говорить о сортировке, то она нужна только один раз - при запуске советника. И сортировка должна быть по ORDER_TIME_DONE_MSC (при совпадающих значениях - по тикету). Тогда будет полная однозначность HistorySelect-таблицы во время работы и сразу после запуска.


 

Переход на b3010 вернул все взадEX5 стал 1100 Кб при времени компиляции 60 секунд. Просьба пояснить.

 

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

Новая версия платформы MetaTrader 5 build 2980: Push-уведомления о торговых операциях

fxsaber, 2021.07.31 18:24

Так возможно как-то решить эту проблему в ME?

2021.07.31 19:20:14.310 Storage invalid MQL5 login or password

Длина пароля - 32 символа. В Терминале все отлично соединяется.

Что нужно сделать с моей стороны, чтобы помочь решить эту давнюю проблему?

 
fxsaber:

Переход на b3010 вернул все взадEX5 стал 1100 Кб при времени компиляции 60 секунд. Просьба пояснить.

насколько помню, время компиляции, размер результирующего файла и его контрольные суммы каждый раз являются произвольными. Это ФИЧА

 
Maxim Kuznetsov:

насколько помню, время компиляции, размер результирующего файла и его контрольные суммы каждый раз являются произвольными. Это ФИЧА

В 2-3 раза изменение. Это другое.

 
        Access violation at 0x00000198F0D8AABD read to 0x0000000000000000 in 'C:\Program Files\MetaTrader 5\MQL5\Experts\Test.ex5'
           crash -->  00000198F0D8AABD FF10              call       qword near [rax]
                      00000198F0D8AABF 488B16            mov        rdx, [rsi]
                      00000198F0D8AAC2 4889F9            mov        rcx, rdi
                      00000198F0D8AAC5 41FFD5            call       r13
                      00000198F0D8AAC8 49BC204BF6F09801  mov        r12, 0x198f0f64b20
                                       0000
                      00000198F0D8AAD2 498B74241C        mov        rsi, [r12+0x1c]
                      00000198F0D8AAD7 4885F6            test       rsi, rsi
        
        00: 0x00000198F0D8AABD
        01: 0x0000000000310033

После деинициализации.

 
fxsaber:

В 2-3 раза изменение. Это другое.

тут ещё совпадает с шикарными обновами Win и его крипто-сервисов, по времени так точно.

Стало дольше шифроваться (греть ключи и проч)

 
Maxim Kuznetsov:

тут ещё совпадает с шикарными обновами Win и его крипто-сервисов, по времени так точно.

Стало дольше шифроваться (греть ключи и проч)

Откат на 3007 - все летает.

 
fxsaber:

Откат на 3007 - все летает.

оно-ж (3007 и выш) общается с DRM и прочими сервисам Win ? общается...подлежит..

и вся криптота обновляется в преддверии в 11. Оно потом ещё нестабильно будет год-полтора минимум

так что скорость компиляции и защиты (они-же не различимы) не мерило. 

с размерами да,почти в пару раз это перебор...надо объяснять

Причина обращения: