Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Пополняй свой счет с помощью банковских карт через Gate2Shop
Vasiliy Sokolov
21150
Vasiliy Sokolov 2010.08.07 21:08 
Как известно событие Trade происходит по самым разным поводам, начиная от установки отложенного ордера и заканчивая изменением уровня Стоп-лосса. В каждый момент времени эксперт может вести  десятки ордеров и многие позиции на разных инструментах. Приходится перебирать все сразу, что бы понять, что же все таки произошло. Поэтому не плохо было бы ввести штатную служебную структуру, которая заполнялась служебной информацией о том, что именно вызвало событие Trade. Например, номер тикета сделки или ордера, тип события, инструмент по которому произошло событие и т.д. Что думают по этому поводу разработчики?
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - Документация по MQL5
Vasiliy Sokolov
21150
Vasiliy Sokolov 2010.08.07 22:02  
Вот конкретная ситуация. Допустим эксперт выставил ордер на продажу ORDER_TYPE_SELL со стопом. Через некоторое время стоп сработал, произошел вызов OnTrade(). Как в ней узнать, что теперь ордер ORDER_TYPE_SELL отработан? Ведь он как и до срабатывания стопа будет находится в истории сделок.
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
Vladimir Batrudinov
4917
Vladimir Batrudinov 2010.08.07 22:12  
C-4:
Вот конкретная ситуация. Допустим эксперт выставил ордер на продажу ORDER_TYPE_SELL со стопом. Через некоторое время стоп сработал, произошел вызов OnTrade(). Как в ней узнать, что теперь ордер ORDER_TYPE_SELL отработан? Ведь он как и до срабатывания стопа будет находится в истории сделок.

Разработчики вроде думали на счет параметров для OnTrade().

Пока дело обстоит так - Эксперт сам контролирует какие отложники ставились и какие позы открывались; также он сам "должен понять" почему отложники срабатывают, а позы закрываются.

Vasiliy Sokolov
21150
Vasiliy Sokolov 2010.08.07 22:31  
Хорошо, вот конкретная ситуация, срабатывает стоп-лосс. Происходит событие Trade. Однако срабатывания стоп-лосса не переводит ордер, которым была инициирована сделка в историю, как это было в МТ4, потому что ордер уже в истории. Но что делать когда стоп сработает. Произойдет новая сделка которая закроет сделку инициированную ордером. Как узнать что сделка инициированная ордером уже закрыта встречной сделкой инициированной стопом?
Vasiliy Sokolov
21150
Vasiliy Sokolov 2010.08.07 22:37  
Возможно надо сделать так. Перебрать все сделки, у каждой сделки посмотреть ордер, который ее инициировал. Сделка инициированная стопом по логике вещей должна показывать на изначальный ордер который изначально выставил позицию.
Sergey Gritsay
6254
Sergey Gritsay 2010.08.07 22:39  
C-4:
Возможно надо сделать так. Перебрать все сделки, у каждой сделки посмотреть ордер, который ее инициировал. Сделка инициированная стопом по логике вещей должна показывать на изначальный ордер который изначально выставил позицию.

 примерно так, я например отслеживал состояние позиции вот таким образом

int Event()
  {
   ulong deal_ticket;            // тикет сделки
   string coment;
   int deal_type;              // тип торговой операции

   HistorySelectByPosition(ID);
   int total=HistoryOrdersTotal();
   deal_ticket=HistoryDealGetTicket(total-1);
   coment=HistoryDealGetString(deal_ticket,DEAL_COMMENT);
   deal_type=(int)HistoryDealGetInteger(deal_ticket,DEAL_TYPE);

   if(deal_type==1)
     {
      if(StringFind(coment,"sl")>=0)
        {
         //-----
         // некоторый код
         //-----
        }
      else if(StringFind(coment,"tp")>=0)
        {
         //-----
         // некоторый код
         //-----     
        }
     }

   if(deal_type==0)
     {
      if(StringFind(coment,"sl")>=0)
        {
         //-----
         // некоторый код
         //-----
        }
      else if(StringFind(coment,"tp")>=0)
        {
         //-----
         // некоторый код
         //-----     
        }
     }
   return(0);
  }
Vladimir Batrudinov
4917
Vladimir Batrudinov 2010.08.07 22:45  
C-4:
Хорошо, вот конкретная ситуация, срабатывает стоп-лосс. Происходит событие Trade. Однако срабатывания стоп-лосса не переводит ордер, которым была инициирована сделка в историю, как это было в МТ4, потому что ордер уже в истории. Но что делать когда стоп сработает. Произойдет новая сделка которая закроет сделку инициированную ордером. Как узнать что сделка инициированная ордером уже закрыта встречной сделкой инициированной стопом?

Вроде статья есть по поводу OnTrade(), там конечно не все по этому поводу, но многое есть.


Насколько я понимаю ситуация такая в общем виде:

1. Ставим отложку с определенным магиком;

2. Отложка срабатывает и на ее основании открывается поза (тут нужно определить какая поза открылась и на основании какого ордера);

3. Срабатывает SL и поза закрывается (эксперт видит что позы нет), теперь нужно определиться почему поза закрылась. А закрыться она должны в таком случае встречной сделкой.


Sergey Chalyshev
4294
Sergey Chalyshev 2010.08.07 23:21  

В таком виде как сейчас есть, однозначно, ни о какой работе на реале не может быть и речи.

Об этом уже задавал вопрос здесь: https://www.mql5.com/ru/forum/1431/page3/#comment_11323 

OrdersTotal( ) как заставить его работать в MQL5?
OrdersTotal( ) как заставить его работать в MQL5?
  • www.mql5.com
обязательно нужно проверять наличие открытой позиции.
Vladimir Batrudinov
4917
Vladimir Batrudinov 2010.08.08 00:05  
Serj_Che:

В таком виде как сейчас есть, однозначно, ни о какой работе на реале не может быть и речи.

Об этом уже задавал вопрос здесь: https://www.mql5.com/ru/forum/1431/page3/#comment_11323 

На реале не возможно, поскольку реала нет. А по сути возможно и на реале, только "геморно" очень...

PS

На сегодняшний момент есть проблемы и по серьезней...

Sergey Chalyshev
4294
Sergey Chalyshev 2010.08.08 00:22  
Interesting:

На реале не возможно, поскольку реала нет. А по сути возможно и на реале, только "геморно" очень...

PS

На сегодняшний момент есть проблемы и по серьезней...

Насколько я понял, терминал отправляет заявку на торговую операцию - сервер (ДЦ) отвечает что заявка принята или отклонена по какой то причине.

Но это не значит, что позиция откроется.

Как узнать что позиция открылась или нет, каким объемом, по какой цене.  Сколько нужно ждать чтобы получить результат.

А если мультивалютный эксперт. 

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - Документация по MQL5
Vladimir Batrudinov
4917
Vladimir Batrudinov 2010.08.08 00:30  
Serj_Che:

Насколько я понял, терминал отправляет заявку на торговую операцию - сервер (ДЦ) отвечает что заявка принята или отклонена по какой то причине.

Но это не значит, что позиция откроется.

Как узнать что позиция открылась или нет, каким объемом, по какой цене.  Сколько нужно ждать чтобы получить результат.

А если мультивалютный эксперт. 

А результирующая структура зачем? Для того чтобы понять отклонен твой ордер или пощиция при установке OnTrade() не нужен. Вот когда идет срабатывание ордера или закрытие позы то да, OnTrade() это то что доктор прописал...
/ /123456
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий