Особенности языка mql5, тонкости и приёмы работы - страница 192

 
traveller00:

Из статистики: порядка 200-300 сделок в день. Даже с нормальными проверками, но без совсем хитрожопых проверок, в среднем раза 2-3 в неделю ловил двойное открытие лота. Считайте вероятность и прикидывайте, нужны Вам проверки или готовы принять такую вероятность. Лично я себе сделал проверки на максимум.

Спасибо. А какой пинг у Вас?
 
Vasiliy_Saharov:
Спасибо. А какой пинг у Вас?

Прыгает в диапазоне 55-60мс. Но дело не в пинге. Как я говорил, это даже с нормальными проверками. Это где уже было ожидание, просто адекватное, типа ждать 1 секунду. Но это оно вылетало даже за такие диапазоны, что превышает пинг на порядки.

P.S. Интересный тест на фантомные ордера в тему https://www.mql5.com/ru/forum/1111/page2220#comment_7834585
Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2018.06.20
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
Vasiliy_Saharov:
Если у Вас алгоритм должен заключить 0.1 лота, то есть вероятность совершить дважды по 0.1, и как мне думается, эта вероятность стремится к нулю, а трижды, думаю невозможно. Не говоря уже про 20 раз. Ведь мы говорим о прикладных вещах. Как правило, сервер отвечает наверно в пределе 10 мили сек (это так? я не уверен). Насколько высока вероятность схватить вторую сделку, на Ваш взгляд? А Вы у себя делаете эту проверку? Бывает ли, что сервер может отвечать долго?

Ответ от сервера с результатом сделки может задержаться по очень разным причинам, и рассчитывать на 10 мс нельзя ни в коем случае (даже если пинг 1 мс)

Конечно, я делаю эту проверку. Точнее, использую готовый MT4Orders, в котором это (и многое другое) учтено.

 
const int a=2;

void OnStart()
{
  int b[a];  //'[' - invalid index value
}

Такое отличное от C++ поведение тоже фича или баг?

 
Igor Makanu:

в индикаторе не будет ждать результата работы CopyXXX 

как вариант в таймере в индикаторе обрабатывать CopyXXX и вызывать этот индикатор из ЕА

Сработало, спасибо за идею!

 

Как смена летнего/зимнего времени может поломать MT5-Тестер.

Проще всего объяснить проблему на примере. Есть символ с такими ограничениями по котировочным сессиям.

Однако, в истории цен имеются цены после 22:15 - до 23:15.  Это валидные цены, несмотря на выход за пределы котировочной сессии.


Дело в том, что до перехода на зимнее время сессия была: 03:00 - 23:15. Объясняется легко. Торговый сервер сменяет время, а котировочный символ - нет. Например, индекс. Из-за этого на торговом сервере меняется время сессий по соответствующему символу.


Данное обстоятельство приводит к очень неприятным последствиям в MT5-Тестере. Вы не можете торговать на валидных ценах в промежутке 22:15-23:15, получая отказ в виде [Market closed]. Т.е. там торговля шла в реальности, но Тестер не позволяет этого делать.


Фактически, Тестер искажает торговлю, выдавая заведомо ложный результат. Заметить эту особенность довольно проблематично. Чтобы исправить положение, нужно править время сессий самостоятельно.


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


На верхнем скрине настроек символа есть нижняя строка "Использовать ограничение по времени". Возможно, когда она начнет действовать, можно будет еще через нее обходить эту проблему.


Пока актуально правило - кастомные символы могут значительно повысить вероятность адекватности результатов MT5-Тестера.


ЗЫ В Терминале при составлении запросов на получение истории цен (CopyRates/CopyTicks) не ориентируйтесь на котировочные сессии.

 
fxsaber:

Как смена летнего/зимнего времени может поломать MT5-Тестер.

Спасибо, что поделились интересными наблюдениями - проблему времени я так же ранее подымал, но обращал внимание на некорректную разметку в будущем, когда цена на барах меньше 0.

Такой вопрос, возникает, есть ли ситуации, где вообще корректно в тестере запрещать торговлю, или как минимум, где есть котирование инструмента с запретом торговать по нему в реальности в некоторые часы? Я понимаю, что есть разные индексы, и не понятно как по ним считать прибыль, но в этом случае можно считать её принудительно в пунктах и просто в лог писать сообщение, что инструмент не торгуемый, но проверить ТС можно.

 
Aleksey Vyazmikin:

есть котирование инструмента с запретом торговать по нему в реальности в некоторые часы?

Первая минута после полуночи под запретом. Когда это может быть важно, ставлю проверку.

// true - торговые сессии совпадают с котировочными, false - иначе.
bool IsSessionsQuoteEqualTrade( const string Symb )
{
  bool Res = true;
  
  for (int i = 0; (i < 7) && Res; i++)
  {
    datetime FromQuote;
    datetime ToQuote;

    datetime FromTrade;
    datetime ToTrade;
    
    if (SymbolInfoSessionQuote(Symb, (ENUM_DAY_OF_WEEK)i, 0, FromQuote, ToQuote) && (FromQuote != ToQuote))
      Res = SymbolInfoSessionTrade(Symb, (ENUM_DAY_OF_WEEK)i, 0, FromTrade, ToTrade) &&
            (FromQuote == FromTrade) && (ToQuote == ToTrade);
  }
  
  return(Res);
}

Вариант, когда в сутках несколько сессий, не проверяю.

 
fxsaber:

Первая минута после полуночи под запретом. Когда это может быть важно, ставлю проверку.

Вариант, когда в сутках несколько сессий, не проверяю.

Это искусственная ситуация, созданная ДЦ, а реальные примеры есть? Допустим проходят сделки по закрытому аукциону, но при этом они котируются.

 
Aleksey Vyazmikin:

Это искусственная ситуация, созданная ДЦ, а реальные примеры есть? Допустим проходят сделки по закрытому аукциону, но при этом они котируются.

Абсолютно все правила искусственные.

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