Изменен принцип работы функций Copy* для экспертов и скриптов

 

Ну как-то уж очень странно стала функция работать... время копирования исчисляется минутами.

где узнать про новый принцип?

 
zigan писал(а)  :

Ну как-то уж очень странно стала функция работать... время копирования исчисляется минутами.

где узнать про новый принцип?


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

1) недостаточно данных на сервере;

2) достигнуто ограничение на количество баров на чарте (TERMINAL_MAXBARS);

3) таймаут ожидания (ожидание не превышает 30 секунд).

В случае если запрос выполнить не удалось формируется ошибка ERR_HISTORY_NOT_FOUND.

Для кастомных индикаторов поведении функций не изменилось. По прежнему функции немедленно возвращают управление независимо от результатов запроса.

 
antt:

Теперь в случае недоступности либо недостаточности запрошенных данных эти функции ожидают успешного выполнения запроса

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

И ещё, для скачивания 1371бара требуется 46,5 секунд - что-то многовато.

прилагаю скрипт для проветки 

#property copyright "Copyright 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
//#property script_show_inputs
//input  int  nr=1;  //
bool prERR=true;

//+------------------------------------------------------------------+
int OnStart()
  {
   setImpulsTimeGMFiltrTable();
//---
   if(GetLastError()!=0){if(prERR)Print(" _LastError=",_LastError); ResetLastError();}
   return(0);
  }
//+------------------------------------------------------------------+

int setImpulsTimeGMFiltrTable(double PrgSKO=3.0, ENUM_TIMEFRAMES per=PERIOD_H1, int wk=12)
{
   int skor=GetTickCount();
   long iret;
   int i,j,w;
   for(i=1; i<50; i++){if( SeriesInfoInteger(Symbol(),per,SERIES_SYNCRONIZED,iret)==false )
                         {if(prERR)Print("CTimeFiltr::setImpulsTimeGMFiltrTable() обновление данных: ",i*10); Sleep(i*10);}
                       else break;
                      }
   // ...
   datetime dataStart=TimeCurrent()-wk*604800; //7257600 секунд на 12недель(3месяца)
   datetime dataBars=(datetime)SeriesInfoInteger(Symbol(),per,SERIES_FIRSTDATE);
   if( dataBars > dataStart )
     { if(prERR)Print("Нехватка бар для расчета временного фильтра: ",TimeToString(dataBars)," > ",TimeToString(dataStart));
       return(-1); }
   // ...
   datetime Time[];
   int startBars=-1;
   for(i=1; i<70; i++)
      {startBars=CopyTime(Symbol(),per, dataStart,TimeCurrent(), Time);
       Print(i,":CopyTime  startBars=",startBars,"   skor=",GetTickCount()-skor);
       if( !(startBars>0) || _LastError==ERR_HISTORY_NOT_FOUND )
         { ResetLastError(); Sleep(i*5);
           if(prERR)Print("CTimeFiltr::setImpulsTimeGMFiltrTable()  ждем обновления! ",i*5,"   skor=",GetTickCount()-skor);
         }
       else break;
      }
   if(startBars<=0) {if(prERR)Print("CTimeFiltr::setImpulsTimeGMFiltrTable() Ошибка копирования данных ",startBars); return(-1);}
   if(prERR)Print("startBars = ",startBars,"  dataStart=",TimeToString(Time[0]),"  dataFinish=",TimeToString(Time[startBars-1]),"   skor=",GetTickCount()-skor);
   double High[];   startBars=CopyHigh(Symbol(),per, dataStart,TimeCurrent(), High);
   Print("CopyHigh:  startBars=",startBars,"   skor=",GetTickCount()-skor);
   double Low[];    startBars=CopyLow(Symbol(),per, dataStart,TimeCurrent(), Low);
   Print("CopyLow:  startBars=",startBars,"   skor=",GetTickCount()-skor);
   // ...
   for(i=0; i<3; i++)
      {
       startBars=CopyHigh(Symbol(),per, dataStart,TimeCurrent(), High);
       Print("повтор",i,": CopyHigh  startBars=",startBars,"   skor=",GetTickCount()-skor);
      }
  
   return(startBars);
}

 

 
zigan:

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

И ещё, для скачивания 1371бара требуется 46,5 секунд - что-то многовато.

прилагаю скрипт для проветки 

Спасибо за сообщение. Была ошибка в расчете готовности данных при запросе от даты до даты. Исправлено, будет доступно в следующем билде.
Причина обращения: