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

 
Vitaliy Kuznetsov #:

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


Меню "Файл" - "Открыть удалённый"

 
Slava #:

Меню "Файл" - "Открыть удалённый"

Спасибо. Удивлён, что есть такой функционал, только не додумался там искать.

 

Одно из окон с результатами оптимизации не реагирует на кнопку закрытия.

Всё остальное (изменение вида отображения результатов, вкл/выкл сетки, сворачивание/разворачивание, ресайз) отрабатывается нормально.

Другие подобные окна нормально закрылись.

2023.12.05 14:05:42.133 Terminal        MetaTrader 5 x64 build 4073 started for MetaQuotes Software Corp.
2023.12.05 14:05:42.135 Terminal        Windows 11 build 22000 on Wine 8.21 Linux 6.1.0-13-amd64, 3 x Intel Xeon E312xx (Sandy Bridge), AVX, 7 / 8 Gb memory, 31 / 39 Gb disk, GMT+3
 
  При двойном клике на индикаторный буфер нельзя задать собственное поведение, кроме изменения параметров индикатора.  Логично предоставить опцию пользовательского события.
 
JRandomTrader #:

Одно из окон с результатами оптимизации не реагирует на кнопку закрытия.

Древняя проблема.
 

Нашелся ещё баг со временем закрытия сделки по СЛ в миллисекундах (DEAL_TIME_MSC). Эксперт:

#include <Trade\Trade.mqh> //подключаем библиотеку для совершения торговых операций
CTrade Trade;              // объект для выполнения торговых операций
int stop=0;
void OnTick(){
  if(stop > 1){return;}//2 первые сделки
  MqlTick Tick;
  if (SymbolInfoTick(_Symbol, Tick) ){Print("--Main (",_Symbol,") tick time=",MscToString(Tick.time_msc));}
  if (SymbolInfoTick("GBPUSD", Tick)){
     Print("===GBPUSD tick time=",MscToString(Tick.time_msc)," ask=",Tick.ask," bid=",Tick.bid);

     Trade.Buy (1,"GBPUSD",Tick.ask, Tick.ask - 10 * _Point, Tick.ask + 10 * _Point);
     //Trade.Sell(1,_Symbol,Tick.bid, 0, 0);
  }
  stop++;
}
void OnDeinit(const int  reason ){
   HistorySelect(0,TimeCurrent());
   for(int i=0;i<HistoryDealsTotal();i++){
      ulong deal_ticket=    HistoryDealGetTicket(i);
      long tr_time=HistoryDealGetInteger(deal_ticket,DEAL_TIME_MSC);

      Print("POSITION_ID:",HistoryDealGetInteger(deal_ticket,DEAL_POSITION_ID)," deal #",deal_ticket," at ",MscToString(tr_time)," Price:",DoubleToString(HistoryDealGetDouble(deal_ticket,DEAL_PRICE),5)," DEAL_TYPE: ",HistoryDealGetInteger(deal_ticket,DEAL_TYPE));
     }
}

string MscToString(long ms){return (string)(datetime)(ms/1000)+"."+(string)(ms%1000);}

Торгует в коде на GBPUSD, а запускаем на другом инструменте EURGBP. ДЦ: Ал-ри, хедж, ECN счет.


Печатает:

1-й тик
2023.05.29 00:15:00   --Main (EURGBP) tick time=2023.05.29 00:15:00.488
2023.05.29 00:15:00   ===GBPUSD tick time=2023.05.29 00:15:00.189 ask=1.23441 bid=1.23431
...
2-й тик
2023.05.29 00:15:16   --Main (EURGBP) tick time=2023.05.29 00:15:16.417
2023.05.29 00:15:16   ===GBPUSD tick time=2023.05.29 00:15:00.189 ask=1.23441 bid=1.23431 - по GBPUSD новых тиков еще не было
...
Печать сделок:
2023.05.29 23:54:58   POSITION_ID:0 deal #1 at 2023.05.29 00:00:00.0 Price:0.00000 DEAL_TYPE: 2
2023.05.29 23:54:58   POSITION_ID:2 deal #2 at 2023.05.29 00:15:00.488 Price:1.23441 DEAL_TYPE: 0
2023.05.29 23:54:58   POSITION_ID:2 deal #3 at 2023.05.29 00:15:00.139 Price:1.23402 DEAL_TYPE: 1
2023.05.29 23:54:58   POSITION_ID:4 deal #4 at 2023.05.29 00:15:16.417 Price:1.23441 DEAL_TYPE: 0
2023.05.29 23:54:58   POSITION_ID:4 deal #5 at 2023.05.29 00:16:01.617 Price:1.23402 DEAL_TYPE: 1

Забыли обновить время закрытия сделки в мс 15:00.139, оно получается раньше времени открытия 15:00.488 .

Предполагаю, что время закрытия не обновляется, только в случае, если сделка открылась и закрылась по цене тика, который был раньше первого тика основного инструмента EURGBP. Т.к. все последующие тики (как видно по 2-му, имеют правильное время закрытия)

П.С.

Заметил эту ошибку, т.к. печатал сделки через библиотеку Report https://www.mql5.com/ru/code/18801

Там происходит корректировка ошибок по времени открытия/закрытия. И эта сделка просто была исключена из отчета:




На что сразу обратил внимание. Пришлось искать, где пропавшая сделка. Сделал проверочный код (см выше), который и показал, что ошибка в тестере, а не в Report-e

Report
Report
  • www.mql5.com
Библиотека для MetaTrader 4/5, которая позволяет формировать отчеты по истории торгов.
 
Только что заметил
2023.05.29 00:15:00   ===GBPUSD tick time=2023.05.29 00:15:00.189 ask=1.23441 bid=1.23431
...
2023.05.29 00:15:00   stop loss triggered #2 buy 1 GBPUSD 1.23441 sl: 1.23431 tp: 1.23451 [#3 sell 1 GBPUSD at 1.23431]
Т.е.  сделка сразу же закрылась при открытии, т.к. bid == sl.
Но время закрытия все равно неверное, не должно быть меньше времени открытия. Видимо должно быть = 15:00.488
 
Forester #:

Нашелся ещё баг со временем закрытия сделки по СЛ в миллисекундах (DEAL_TIME_MSC).

Вы проделали огромную работу. К сожалению, даже мне (заинтересованному лицу) приходится очень сильно напрягаться, чтобы въехать в суть описания бага. Потому боюсь, что MQ не уделят должного внимания данной проблеме. Как показать, чтобы MQ заинтересовались - не знаю. Текущий вариант - очень тяжелый. Скорее всего, только один человек его внимательно посмотрит. И это будет не MQ.
 
fxsaber #:
Вы проделали огромную работу. К сожалению, даже мне (заинтересованному лицу) приходится очень сильно напрягаться, чтобы въехать в суть описания бага. Потому боюсь, что MQ не уделят должного внимания данной проблеме. Как показать, чтобы MQ заинтересовались - не знаю. Текущий вариант - очень тяжелый. Скорее всего, только один человек его внимательно посмотрит. И это будет не MQ.
Вот с утра и до обеда искал, делал тестовый советник и описывл ситуацию. Не хотелось бы, чтобы этот труд оказался напрасным. Точность работы тестера - тоже в интересах MQ. Даже с одной неверной сделкой.

П.С. Вместо работы над советником уже 3-й раз за последние 8 дней, трачу время на баги ((. Не туда время уходит, куда хотелось бы. Черный ящик тяжелее исследовать, чем свой код.
 
string MscToString(long ms){return (string)(datetime)(ms/1000)+"."+IntegerToString(ms%1000, 3, '0');}