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

 
Yousufkhodja Sultonov:
Скажите, пож., как преодолеть ситуацию, когда тестер ограничивает количество открытых позиций сотней, несмотря на то, что, в настройках указываю 1000?
никак, это ограничение не терминала а брокера, откройте демо счет у того брокера который дает больше 100 ордеров
 

Читаем о CopyRates() вдумчиво справку:

Примечание

1. Если интервал запрашиваемых данных полностью находится вне доступных данных на сервере, то функция возвращает -1. В случае если запрашиваются данные за пределами TERMINAL_MAXBARS (максимальное количество баров на графике), функция также вернет -1.

2. При запросе данных из индикатора, если запрашиваемые таймсерии еще не построены или их необходимо загрузить с сервера, то функция сразу же вернет -1, но при этом сам процесс загрузки/построения будет инициирован.

3. При запросе данных из эксперта или скрипта, будет инициирована загрузка с сервера, если локально этих данных у терминала нет, либо начнется построение нужной таймсерии, если данные можно построить из локальной истории, но они еще не готовы. Функция вернет то количество данных, которые будут готовы к моменту истечения таймаута, но загрузка истории будет продолжаться, и при следующем аналогичном запросе функция вернет уже больше данных. 

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

2. Тут тоже всё правильно, нужно делать попытки получения данных до тех пор, пока терминал не вернёт необходимое количество, не забывая проверять соединение с сервером. Сомнений в качестве полученных данных здесь сомневаться не приходится - данные либо есть, либо их нет. 

3. А вот тут совершенно ничего не понятно. Никогда нельзя быть уверенным в том, что полученные данные полные. И зачем пользователю данные, в полноте которых нет уверенности? Практика показывает, что никакие ухищрения (предварительные попытки получения данных с целью инициализации закачки с сервера) не дают уверенности, что при запросе будут получены полные данные.

 

Полагаю, что практичнее сделать поведение функций получения данных в советниках аналогично поведению в индикаторах. 

 
Joo Zepper:

Читаем о CopyRates() вдумчиво справку:


3. А вот тут совершенно ничего не понятно. Никогда нельзя быть уверенным в том, что полученные данные полные. И зачем пользователю данные, в полноте которых нет уверенности? Практика показывает, что никакие ухищрения (предварительные попытки получения данных с целью инициализации закачки с сервера) не дают уверенности, что при запросе будут получены полные данные.

Почему нельзя быть уверенным? Для уверенности используйте SeriesInfoInteger(symbol,period,SERIES_SYNCHRONIZED)

Читайте документацию дальше. Не менее вдумчиво.

 
Slawa:

Почему нельзя быть уверенным? Для уверенности используйте SeriesInfoInteger(symbol,period,SERIES_SYNCHRONIZED)

Читайте документацию дальше. Не менее вдумчиво.

Спасибо за подсказку, но проверка этого флага уже давно и активно используется мною. Есть ещё какие нибудь более надёжные способы?

Предвижу ещё Ваш следующий совет - открывать окно чарта запрашиваемого инструмента. И это делается, но не гарантируется получение полных данных. 

 
Joo Zepper:
Спасибо за подсказку, но проверка этого флага уже давно и активно используется мною. Есть ещё какие нибудь более надёжные способы?

А в чём тогда проблема? Если этот флаг установлен в true, то текущие данные полностью засинхронизированы. Они могут оказаться неполными потому что на сервере больше данных, чем у вас - история глубже

Тогда запрашивайте историю на всю глубину и сверяйте SeriesInfoInteger(symbol,PERIOD_M1,SERIES_SERVER_FIRSTDATE) с первой датой ваших локальных минуток

 
Slawa:

А в чём тогда проблема? Если этот флаг установлен в true, то текущие данные полностью засинхронизированы. Они могут оказаться неполными потому что на сервере больше данных, чем у вас - история глубже

Тогда запрашивайте историю на всю глубину и сверяйте SeriesInfoInteger(symbol,PERIOD_M1,SERIES_SERVER_FIRSTDATE) с первой датой ваших локальных минуток

Но это же самоубийство для эксперта. Жуткие тормоза будут обеспечены. Да и не нужна как правило история на всю глубину.

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

 

Я делаю так перед запросом данных:

for(int attempt = 0; attempt < 10; attempt++) 
  {
    bool flag = true; 
    for(int symb = 0; symb < SymbolCNT; symb++) 
    {
      if(!synched[symb]) 
      {
        // trial copying of price data
        int copied = CopyRates(symbsName[symb], smPeriod, startPosDataGet, barsReq, prices[symb].Data); 
        
        if(copied >= barsReq) 
        {
          if(idChart[symb] != -1) 
          {
            ChartClose(idChart[symb]); 
            idChart[symb] = -1;
          }
          synched[symb] = true;
        }
        else 
        {
          flag = false; 
          if(showAlert) 
            Alert(symbsName[symb] + ": requested/received " + (string)barsReq + "/" + (string)copied); 
          
          if(idChart[symb] == -1) 
          {
            idChart[symb] = ChartOpen(symbsName[symb], smPeriod); 
            ChartSetInteger(ChartFirst(), CHART_BRING_TO_TOP, 0, true);
          }
        }
      }
    }
    if(!flag) 
      if(TerminalInfoInteger(TERMINAL_CONNECTED)) 
        Sleep(1000);
  }
  
  for(int symb = 0; symb < SymbolCNT; symb++) 
    if(idChart[symb] != -1) 
      ChartClose(idChart[symb]); 

 Но уже при непосредственных запросах приходят данные с дырами. Иногда без дыр. Я про это и говорю - нет уверенности в полученных данных. 

 
Karputov Vladimir:

Не сохраняется вставленное через редактор сообщений видео.

Google Chrome Версия 46.0.2490.86 m.

Internet Explorer 11.11.10586.0. 

Ошибка будет исправлена, спасибо за сообщение.
 

НЕ работают штатные индикаторы после обновления системы до Windows10. Просто невозможно присоединить к графику. В редакторе при компиляции выдаётся ошибка

 error

 
Alexandr:
НЕ работают штатные индикаторы после обновления системы до Windows10. Просто невозможно присоединить к графику. В редакторе при компиляции выдаётся ошибка https://i.gyazo.com/5dbea3b25ab9a45cf3a9449335c1f57f.png
Возможно что то с правами доступа, проверьте разрешена ли запись в папках терминала, попробуйте понизить UAC ....