Торговые функции для чайников. - страница 4

 

Не могу понять.

1.Почему при срабатывании отложенного ордера генерируется сразу два события ? :
Trade и TradeTransaction, которые нужно обрабатывать соответствующими функциями.

Эксперт:

int CountTr = 0;
int CountTrTr = 0;
//------------------------
void OnTrade() 
   {
   Print("---------------------- OnTrade:  CountTr = ", CountTr++);
   return;
   }
//---------------------
void  OnTradeTransaction(const MqlTradeTransaction&trans, const MqlTradeRequest&request, const MqlTradeResult& result)
   {
   ENUM_TRADE_TRANSACTION_TYPE type = trans.type;
   Print("====================== OnTradeTransaction:  CountTrTr = ", CountTrTr++, "   type = ",  EnumToString(type)); 
   return;
   }
//---------------------
void OnDeinit(const int reason)
   {
   Print("OnDeinit reason = ", reason, "  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
   }

2. Почему OnTrade вызывается несколько раз и как выяснить причины? ( про OnTradeTransaction не спрашиваю, там есть что анализировать )

3. Последовательность вызовов OnTrade и OnTradeTransaction носит случайный характер или есть какая-то закономерность?

4. (не знаю как правильно задать вопрос) возможна ли ситуация, когда строго возникает необходимость обрабатывать OnTrade? Кто-нибудь вообще пользует эту ф-ию?
 
User_mt5:

Не могу понять.

1.Почему при срабатывании отложенного ордера генерируется сразу два события ? :
Trade и TradeTransaction, которые нужно обрабатывать соответствующими функциями.

Эксперт:

2. Почему OnTrade вызывается несколько раз и как выяснить причины? ( про OnTradeTransaction не спрашиваю, там есть что анализировать )

3. Последовательность вызовов OnTrade и OnTradeTransaction носит случайный характер или есть какая-то закономерность?

4. (не знаю как правильно задать вопрос) возможна ли ситуация, когда строго возникает необходимость обрабатывать OnTrade? Кто-нибудь вообще пользует эту ф-ию?

В документации всё чётко описано

OnTrade

Функция вызывается при наступлении события Trade, которое возникает при изменении списка выставленных ордеров и открытых позиций, истории ордеров и истории сделок. При любом торговом действии (выставлении отложенного ордера, открытии/закрытии позиции, установке стопов, срабатывании отложенных ордеров и т.п.) соответствующим образом изменяется история ордеров и сделок и/или список позиций и текущих ордеров.

Выставил отложенный ордер - событие OnTrade()

Сработала отложка - событие OnTrade()

При срабатывании отложки в историю попадает ордер - событие OnTrade()

Совершена сделка - событие OnTrade()

В историю попадает сделка - событие OnTrade()

В моём перечислении вполне возможны неточности.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:

В документации всё чётко описано

Спасибо.
Но у меня проблема не с чтением. Читать я умею.

У меня проблема с пониманием.
При срабатывании отложенных ордеров (и как Вы правильно заметили, ещё и при других событиях) вызывается не только OnTrade(), но и OnTradeTransaction().

Вопрос 1. Для чего на одно и то же событие вызываются обе ф-ии? Разве для обработки срабатывания ордера (а также последовательности связанных с этим подчинённых событий) не достаточно информации, выдаваемой в структурах OnTradeTransaction()?

Вопрос 2. Возможна ли ситуация, когда информации из OnTradeTransaction() оказывается недостаточно, а требуется обрабатывать именно OnTrade(). Проще говоря, зачем нужна OnTrade()?

 
User_mt5:

Спасибо.
Но у меня проблема не с чтением. Читать я умею.

У меня проблема с пониманием.
При срабатывании отложенных ордеров (и как Вы правильно заметили, ещё и при других событиях) вызывается не только OnTrade(), но и OnTradeTransaction().

Вопрос 1. Для чего на одно и то же событие вызываются обе ф-ии? Разве для обработки срабатывания ордера (а также последовательности связанных с этим подчинённых событий) не достаточно информации, выдаваемой в структурах OnTradeTransaction()?

Вопрос 2. Возможна ли ситуация, когда информации из OnTradeTransaction() оказывается недостаточно, а требуется обрабатывать именно OnTrade(). Проще говоря, зачем нужна OnTrade()?

Когда-то я тоже задался таким вопросом. Провёл некоторое количество экспериментов с распечаткой последовательности и причины возникновения события trade, но не смог найти возможного применения функции OnTrade() и ей не пользуюсь. А вот OnTradeTransaction() использую довольно часто.

 
Alexey Viktorov:

Когда-то я тоже задался таким вопросом. Провёл некоторое количество экспериментов с распечаткой последовательности и причины возникновения события trade, но не смог найти возможного применения функции OnTrade() и ей не пользуюсь. А вот OnTradeTransaction() использую довольно часто.

О. Это совсем другое дело. Т.е. я не один такой .. задумывающийся кролик:)
Спасибо.
 
Vitaly Muzichenko:

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


Хорошее объяснение, болельщик? ))

 
Alexey Volchanskiy:

Хорошее объяснение, болельщик? ))

Подскажите, пожалуйста:

то, что в документации называется "открытый ордер" - это на самом деле хеджевая позиция?

 
User_mt5:

Подскажите, пожалуйста:

то, что в документации называется "открытый ордер" - это на самом деле хеджевая позиция?


Укажите, пожалуйста, точнее место, где взяты эти слова.

 
Vladimir Karputov:

Укажите, пожалуйста, точнее место, где взяты эти слова.

Он скорее всего имел в виду документацию по МТ4 - там нет позиций и сделок - там ордера - открытые и закрытые, рыночные и отложенные. Хотя народ сам пришёл к выводу, что открытый рыночный ордер в МТ4 удобнее называть позицией в МТ4.

 
Vladimir Karputov:

Укажите, пожалуйста, точнее место, где взяты эти слова.

https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_transaction_type

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых транзакций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых транзакций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых транзакций - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5