Обсуждение статьи "Прочие классы в библиотеке DoEasy (Часть 70): Расширение функционала и автообновление коллекции объектов-чартов"

 

Опубликована статья Прочие классы в библиотеке DoEasy (Часть 70): Расширение функционала и автообновление коллекции объектов-чартов:

В статье расширим функционал объектов-чартов, организуем навигацию по графикам, создание скриншотов, сохранение и применение шаблонов к графикам. Также сделаем автоматическое обновление коллекции объектов-чартов, их окон и индикаторов в них.

Осталось протестировать создание скриншотов текущего графика. Каждое нажатие кнопки будет создавать скриншот графика в определённом размере. Первое нажатие — скриншот 800x600, второе нажатие — скриншот 750x562, третье нажатие — скриншот в текущем размере графика:


После создания трёх скриншотов в разных разрешениях, о чём в журнале библиотека сделала записи,

CChartObj::ScreenShot800x600: Screenshot created: DoEasy\ScreenShots\TestDoEasyPart70_EURUSD_H1_2021.04.13_14.02.25.png (800 x 600)
CChartObj::ScreenShot750x562: Screenshot created: DoEasy\ScreenShots\TestDoEasyPart70_EURUSD_H1_2021.04.13_14.02.28.png (750 x 562)
CChartObj::ScreenShotWndSize: Screenshot created: DoEasy\ScreenShots\TestDoEasyPart70_EURUSD_H1_2021.04.13_14.02.29.png (726 x 321)

мы вдобавок поглядели содержимое папки, в которую эти скриншоты сохраняются.
Перед созданием скриншотов я поводил курсором в разных местах двух окон текущего графика, и в комментарии на графике можно увидеть время, цену, номер подокна и координаты X и Y курсора в пикселях. У координаты Y курсора есть два значения. Первое значение отображает координату Y относительно начальных координат главного окна символа, второе же значение, отображаемое (в скобках), показывает значение Y-координаты относительно верхней границы окна, в котором находится курсор.

Автор: Artyom Trishkin

 

Limit Order, кнопкой DeletePending, дает много одинаковых событии OnChartEvent а должны быть разные же

Или через Bulk Operations Delete Limit Orders  тоже дает много одинаковых событии

Если закрывать в ручную то события, идут последовательно 


2023.03.07 14:58:31.385 TestDoEasy131 (GBPUSD.c,H1)     - Pending order removed: 2023.03.07 14:57:59.055 -
2023.03.07 14:58:31.385 TestDoEasy131 (GBPUSD.c,H1)     GBPUSD.c Deleted 0.10 Pending order Buy Limit #89090285 at price 1.19636, sl 1.19486, tp 1.19786, Magic number 4718715 (123), G1: 8, G2: 4
2023.03.07 14:58:31.386 TestDoEasy131 (GBPUSD.c,H1)     - Pending order removed: 2023.03.07 14:57:58.395 -
2023.03.07 14:58:31.386 TestDoEasy131 (GBPUSD.c,H1)     GBPUSD.c Deleted 0.10 Pending order Buy Limit #89090282 at price 1.19640, sl 1.19490, tp 1.19790, Magic number 10223739 (123), G1: 12, G2: 9
2023.03.07 14:58:31.386 TestDoEasy131 (GBPUSD.c,H1)     - Pending order removed: 2023.03.07 14:58:00.613 -
2023.03.07 14:58:31.386 TestDoEasy131 (GBPUSD.c,H1)     GBPUSD.c Deleted 0.10 Pending order Buy Limit #89090287 at price 1.19636, sl 1.19486, tp 1.19786, Magic number 6357115 (123), G1: 1, G2: 6
2023.03.07 14:58:31.386 TestDoEasy131 (GBPUSD.c,H1)     - Pending order removed: 2023.03.07 14:57:59.669 -
2023.03.07 14:58:31.386 TestDoEasy131 (GBPUSD.c,H1)     GBPUSD.c Deleted 0.10 Pending order Buy Limit #89090286 at price 1.19636, sl 1.19486, tp 1.19786, Magic number 393339 (123), G1: 6
2023.03.07 14:58:31.392 TestDoEasy131 (GBPUSD.c,H1)     MAGIC = %d10223739
2023.03.07 14:58:31.392 TestDoEasy131 (GBPUSD.c,H1)     2023.03.07 14:58:30
2023.03.07 14:58:31.392 TestDoEasy131 (GBPUSD.c,H1)     OnChartEvent: Pending order removed
2023.03.07 14:58:31.394 TestDoEasy131 (GBPUSD.c,H1)     MAGIC = %d10223739
2023.03.07 14:58:31.394 TestDoEasy131 (GBPUSD.c,H1)     2023.03.07 14:58:30
2023.03.07 14:58:31.394 TestDoEasy131 (GBPUSD.c,H1)     OnChartEvent: Pending order removed
2023.03.07 14:58:31.395 TestDoEasy131 (GBPUSD.c,H1)     MAGIC = %d10223739
2023.03.07 14:58:31.395 TestDoEasy131 (GBPUSD.c,H1)     2023.03.07 14:58:30
2023.03.07 14:58:31.395 TestDoEasy131 (GBPUSD.c,H1)     OnChartEvent: Pending order removed
2023.03.07 14:58:31.397 TestDoEasy131 (GBPUSD.c,H1)     MAGIC = %d10223739
2023.03.07 14:58:31.397 TestDoEasy131 (GBPUSD.c,H1)     2023.03.07 14:58:30
2023.03.07 14:58:31.397 TestDoEasy131 (GBPUSD.c,H1)     OnChartEvent: Pending order removed
 
BillionerClub #:

Limit Order, кнопкой DeletePending, дает много одинаковых событии OnChartEvent а должны быть разные же

Или через Bulk Operations Delete Limit Orders  дает много одинаковых событии

Если закрывать в ручную то события, идут последовательно 

Вообще не понял о чём Вы...
 
Artyom Trishkin #:
Вообще не понял о чём Вы...

При закрытии отложенных 10 ордеров идут 10 событии но они одинаковые 

Только в ручную если закрывать идут разные события  в OnChartEvent

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {


//--- If working in the tester, exit
//if(MQLInfoInteger(MQL_TESTER))
//   return;
   int idx=id-CHARTEVENT_CUSTOM;
//--- Извлекаем из lparam (1) миллисекунды времени события, (2) причину, (3) источник события и (4) устанавливаем точное время события
   ushort msc=engine.EventMSC(lparam);
   ushort reason=engine.EventReason(lparam);   ushort source=engine.EventSource(lparam);
   long time=::TimeCurrent()*1000+msc;
//--- Обработка торговых событий
   if(idx>TRADE_EVENT_NO_EVENT && idx<TRADE_EVENTS_NEXT_CODE)
     {
      //--- Получим список всех торговых событий
      CArrayObj *list=engine.GetListAllOrdersEvents();
      if(list==NULL)
         return;
      //--- получим смещение индекса события относительно конца списка
      //--- в тестере смещение передаётся параметром lparam в обработчик событий
      //--- не в тестере - каждое событие отправляется по одному и обрабатывается в OnChartEvent()
      int shift=(engine.IsTester() ? (int)lparam : 0);
      CEvent *event=list.At(list.Total()-1-shift);

Вот так поправил вроде работает.


      int shift=(engine.IsTester() ? (int)lparam : 0);
      static int NEvents =list.Total()-1-shift;
      CEvent *event=list.At(NEvents);
      NEvents++;
 
BillionerClub #:

При закрытии отложенных 10 ордеров идут 10 событии но они одинаковые 

Только в ручную если закрывать идут разные события  в OnChartEvent

Вот так поправил вроде работает.


Имелось в виду, что библиотека отправляет неправильные события в обработчик событий?
 
Artyom Trishkin #:
Имелось в виду, что библиотека отправляет неправильные события в обработчик событий?

Да. Я это имел ввиду.  Вроде поправил, но не уверен в решении, так как не особо понимаю, где будут минусы. 


      int shift=(engine.IsTester() ? (int)lparam : 0);
      static int NEvents =list.Total()-1-shift;
      CEvent *event=list.At(NEvents);
      NEvents++;
      if(event==NULL)
      {
      event=list.At(list.Total()-1-shift);
      if(event==NULL)return;
      }
 
BillionerClub #:

Да. Я это имел ввиду.  Вроде поправил, но не уверен в решении, так как не особо понимаю, где будут минусы. 


Спасибо, погляжу
Причина обращения: