Ошибки, баги, вопросы - страница 2081

 
Anatoli Kazharski:

Эта проблема проявляется во всех индикаторах. В том числе и из стандартной поставки. Например, Moving Average:

//---

И после формирования нескольких баров:

//---

Попробуйте кто-нибудь у себя воспроизвести. Нужно понять, только ли у меня эта проблема.


Да, подтверждаю:

Terminal        MetaTrader 5 x64 build 1687 started (MetaQuotes Software Corp.)
Terminal        Windows 10 (Build 16299), x64 based PC, IE 11.00, UAC, Intel Core i3-3120M  @ 2.50GHz, RAM: 4473 / 8077 Mb, HDD: 330591 / 475588 Mb, GMT+02:00
Terminal        C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075

анимация:

Индикаторы не смещаются

 
Комментарии, не относящиеся к этой теме, были перенесены в "BUY_LIMIT, ORDER_TIME_DAY".
 
Vladimir Karputov:

Да, подтверждаю:

анимация:

Спасибо. Добавил в качестве дополнения ссылку на Ваше сообщение к заявке в сервисдеске. Нужно экстренное исправление этого бага, вся работа остановилась. 
 

fxsaber:

В обоих терминалах есть две вкладки - Торговля и Почта. Мне нужно, чтобы "Торговля" была все время активна. Но когда приходит внутреннее письмо (например, partial filll) от брокера, то вкладка переключается на "Почта".

Как отключить эту настоящую гадость? Ну не должно быть настолько навящего уведомления, да еще к совершенно рядовым письмам брокера, где он десятки раз за сутки автоматически сообщает об произошедших особенностях состоявшего исполнения ордеров. Не пойму, почему иногда происходит переключение на "Почта", а иногда - нет.

Как вырубить это? Вкладку "Почта" никогда не читаю, т.к. это Спам. Мягко говоря, раздражает такое реагирование GUI терминала на Спам.


Думаю, что с использованием WinApi можно реализовать функцию по переключению на нужную вкладку: торговля, баланс, что угодно.
Пробуйте сами реализовать, или закажите в фрилансе, надеюсь, там еще остались умельцы.

 
Sergey Dzyublik:

Думаю, что с использованием WinApi можно реализовать функцию по переключению на нужную вкладку: торговля, баланс, что угодно.
Пробуйте сами реализовать, или закажите в фрилансе, надеюсь, там еще остались умельцы.

Сам практиковал такой изврат. Хочется user-friendly GUI.

 
Aleksey Vyazmikin:

Опять памяти нет ему...

Хотя свободно ещё 7 гигабайт ОЗУ. Что ж это такое то?

Откройте тикет в сервисдеск. Приложите эксперта и настройки оптимизации.

+ опишите операционку, битность, конфигурацию системы.

 
Alexey Da:

Откройте тикет в сервисдеск. Приложите эксперта и настройки оптимизации.

+ опишите операционку, битность, конфигурацию системы.


Да я не знаю как воспроизвести всё это - прошлую неделю каждый день такое сообщение появлялось, при этом советник не работал вообще никакой. А на днях вот с оптимизацией... потом всё заработало после закрытия всех программ.

Может ли это быть конфликт между программами? Заметил, что баг был всегда, когда был открыт браузер Опера.

 

В этой теме выяснилась интересная вещь про быстродействие команды Comment() в MT4 и MT5. В МТ5 эта команда работает в ~2000 раз (!!!) медленнее, чем в MT4. 

Вот тестировочный код, который работает на двух платформах:

#property script_show_inputs
#include <Canvas\Canvas.mqh>

input uint   FontSize=12;                                   // размер шрифта
input uint   Count=1000;                                    // размерность цикла
input ENUM_COLOR_FORMAT format=COLOR_FORMAT_ARGB_NORMALIZE; //Способ обработки цвета

void OnStart()
  {
   CCanvas Text;
   ulong ColorScreen=ChartGetInteger(0,CHART_COLOR_BACKGROUND,0);

   Text.FontSet("Arial",FontSize);
   string str="Необходимо подождать.Выполняется проход цикла №: = ";
   int H=Text.TextHeight(str);
   int W=Text.TextWidth(str+"00000");
   if(!Text.CreateBitmapLabel(0,0,"FONT",2,130,W,H,format)) Print("Error creating canvas: ",GetLastError());

   ulong t1=1,t2=1,t0;
   uint j=0;
   color clr=(color)ARGB(255,255^GETRGBR(ColorScreen),255^GETRGBG(ColorScreen),255^GETRGBB(ColorScreen));
   t0=GetMicrosecondCount();
   for(j=0;j<Count;j++)
     {
      Comment(str+IntegerToString(j));
      if (IsStopped()) break;
     }
   t1=GetMicrosecondCount()-t0;

   t0=GetMicrosecondCount();
   for( j=0;j<Count;j++)
     {
      Text.Erase((color)ColorScreen);
      Text.TextOut(0,0,str+IntegerToString(j),clr);
      Text.Update();
      if (IsStopped()) break;
     }
   t2=GetMicrosecondCount()-t0;
      Text.Erase((color)ColorScreen);
      Text.TextOut(0,0,"Время Comment = "+IntegerToString(t1)+" Время Canvas = "+IntegerToString(t2),clr);
      Text.Update();
      Sleep(30000);
     
   Text.Destroy();
   Comment("");
  }
//+------------------------------------------------------------------+

Это разве ОК?

Файлы:
 
Nikolai Semko:

В этой теме выяснилась интересная вещь про быстродействие команды Comment() в MT4 и MT5. В МТ5 эта команда работает в ~2000 раз (!!!) медленнее, чем в MT4. 

Вот тестировочный код, который работает на двух платформах:

Это разве ОК?

Да, все верно и правильно.

В МТ4 функция Comment просто меняет внутреннее текстовое поле комментария без попыток отобразить его на чарте. То есть, коммент когда-нибудь на очередной штатной отрисовке чарта покажется, но само изменение коммента не вызывает перерисовки чарта. Если быстро менять коммент, то его изменения просто не увидите на чарте.

В МТ5 функция Comment явным образом вызывает перерисовку чарта, так как в приоритет ставится именно отображение коммента на чарте. Иначе функция бесполезна.

Разница как раз в этом.


Если в МТ4 после вызова Comment поставить принудительно ChartRedraw(), то поведение все равно не будет как в МТ5. ChartRedraw() в Метатрейдер 4 игнорирует значение коммента и сам решается, надо ли обновить чарт с последнего кадра. Конечно, при отсутствии сотен котировок в секунду, которые вызывают инвалидацию данных чарта, ChartRedraw решает "зачем отрисовать неизменный график" и пропускает отрисовку кадра.

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

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


Отсюда дополнительные выводы при проведении бенчмарков:

  • нельзя считать вызов ChartRedraw реальной отрисовкой чарта

  • всегда нужно знать и доказывать утверждения "почему кадр отрисуется" и "инвалидирую ли я внутреннюю картину рынка, чтобы терминал решил перерисовать кадр"

  • нельзя во время бенчмарков делать множественные выводы Comment в МТ5, всегда нужно думать о том, как вы влияете на отрисовку

  • в МТ5 более правильная система изменения объектов на чарте и нужно четко понимать последствия микса read/write команд
    рекомендуется не миксовать read/write команды, а делать раздельно массовые read и массовые write.

  • частая перерисовка чартов в бенчмарках ведет к большой зависимости результатов от графической карты.
    по сути некоторые тесты могут вылиться в тестирование графической карты, а не алгоритмов или функций. тест на ноутбуке и стационарном компьютере могут показать кратно разные результаты просто из-за 3-5 кратно медленной видеокарты

Эти ошибки постоянно совершаются всеми подряд.

 
Renat Fatkhullin:

Да, все верно и правильно.

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

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