Ну как-то уж очень странно стала функция работать... время копирования исчисляется минутами.
где узнать про новый принцип?
Теперь в случае недоступности либо недостаточности запрошенных данных эти функции ожидают успешного выполнения запроса (втч происходит скачивание данных с сервера). Функции возвращают данные в запрошенном объеме, либо в меньшем объеме в следующих случаях:
1) недостаточно данных на сервере;
2) достигнуто ограничение на количество баров на чарте (TERMINAL_MAXBARS);
3) таймаут ожидания (ожидание не превышает 30 секунд).
В случае если запрос выполнить не удалось формируется ошибка ERR_HISTORY_NOT_FOUND.
Для кастомных индикаторов поведении функций не изменилось. По прежнему функции немедленно возвращают управление независимо от результатов запроса.
Теперь в случае недоступности либо недостаточности запрошенных данных эти функции ожидают успешного выполнения запроса
А у меня они качают всегда, даже при повторном обращении(казалось-бы данных в достатке...)
И ещё, для скачивания 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);
}
А у меня они качают всегда, даже при повторном обращении(казалось-бы данных в достатке...)
И ещё, для скачивания 1371бара требуется 46,5 секунд - что-то многовато.
прилагаю скрипт для проветки
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Ну как-то уж очень странно стала функция работать... время копирования исчисляется минутами.
где узнать про новый принцип?