Обсуждение статьи "Обработка торговых событий в эксперте при помощи функции OnTrade()"

 

Опубликована статья Обработка торговых событий в эксперте при помощи функции OnTrade():

В 5-ой версии языка MQL появилась масса нововведений, в том числе работа с событиями различных типов (события таймера, торговые события, пользовательские и т.д.). Возможность обработки событий позволяет создавать совершенно новый тип программ для автоматического и полуавтоматического трейдинга. В этой статье мы рассмотрим торговые события и напишем для функции OnTrade() код, который будет обрабатывать событие Trade.

Вызов функции OnTrade()

Автор: KlimMalgin

 

При компиляции выдает ошибку implicit conversion from 'number' to 'string'    TradeControl.mq5    349    99
 в этой строке

_alerts += "На паре "+PositionList[i].symbol+" изменен stoploss с "+ PrevPositionList[i].sl +" на "+ PositionList[i].sl +"\n";

 
sergey1294:

При компиляции выдает ошибку implicit conversion from 'number' to 'string'    TradeControl.mq5    349    99
 в этой строке

_alerts += "На паре "+PositionList[i].symbol+" изменен stoploss с "+ PrevPositionList[i].sl +" на "+ PositionList[i].sl +"\n";

Это не ошибка, а предупреждение о том, что в этой строке происходит неявное преобразование числа в строку. Компилятор в подобных случаях предупреждает о преобразовании, а программист должен сам решить является это преобразование ошибкой или нет.

Чтобы убрать это предупреждение нужно сделать явное преобразование: 

_alerts += "На паре "+PositionList[i].symbol+" изменен stoploss с "+ (string)PrevPositionList[i].sl +" на "+ (string)PositionList[i].sl +"\n";
 
KlimMalgin:

Это не ошибка, а предупреждение о том, что в этой строке происходит неявное преобразование числа в строку. Компилятор в подобных случаях предупреждает о преобразовании, а программист должен сам решить является это преобразование ошибкой или нет.

Чтобы убрать это предупреждение нужно сделать явное преобразование: 

 Спасибо попробуем.
 

Как то не правильно работает, позиция закрылась по тейкпрофиту, а информации об этом нет. вот лог

DS    0    TradeControl (EURUSD,M5)    22:36:06    Поступило событие Trade
EJ    0    TradeControl (EURUSD,M5)    22:36:06    Error # 4751
PN    0    TradeControl (EURUSD,M5)    22:36:06    876874 Поступил ордер в обработку
DH    0    TradeControl (EURUSD,M5)    22:36:08    Поступило событие Trade
IS    0    TradeControl (EURUSD,M5)    22:36:08    Ошибка № 4751  Ордер  876874  не найден!
HK    0    TradeControl (EURUSD,M5)    22:36:08    Error # 4751  state:  4
RQ    0    TradeControl (EURUSD,M5)    22:36:08    0 Ордер выполнен, переходим к сделке
OD    0    TradeControl (EURUSD,M5)    22:36:08    876874  ордер породил сделку № 947094
RS    0    TradeControl (EURUSD,M5)    22:36:08    Открыта позиция buy на паре  EURUSD
DQ    0    TradeControl (EURUSD,M5)    22:36:08    Поступило событие Trade
DI    0    TradeControl (EURUSD,M5)    22:36:08    Поступило событие Trade
KQ    0    TradeControl (EURUSD,M5)    22:41:45    Поступило событие Trade
KI    0    TradeControl (EURUSD,M5)    22:41:45    Поступило событие Trade
KQ    0    TradeControl (EURUSD,M5)    22:41:45    Поступило событие Trade

 
В статье не рассмотрено закрытие позиций тейкпрофиту и стоплоссу. Рассматриваются только события обозначенные в начале статьи.
 
KlimMalgin:
В статье не рассмотрено закрытие позиций тейкпрофиту и стоплоссу. Рассматриваются только события обозначенные в начале статьи.

Ясно, очень жаль, что не рассмотрены. буду ждать, может появиться подобная статья или вы дополните свою в соответствие этому. Аналог статьи для MT4 находиться здесь https://www.mql5.com/ru/articles/1399

  1. Открытие позиции
    • "Рыночная позиция"
      • Бай
      • Селл
    • Отложенный ордер
      • Бай-лимит
      • Селл-лимит
      • Бай-стоп
      • Селл-стоп
  2. Срабатывание ордера
    • Бай-лимит
    • Селл-лимит
    • Бай-стоп
    • Селл-стоп
  3. Закрытие позиции
    • "Рыночная позиция"
      • Бай
        • Стоп Лосс
        • Тейк Профит
        • Вручную (не Стоп Лосс и не Тейк Профит)
      • Селл
        • Стоп Лосс
        • Тейк Профит
        • Вручную
    • Отложенный ордер (удаление)
      • Бай-лимит
        • Время истечения
        • Вручную
      • Селл-лимит
        • Время истечения
        • Вручную
      • Бай-стоп
        • Время истечения
        • Вручную
      • Селл-стоп
        • Время истечения
        • Вручную
  4. Модификация позиции
    • "Рыночная позиция"
      • Бай
        • Стоп Лосс
        • Тейк Профит
      • Селл
        • Стоп Лосс
        • Тейк Профит
    • Отложенный ордер
      • Бай-лимит
        • Цена открытия
        • Стоп Лосс
        • Тейк Профит
        • Время истечения
      • Селл-лимит
        • Цена открытия
        • Стоп Лосс
        • Тейк Профит
        • Время истечения
      • Бай-стоп
        • Цена открытия
        • Стоп Лосс
        • Тейк Профит
        • Время истечения
      • Селл-стоп
        • Цена открытия
        • Стоп Лосс
        • Тейк Профит
        • Время истечения
События в МetaТrader 4
События в МetaТrader 4
  • 2006.05.29
  • Andrey Khatimlianskii
  • www.mql5.com
Статья посвящена программному отслеживанию событий в терминале МetaТrader 4, таких как открытие, закрытие и модификация ордеров, и рассчитана на пользователя, обладающего базовыми навыками работы с терминалом и программирования на MQL 4.
 

Нет обработки HistorySelect()==false! Довольно частый случай...

 
KlimMalgin:
В статье не рассмотрено закрытие позиций тейкпрофиту и стоплоссу. Рассматриваются только события обозначенные в начале статьи.
А вот зря очень... я ждал эту статью исключительно ради примера обработки стопов...
 

Мог бы кто-нибудь доработать код, приведённый в статье, на предмет обработки события закрытия позиции по стоплоссу или тейкпрофиту?

Неужели это никому оказалось ненужным за прошедших 2,5 года с момента публикации статьи?

 
для MQL4, что можно придумать что-бы было похоже на OnTrade?