Обсуждение статьи "Прочие классы в библиотеке DoEasy (Часть 70): Расширение функционала и автообновление коллекции объектов-чартов"
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
Limit Order, кнопкой DeletePending, дает много одинаковых событии OnChartEvent а должны быть разные же
Или через Bulk Operations Delete Limit Orders дает много одинаковых событии
Если закрывать в ручную то события, идут последовательно
Вообще не понял о чём Вы...
При закрытии отложенных 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++;
При закрытии отложенных 10 ордеров идут 10 событии но они одинаковые
Только в ручную если закрывать идут разные события в OnChartEvent
Вот так поправил вроде работает.
Имелось в виду, что библиотека отправляет неправильные события в обработчик событий?
Да. Я это имел ввиду. Вроде поправил, но не уверен в решении, так как не особо понимаю, где будут минусы.
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; }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Прочие классы в библиотеке DoEasy (Часть 70): Расширение функционала и автообновление коллекции объектов-чартов:
В статье расширим функционал объектов-чартов, организуем навигацию по графикам, создание скриншотов, сохранение и применение шаблонов к графикам. Также сделаем автоматическое обновление коллекции объектов-чартов, их окон и индикаторов в них.
Осталось протестировать создание скриншотов текущего графика. Каждое нажатие кнопки будет создавать скриншот графика в определённом размере. Первое нажатие — скриншот 800x600, второе нажатие — скриншот 750x562, третье нажатие — скриншот в текущем размере графика:
После создания трёх скриншотов в разных разрешениях, о чём в журнале библиотека сделала записи,
мы вдобавок поглядели содержимое папки, в которую эти скриншоты сохраняются.
Перед созданием скриншотов я поводил курсором в разных местах двух окон текущего графика, и в комментарии на графике можно увидеть время, цену, номер подокна и координаты X и Y курсора в пикселях. У координаты Y курсора есть два значения. Первое значение отображает координату Y относительно начальных координат главного окна символа, второе же значение, отображаемое (в скобках), показывает значение Y-координаты относительно верхней границы окна, в котором находится курсор.
Автор: Artyom Trishkin