Ошибки, баги, вопросы - страница 2180

 
Vitaly Muzichenko:

Скорее всего это и связано с подгрузкой истории

Так прикол в том, что первый Print отрабатывается без задержек, т.е. история по H4 уже загружена.

А если поменять в CopyTime H4 на W1, то тормозов совсем не будет. Значит и история по W1 тоже уже загружена. 

Просто Bars входит в ступор от времени находящегося в промежутке от CurrentTime() до времени открытия нулевого бара.

 
A100:

Важно именно происхождение, потому что если бы ::Bars() в случае ошибки истории возвращала бы -1, а не 0 (как сейчас) - то и задержки никакой не возникало бы. А сейчас 0 интерпретируется как ошибка и задержка возникает из-за внутренних повторов https://www.mql5.com/ru/forum/1111/page2200#comment_6955559

Более того: допустим ввели дополнительную проверку - задержка пропала. А дальше то что? Получили вы ноль. Это результат или ошибка?

Везде в моих алгоритмах не важно в результате чего получен  ноль:  не попадания баров в данный промежуток или отсутствие массива как такового. 

Вы уводите в сторону от проблемы. 

 
Nikolai Semko:

Вы уводите в сторону от проблемы. 

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

Может этот скрипт поможет в понимании

void OnStart()
{
        Print( "begin" );
        ::Bars( _Symbol, PERIOD_W1, D'2018.03.20', D'2018.03.23' );
        Print( "end" );
}
 
A100:
Я излагаю суть проблемы, Вы же зациклились на своем частном случае. Судя по вашему предыдущему сообщению вы до сих пор не поняли в каких случаях происходит задержка (это помимо причины) хотя на предыдущей странице все подробно изложено.

Я уже выше сформулировал свое мнение о том, в каком случае происходит задержка. 

Еще раз:
зависание Bars происходит в случае, если start_time находиться в диапазоне от времени открытия нулевого бара запрашиваемого ТФ до TimeCurrent(). (только лишь гипотеза, но проверенная практикой)
Да, ошибка происходит в частном случае. Но частных случаев не должно быть в стандартных встроенных функциях языка программирования.

А Ваша "суть" сутью таковой не является, т.к. Вы просто цитируете справку по команде Bars, с которой я отлично ознакомлен. Код ошибки в функции Bars не предусмотрен, потому как в этом нет необходимости.

Тем более в данном случае мы имеем дело с полностью сформированными массивами таймсерий. 

Это хорошо видно из слегка дополненного кода моего скрипта:

void OnStart()
  {
   datetime Arr[];
   if(CopyTime(_Symbol,PERIOD_W1,0,1,Arr)<0) Print("Ошибка");
   Print("Время открытия нулевого бара W1 = "+TimeToString(Arr[0]));
   ArraySetAsSeries(Arr,true);
   if(CopyTime(_Symbol,PERIOD_H4,0,100,Arr)<0) Print("Ошибка");
   Print("1 "+"CurrentTime = "+TimeToString(TimeCurrent()));
   int Res=Bars(_Symbol,PERIOD_W1,Arr[99],TimeCurrent());  // выполняется быстро   
   Print("2 Время открытия 99 бара H4 = "+TimeToString(Arr[99])+"  Номер бара W1= " +IntegerToString(Res)); 
   Res=Bars(_Symbol,PERIOD_W1,Arr[0],TimeCurrent());       // выполнение происходит более 10 секунд!!!   
   Print("3 Время нулевого бара H4 = "+TimeToString(Arr[0])+"  Номер бара W1= " +IntegerToString(Res));
  }

Результат:

2018.03.30 23:39:31.079 BagBars (EURUSD,H4)     Время открытия нулевого бара W1 = 2018.03.25 00:00
2018.03.30 23:39:31.079 BagBars (EURUSD,H4)     1 CurrentTime = 2018.03.30 23:54
2018.03.30 23:39:31.079 BagBars (EURUSD,H4)     2 Время открытия 99 бара H4 = 2018.03.08 20:00  Номер бара W1= 3
2018.03.30 23:39:47.176 BagBars (EURUSD,H4)     3 Время нулевого бара H4 = 2018.03.30 20:00  Номер бара W1= 0
 
A100:

Может этот скрипт поможет в понимании

Ваш скрипт демонстрирует эту проблему - зависание.

так как временной диапазон start_time - stop_time лежит внутри недельного бара. 

Если выйти за пределы недельного бара, тогда зависания не будет:

Bars( _Symbol, PERIOD_W1, D'2018.03.12', D'2018.03.23' );

Спасибо за более наглядный пример

 

В МТ4 функции CopyHigh, CopyLow (другие не смотрела) вызвали критическую ошибку при отсутствии истории в тестере. Советник тестировался на Н1, а запрос был с М1

1 15:14:35.410 2017.01.04 19:54:24  Access violation read to 0x0A971FE8 in 'C:\Users\Halyna\AppData\Roaming\MetaQuotes\Terminal\287469DEA9630EA94D0715D755974F1B\MQL4\Experts\____________.ex4'

3 15:14:35.465 2017.01.04 19:54:24  Testing pass stopped due to a critical error in the EA

 
Задавать уровень прозрачности индикаторных буферов - когда?
 

Коммент на чарте кастомного символа сдвинут вниз

#include <Symbol.mqh> // https://www.mql5.com/ru/code/18855

void OnStart()
{
  const SYMBOL Symb("TEST"); // Создали символ

  if (Symb.IsExist()) // Если символ создан
  {
    Symb = _Symbol;   // Скопировали с основного символа все свойства и баровую историю (+ тиковую, если кастомный) - клон

    if (Symb.On()) // Включили в Обзор рынка
      ChartSetString(ChartOpen(Symb.Name, PERIOD_CURRENT), CHART_COMMENT, "Hello World!"); // Открыли чарт с комментом
  }
}


 

По CTRL+U сейчас очень неудобно находить включенные в Обзор рынка символы

Приходится либо вбивать вручную по фильтру, либо ползунком искать.

Сильно не хватает галки "Показывать только символы из Обзора рынка". Понятно, что это нафиг никому не нужно, поэтому на дне приоритетов. Но user-friendly слабый.

Так получилось, что CTRL+U - это самый востребованный в Терминале сервис у меня на данный момент.

 
fxsaber:

По CTRL+U сейчас очень неудобно находить включенные в Обзор рынка символы

Приходится либо вбивать вручную по фильтру, либо ползунком искать.

Сильно не хватает галки "Показывать только символы из Обзора рынка". Понятно, что это нафиг никому не нужно, поэтому на дне приоритетов. Но user-friendly слабый.

Так получилось, что CTRL+U - это самый востребованный в Терминале сервис у меня на данный момент.

Может я чего-то не понимаю, потому хочу спросить: А зачем такой фильтр? Ведь список символов вызывается, как правило с целью добавить символ в обзор рынка. Удалить из обзора рынка или посмотреть спецификацию можно не вызывая список инструментов.