Вопрос по работе с таймсериями

 
Пример кода скрипта
int start()
{
//----
  
   int USDCHF_count = iBars("USDCHF",PERIOD_M1);
  
   Print(" USDCHF : ",USDCHF_count);
   Print("iTime ",TimeToStr(iTime("USDCHF",PERIOD_M1,USDCHF_count-1),TIME_DATE)," ",TimeToStr(iTime("USDCHF",PERIOD_M1,USDCHF_count-1),TIME_SECONDS));
//----
   return(0);
}

результат выполнения скрипта :

2007.04.19 11:18:36    ���� GBPUSD,M1: iTime 2007.04.16 21:01:00
2007.04.19 11:18:36    ���� GBPUSD,M1:  USDCHF : 3274

Открыв окно котировки перейдя на начало графика действительно первая котировка за 2007.04.16 21:01:00, но далее я могу курсором влево открыть и предыдущие котировки. При этом видно , что данные запрашиваются с сервера и повторное выполнение скрипта выдает котировку с более ранним значение времени.

Вопрос : можно ли программно вызвать дозагрузку данных с сервера?

 
miroslavovich:

Вопрос : можно ли программно вызвать дозагрузку данных с сервера?


Конечно можно. При условии что эти котировки на сервере брокера имеются и у вас нет жёсткого ограничения по количеству баров в окне (устанавливается в настройках терминала). Просто берёте и в цикле обращаетесь к котировкам. Котировки будут докачаны с сервера. Хотя возможно что прийдётся немного подождать если связь плохая. И первые обращения к незакачанным котировкам выдадут вам нули. Но вы просто повторяйте цикл до тех пор пока значения котировок не станут отличаться от нулевых. К примеру вот так вот производится закачка 100 баров по всем таймфреймам из списка инструментов:
string ChartHistoryList[]={"EURUSD","GBPUSD","AUDUSD","NZDUSD","USDCAD","USDCHF","USDJPY"};
bool flag=true;
string symbol_for_trade;
int i,k;
int limit_his=ArraySize(ChartHistoryList);
 
for(i=0;i<limit_his;i++)
      {
         symbol_for_trade=ChartHistoryList[i];//Выбираем инструмент из списка
         while(flag)
         {  
            flag=false;
            for(k=0;k<100;k++)
            {
               if(iClose(symbol_for_trade,1,k)<0.0001) flag=true;
               if(iClose(symbol_for_trade,5,k)<0.0001) flag=true;
               if(iClose(symbol_for_trade,15,k)<0.0001) flag=true;
               if(iClose(symbol_for_trade,30,k)<0.0001) flag=true;
               if(iClose(symbol_for_trade,60,k)<0.0001) flag=true;
               if(iClose(symbol_for_trade,240,k)<0.0001) flag=true;
               if(iClose(symbol_for_trade,1440,k)<0.0001) flag=true;
               if(iClose(symbol_for_trade,10080,k)<0.0001) flag=true;
               if(iClose(symbol_for_trade,43200,k)<0.0001) flag=true;
            }
            if(flag) {Print("Проблемы с историей котировок. Ждём 1 минуту");Sleep(60000);RefreshRates();}
         }
      }
 
Теже яйца, только в профиль !
Чуть переделал скрит предложенный soland
int start()
{
//----
  
   int GBPCHF_count = iBars("GBPCHF",PERIOD_M15);
  
   Print(" GBPCHF : ",GBPCHF_count);
   Print("iTime ",TimeToStr(iTime("GBPCHF",PERIOD_M15,GBPCHF_count-1),TIME_DATE)," ",TimeToStr(iTime("GBPCHF",PERIOD_M15,GBPCHF_count-1),TIME_SECONDS));
   bool flag = true;
   int err1 = 0;
   int err2 = 0;
   int error_count = 0;
   int i = 0; 
   int _time;
   double _close = 0;
   while(flag)
   {  
            flag=true;
            _time = iTime("GBPCHF",PERIOD_M15,i);
            err1 = GetLastError();
            _close = iClose("GBPCHF",PERIOD_M15,i);
            err2 = GetLastError();
            if( _time == 0 || _close == 0)
            {
               flag=false;
            }
            else
            {
               flag = true;
            }
            
            Print("i = ",i," time = ",TimeToStr(_time,TIME_DATE)," ",TimeToStr(_time)," close = ",_close) ; 
             
            if(!flag )
            {
               if ( error_count <5 )
               {
                  error_count++;
                  Print("Проблемы с историей котировок. (err1 = " ,err1," ,err2 = ",err2," )Ждём 60 секунд. error_count = ", error_count);
                  Sleep(60000);
                  RefreshRates();
                  flag = true;   
               }
               else
               {
                  return;
               }
            }
            else
            {
               error_count = 0;
               i++;
            }
   }
   
//----
   return(0);
}

Лог работы скрипта :

14:06:28 Compiling 'Тест'
14:06:28 Тест GBPUSD,H1: i = 2048 time = 1970.01.01 1970.01.01 00:00 close = 0
14:06:28 Тест GBPUSD,H1: Проблемы с историе� котиро�ок. (err1 = 0 ,err2 = 0 )Ждём 60 секунд. error_count = 5
14:06:28 Тест GBPUSD,H1: i = 2048 time = 1970.01.01 1970.01.01 00:00 close = 0
14:06:28 Тест GBPUSD,H1: removed
14:06:28 Тест GBPUSD,H1: loaded successfully
14:06:28 Тест GBPUSD,H1:  GBPCHF : 0
14:06:28 Тест GBPUSD,H1: iTime 1970.01.01 00:00:00
14:06:28 Тест GBPUSD,H1: i = 0 time = 1970.01.01 1970.01.01 00:00 close = 0
14:06:28 Тест GBPUSD,H1: Проблемы с историе� котиро�ок. (err1 = 4066 ,err2 = 0 )Ждём 60 секунд. error_count = 1
14:07:38 Тест GBPUSD,H1: i = 0 time = 2007.04.19 2007.04.19 13:00 close = 2.4059
14:07:38 Тест GBPUSD,H1: i = 1 time = 2007.04.19 2007.04.19 12:45 close = 2.4061
14:07:38 Тест GBPUSD,H1: i = 2 time = 2007.04.19 2007.04.19 12:30 close = 2.4051
14:07:38 Тест GBPUSD,H1: i = 3 time = 2007.04.19 2007.04.19 12:15 close = 2.4075
14:07:38 Тест GBPUSD,H1: i = 4 time = 2007.04.19 2007.04.19 12:00 close = 2.4075
14:07:38 Тест GBPUSD,H1: i = 5 time = 2007.04.19 2007.04.19 11:45 close = 2.4074
14:07:38 Тест GBPUSD,H1: i = 6 time = 2007.04.19 2007.04.19 11:30 close = 2.4073
14:07:38 Тест GBPUSD,H1: i = 7 time = 2007.04.19 2007.04.19 11:15 close = 2.4082
14:07:38 Тест GBPUSD,H1: i = 8 time = 2007.04.19 2007.04.19 11:00 close = 2.4083
14:07:38 Тест GBPUSD,H1: i = 9 time = 2007.04.19 2007.04.19 10:45 close = 2.4082
14:07:38 Тест GBPUSD,H1: i = 10 time = 2007.04.19 2007.04.19 10:30 close = 2.4088
14:07:38 Тест GBPUSD,H1: i = 11 time = 2007.04.19 2007.04.19 10:15 close = 2.4089
14:07:38 Тест GBPUSD,H1: i = 12 time = 2007.04.19 2007.04.19 10:00 close = 2.4096
.........
14:07:38 Тест GBPUSD,H1: i = 2045 time = 2007.03.21 2007.03.21 01:00 close = 2.3763
14:07:38 Тест GBPUSD,H1: i = 2046 time = 2007.03.21 2007.03.21 00:45 close = 2.3764
14:07:38 Тест GBPUSD,H1: i = 2047 time = 2007.03.21 2007.03.21 00:30 close = 2.3761
14:07:38 Тест GBPUSD,H1: i = 2048 time = 1970.01.01 1970.01.01 00:00 close = 0
14:07:38 Тест GBPUSD,H1: Проблемы с историе� котиро�ок. (err1 = 0 ,err2 = 0 )Ждём 60 секунд. error_count = 1
14:08:40 Тест GBPUSD,H1: i = 2048 time = 1970.01.01 1970.01.01 00:00 close = 0
14:08:40 Тест GBPUSD,H1: Проблемы с историе� котиро�ок. (err1 = 0 ,err2 = 0 )Ждём 60 секунд. error_count = 2
14:09:42 Тест GBPUSD,H1: i = 2048 time = 1970.01.01 1970.01.01 00:00 close = 0
14:09:42 Тест GBPUSD,H1: Проблемы с историе� котиро�ок. (err1 = 0 ,err2 = 0 )Ждём 60 секунд. error_count = 3
14:10:42 Тест GBPUSD,H1: i = 2048 time = 1970.01.01 1970.01.01 00:00 close = 0
14:10:42 Тест GBPUSD,H1: Проблемы с историе� котиро�ок. (err1 = 0 ,err2 = 0 )Ждём 60 секунд. error_count = 4
14:11:43 Тест GBPUSD,H1: i = 2048 time = 1970.01.01 1970.01.01 00:00 close = 0
14:11:43 Тест GBPUSD,H1: Проблемы с историе� котиро�ок. (err1 = 0 ,err2 = 0 )Ждём 60 секунд. error_count = 5
14:12:44 Тест GBPUSD,H1: i = 2048 time = 1970.01.01 1970.01.01 00:00 close = 0
14:12:44 Тест GBPUSD,H1: removed
При показе окна котировок выдает котировки и более ранних периодов подружая их с сервера. Мистика!
Причина обращения: