OrdersTotal( ) как заставить его работать в MQL5? - страница 3

 
simpleton:

....

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

Однин вопрос почему Простак ? )))

Всем огромное спасибо, есть еще одна ключевая функция OpenPosition(...) которую хотелось бы разобрать, но это в другой ветке https://www.mql5.com/ru/forum/1445.

 
Renat:

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

Значение в 100 миллисекунд конечно мало, разумно ставить секунды 3. В 99.9% случаев ответ будет выдаваться мгновенно без задержек, но при реконнектах подождать 3 (в максимуме) имеет смысл.

сделал  3 сек. 

PF 0 Trades 03:05:48 '92879' : instant sell 0.20 EURUSD at 1.29393 sl: 1.39393 tp: 1.19393
GP 0 Trades 03:05:48 '92879' : accepted instant sell 0.20 EURUSD at 1.29393 sl: 1.39393 tp: 1.19393
MO 0 Trades 03:05:49 '92879' : order #1057787 sell 0.20 EURUSD at 1.29393 done
DG 0 Trades 03:05:49 '92879' : deal #1130745 sell 0.20 EURUSD at 1.29393 done (based on order #1057787)
KF 0 Trades 03:05:52 '92879' : instant sell 0.10 EURUSD at 1.29392 sl: 1.39392 tp: 1.19392
DS 0 Trades 03:05:52 '92879' : accepted instant sell 0.10 EURUSD at 1.29392 sl: 1.39392 tp: 1.19392
JO 0 Trades 03:05:54 '92879' : order #1057788 sell 0.10 EURUSD at 1.29392 done
RG 0 Trades 03:05:54 '92879' : deal #1130746 sell 0.10 EURUSD at 1.29392 done (based on order #1057788)

и опять 0.2 лота. придеться разбираться с кодом simpleton, т.к. этот код всетаки не надежен

//+----------------------------------------------------------------------------+
//|  есть ли открытая позиция ?                                                |
//|  Параметры:                                                                |
//|    sy - наименование инструмента                                           |
//|    op - операция                   (-1 - любая позиция)                    |
//|    mn - MagicNumber                (-1 - любой магик)                      |
//+----------------------------------------------------------------------------+
bool WhetherIsPosition(string sy, ENUM_POSITION_TYPE op=-1, int mn=-1) 
  {
   bool rez=false;         // результат запроса 
    
   if(PositionSelect(sy,3000))                                  // есть открытая позиция
     {
      if(op== -1 || PositionGetInteger(POSITION_TYPE) == op)     // проверка типа
        {
         if(mn== -1 || PositionGetInteger(POSITION_MAGIC) == mn) // проверка магика
            rez=true; 
         }
     } 
 
   return(rez); 
  }
 
Prival:

сделал  3 сек. 

Вы неправильно понимаете timeout в этой функции. Это сугубо внутренне технический параметр синхронизации доступа к базе сделок.

Грубо говоря, представьте, что timeout всегда равен нулю - он Вам никогда (с вероятностью 99.9%) не поможет даже если выставить 100 000 мсек.

 

Так как же всётаки отследить, что происходит с отправленными торговыми заявками.

Что то тут разработчики не доработали или не хотят объяснять как это всё должно работать, типа догадайся сам.

Функция OnTrade() - это хорошо, но помоему она не доработана.

Предположим эксперт отправил несколько заявок на сервер и еще сработали стопы по другим позициям и открылся отложенный ордер.

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

Неужели так сложно сделать, чтобы вместе с событием Trade   в функцию  OnTrade() передавалась информация о том что произошло ( типа структуры MqlTradeResult )?

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

Что то тут разработчики не доработали или не хотят объяснять как это всё должно работать, типа догадайся сам.

Этот момент сейчас активно обсуждаем.

Ради удобства использовании функции OnTrade мы будет передавать параметр с деталями транзакции. Причем на каждую транзакцию будем вызов OnTrade.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
Renat:

Вы неправильно понимаете timeout в этой функции. Это сугубо внутренне технический параметр синхронизации доступа к базе сделок.

Грубо говоря, представьте, что timeout всегда равен нулю - он Вам никогда (с вероятностью 99.9%) не поможет даже если выставить 100 000 мсек.

Функцию PositionSelect (и ряд аналогичных) уже модифицировали, убрав таймаут - теперь он автоматически равен 3 сек.

Мы по ошибке вынесли сугубо внутренний параметр наружу.

Документация по MQL5: Торговые функции / PositionSelect
Документация по MQL5: Торговые функции / PositionSelect
  • www.mql5.com
Торговые функции / PositionSelect - Документация по MQL5
 

Изменены описания следующих торговых функций:

Убран параметр timeout, в следующем билде он не потребуется. Нужно будет перекомпилировать свои советники, если вы использовали эти функции (после обновления терминала).
 
Renat:

Этот момент сейчас активно обсуждаем.

Ради удобства использовании функции OnTrade мы будет передавать параметр с деталями транзакции. Причем на каждую транзакцию будем вызов OnTrade.

Вот это будет здорово. С нетерпением буду ждать.

А то собрался советника писать для чемпионата, а как обрабатывать торговые операции ( чтобы не нарваться на ошибки и дисквалификацию ) так и не понял. 

 
Prival:

Однин вопрос почему Простак ? )))

Не мудрствую лукаво и манерам не обучен. :)