Дополнительные обработчики событий недоступны - страница 2

 
Ihor Herasko:

Версия МЕ для обоих терминалов одна и та же. Так легче поддерживать продукт. А возможности для разных терминалов, конечно, отличаются. Такой подход широко применяется во многих приложениях: если что-то существует в принципе, то этот функционал отображается, а не прячется. В таком случае пользователь (как Вы сейчас) может заинтересоваться, что же следует сделать для того, чтобы отображенный функционал стал доступным.

Не знал что движок един. Спасибо.

 
E38:

Мне показалось нелогичным то, что я запускаю редактор кода МТ4 и мастер создания советника предлагает добавить обработчики этих событий, но сделать это нельзя (см. скриншот в первом сообщении). Ну да ладно. На нет и суда нет.


Наверное лучше зайти с другой стороны и объяснить, почему я полагал, что они могут быть полезны. Мне необходимо отслеживать событие закрытия позиций, которые происходят в результате воздействия внешних факторов, таких как срабатывание стоп-лосса или тейк-профита, действия трейдера или брокера.

Насколько я понял из ответов, таких событий МТ4 не гененрирует и стандартных обработчиков для них нет.

Как в таком случае лучше решить эту задачу? Создать два динамических массива, один для тикетов открытых позиций на текущем тике, а второй - на предыдущем и сравнивать эти массивы на каждом тике между собой, выявляя пропавшие ордера? Или есть какой-то более тривиальный и менее ресурсоёмкий подход? 

В 4ке по времени закрытия ордера не равно нулю. В 4ке нет позиций, есть отложенные ордера и рыночные / маркет ордера, это те, которые в 5ке позиции. В 4ке сильно упрощенная ордерная система, (чем и хороша, и более понятна многим), единый тикет на ордер. А не 3 тикета, ордера/приказа, сделки, и позиции, это для открытия позиции, и для закрытия позиции, то же ордер на закрытие, сделка по закрытия позиции, помещение позиции в историю. И для ордеров, сделок, позиций своя история. Все гораздо сложней.

типа такого

   if(OrderSelect(Ticket, SELECT_BY_TICKET)==true)
        {
         if(OrderCloseTime()==0)              // Если наш рыночный ордер не закрыт
           {
                  //           Alert("Наш рыночный ордер жив, Модифицируем его если нужно ");
            // Модифицируем например
            return;
           }
         if(OrderCloseTime()!=0)              // Если наш рыночный ордер закрылся
           {
              Alert("Our market order has closed. The Adviser's work is completed ",
                  " Swap = ", OrderSwap(), " Commission = ", OrderCommission());
            return;
           }
        }
      else
         Alert("OrderSelect() of our market order returned an error - ",GetLastError()); 
//и выводим ошибку при выборе ордера
 
Получается, что достаточно одного массива, в котором хранятся тикеты рыночных ордеров на момент завершения обработки предыдущего тика? А на текущем тике этот массив перебираем и те ордера, у которых время закрытия отлично от нуля, и есть те, для которых произошло событие закрытия? Это надёжный способ, без подводных камней?
 
Ihor Herasko:

Версия МЕ для обоих терминалов одна и та же. Так легче поддерживать продукт. А возможности для разных терминалов, конечно, отличаются. Такой подход широко применяется во многих приложениях: если что-то существует в принципе, то этот функционал отображается, а не прячется. В таком случае пользователь (как Вы сейчас) может заинтересоваться, что же следует сделать для того, чтобы отображенный функционал стал доступным.

Так вроде разделили не так давно. Или снова одна?

 
E38:
Получается, что достаточно одного массива, в котором хранятся тикеты рыночных ордеров на момент завершения обработки предыдущего тика? А на текущем тике этот массив перебираем и те ордера, у которых время закрытия отлично от нуля, и есть те, для которых произошло событие закрытия? Это надёжный способ, без подводных камней?

Это способ указан в справке. А подводных камней в реальной торговле достаточно. 

 
Vitaly Muzichenko:

Так вроде разделили не так давно. Или снова одна?

Я имел в виду, что одним и тем же компилятором можно обработать программы для разных терминалов. А так - да, билды идут разные.

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