Бета-версия платформы MetaTrader 5 build 1700: Проекты в MetaEditor и синтетические инструменты - страница 25

 
Stanislav Korotky:

Писал в СД, получил ответ в духе "ничего не знаем, мы тут ни при чем". Суть проблемы:

Размещаю свой эксперт, генерирующий бары и тики кастом-символа, на таймфрейме M1 рабочего символа. Тики приходят часто и вброс их на кастом-символ фактически совпадает с исходным символом.

Размещаю тот же эксперт на таймфрейме H1 рабочего символа. И тики начинаю заметно пропадать, т.е. OnTick в эксперт приходит гораздо реже и соответственно вброс тиков на кастом-символ совсем не похож на реалтайм: может не тикать по несколько секунд, несмотря на то, что на исходном символе, где стоит эксперт, тики приходят регулярно по несколько за секунду (согласно обзору рынка).

У кого-нибудь наблюдается похожая странность с интенсивностью тиков в зависимости от таймфреймов? Билд 1709.

Вы это делаете на штатном символе, транслируемом торговым серверов или на его копии?

Если на штатном, то вы зря это делаете.

 
Stanislav Korotky:

У кого-нибудь наблюдается похожая странность с интенсивностью тиков в зависимости от таймфреймов? Билд 1709.

На M1 только запускал - проблем не заметил.

Renat Fatkhullin:

Вы это делаете на штатном символе, транслируемом торговым серверов или на его копии?

Если на штатном, то вы зря это делаете.

Правильно делает. Запускает на штатном генератор тиков.


ЗЫ Вроде, без проблем

void OnTick()
{
  static const string Name = _Symbol + "_" + AccountInfoString(ACCOUNT_SERVER);

  MqlTick Ticks[1];
  
  if (((CustomSymbolCreate(Name, AccountInfoString(ACCOUNT_SERVER)) && CustomSymbolSetInteger(Name, SYMBOL_DIGITS, _Digits)) ||
       SymbolInfoInteger(Name, SYMBOL_CUSTOM)) && SymbolInfoTick(_Symbol, Ticks[0]) &&
       (SymbolInfoInteger(Name, SYMBOL_SELECT) || SymbolSelect(Name, true)))
    CustomTicksAdd(Name, Ticks);
}
 
fxsaber:

На M1 только запускал - проблем не заметил.

Правильно делает. Запускает на штатном генератор тиков.

Ничего не понял.

Или автор половину объяснений пропустил и приходится додумывать.

 
Renat Fatkhullin:

Ничего не понял.

Или автор половину объяснений пропустил и приходится додумывать.

Он запустил проброс тиков со штатного символа на кастомный. Когда на M1 запускает такой советник - то нормально, когда на H1 - пробрасывание тормозит.

Я замерил сколько времени занимает проброс. У меня в среднем выходит ~10 мс. Много это, наверное. Но не секунды.

 
fxsaber:

Он запустил проброс тиков со штатного символа на кастомный. Когда на M1 запускает такой советник - то нормально, когда на H1 - пробрасывание тормозит.

Я замерил сколько времени занимает проброс. У меня в среднем выходит ~10 мс. Много это, наверное. Но не секунды.

Да, все именно так. Может быть дело в том, что запущено 2 (а иногда и больше) копии эксперта параллельно. Всех вариантов я еще не перепробовал - не могу сказать, в чем затык.

 

Пока пытаюсь сделать упрощенный тестовый эксперт (для кастом-тиков) наткнулся на такую проблему: в OnInit стоит вызов CopyRates(CustomSymbolName, PERIOD_M1, 0, 3, array);, т.е. пытаюсь прочитать 3 последних бара кастом-символа. В каких-то случаях на этом вызове эксперт зависает - входит в CopyRates и далее - ни ошибок, ни возврата - висит до бесконечности (ресурсы не жрет). Если прервать работу эксперта в отладчике или снять с чарта, в лог выводится сообщение об ошибке 4401 - его выводит мой код после вызова CopyRates. Есть подобные наблюдения?

PS. Дополнение. Как выяснилось терминал через несколько минут все таки отвисает. Не понятно только, почему в каких-то случаях на запрос 3-х баров уходят доли секунды, а в других - несколько минут, причем особенно неприятно, что в этом момент нельзя никакого осмысленного прогресс-индикатора вывести, чтобы пользователь знал, что терминал занят делом и когда свое дело завершит ;-).



 
Stanislav Korotky:
Пока пытаюсь сделать упрощенный тестовый эксперт (для кастом-тиков) наткнулся на такую проблему: в OnInit стоит вызов CopyRates(CustomSymbolName, PERIOD_M1, 0, 3, array);, т.е. пытаюсь прочитать 3 последних бара кастом-символа. В каких-то случаях на этом вызове эксперт зависает - входит в CopyRates и далее - ни ошибок, ни возврата - висит до бесконечности (ресурсы не жрет). Если прервать работу эксперта в отладчике или снять с чарта, в лог выводится сообщение об ошибке 4401 - его выводит мой код после вызова CopyRates. Есть подобные наблюдения?



Может тут собака порылась:

int  CopyTime( 
   string           symbol_name,     // имя символа 
   ENUM_TIMEFRAMES  timeframe,       // период 
   datetime         start_time,      // с какой даты 
   int              count,           // сколько копируем 
   datetime         time_array[]     // массив для копирования времени открытия 
   );

при запросе дневных баров по одному, т.е. с start_time взять один бар, получаю данные не понятно как, бывает дневной бар отдается start_time - период (в секундах), а бывает с датой start_time, при чем какой то закономерности не увидел, данные перед запросами подтягивал корректно, как в справке написано. При этом start_time всегда время открытия бара с точностью до секунды. На других тайм-фреймах не проверял, т.к. пока локализовывал проблему неравномерности получения данных, убил много времени и потом стал брать с даты по дату. Так же не проверял другие данные брать по одному бару функциями семейства Copy..., может и там такая же проблема.


 

Кто знает что за код ошибки такой - invalid EX5 file (4)

 
Stanislav Korotky:

Пока пытаюсь сделать упрощенный тестовый эксперт (для кастом-тиков) наткнулся на такую проблему: в OnInit стоит вызов CopyRates(CustomSymbolName, PERIOD_M1, 0, 3, array);, т.е. пытаюсь прочитать 3 последних бара кастом-символа. В каких-то случаях на этом вызове эксперт зависает - входит в CopyRates и далее - ни ошибок, ни возврата - висит до бесконечности (ресурсы не жрет). Если прервать работу эксперта в отладчике или снять с чарта, в лог выводится сообщение об ошибке 4401 - его выводит мой код после вызова CopyRates. Есть подобные наблюдения?

PS. Дополнение. Как выяснилось терминал через несколько минут все таки отвисает. Не понятно только, почему в каких-то случаях на запрос 3-х баров уходят доли секунды, а в других - несколько минут, причем особенно неприятно, что в этом момент нельзя никакого осмысленного прогресс-индикатора вывести, чтобы пользователь знал, что терминал занят делом и когда свое дело завершит ;-).

Сталкивался с зависаниями терминала и длинным ожиданием отвисания. Но с CopyRates, т.е. с барами, не работаю совсем.

 

Выпустили 1711 билд.

Улучшения в систетических инструментах и совместных проектах.

Обновитесь, пожалуйста.

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