Обсуждение статьи "Торговые события в MetaTrader 5" - страница 3

 

Renat:
Конечно после принятия сервером - это же очевидно. Кроме того, функция называется OrderSEND.

ОК, понятно!

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

 
Interesting:
На мой взгляд выводы только по true делать не стоит, нужно еще код ответа сервера анализировать (причем последний приоритетней, как мне кажется)...

Да, у меня за эти несколько часов как пелена спала: среди кодов возврата вообще нет кода для "успешной проверки базовой структуры" (назовём его так), а поэтому true сразу после базовой проверки вернуться никак не может.

Насчёт детальноого анализа кода возврата - да, так и в справочнике рекомендовано. Я просто всё ищу пути для обоснованного уменьшения числа имеющихся проверок.

 

Объясните пожалуйста что означает. Ордер поставлен в очередь ?

Следующая ситуация

2011.01.26 12:59:26 Network '716201': connection to MetaQuotes-Demo lost
2011.01.26 12:59:26 Trades '716201' : failed instant buy 1.00 EURUSD at 1.37136 [No connection]
2011.01.26 12:58:40 Trades '716201' : instant buy 1.00 EURUSD at 1.37136
2011.01.26 12:56:17 Network '716201': terminal synchronized with MetaQuotes Software Corp.

ручная торговля. нажимаю Бай по рынку без стопов и ТП. Выводиться сообщение, ордер поставлен в очередь...рветься связь...востанавливается...ордер не исполнен..

Что это за очередь ? Где она находиться ? Если ордер уже принят сервером, то почему он не выполнен ? Причина ?

 

 
Ссылки указаны для русского сайта!
 
Отличная статья.
 
void CheckStartDateInTradeHistory()
  {
//--- начальный интервал, как если бы мы начали работать прямо сейчас
   datetime curr_start=TimeCurrent()-days*PeriodSeconds(PERIOD_D1);
//--- убедитесь, что начальный предел истории торговли не превышен 
//--- более чем на 1 день позже намеченной даты
   if(curr_start-start>PeriodSeconds(PERIOD_D1))
     {
      //--- мы должны исправить дату начала истории для загрузки в кэш 
      start=curr_start;
      PrintFormat("New start limit of the trade history to be loaded: start => %s",
                  TimeToString(start));

      //--- теперь снова загрузите историю торговли за скорректированный период
      HistorySelect(start,end);

      //--- исправьте количество сделок и заказов в истории для дальнейшего сравнения
      history_orders=HistoryOrdersTotal();
      deals=HistoryOrdersTotal();
     }
  }

видите две последние строки?

они должны быть такими:

history_orders=HistoryOrdersTotal(); //хорошо, выглядит правильно

deals=HistoryDealsTotal(); // возможно, опечатка?

 

В статье рассказано про асинхронность торговых событий, когда получение тикета  ордера при отправке запроса функцией  OrderSend() и появление ордера в терминале по времени могут не совпадать. Здесь всё понятно. Прошлой осенью народ советовал преодолевать такую асинхронность засыпанием секунды на три. А каково гарантированное время, за которое и значение тикета, и сам ордер появятся в терминале (после принятия ордера сервером)? Я могу подождать и 20 секунд, если надо, - хотелось бы знать, какой промежуток гарантированно обеспечит такую вот "ручную синхронизацию".

 

Большое спасибо. Это действительно помогло мне разрешить некоторые недоразумения.

С уважением,

Умер Азиз