[SERVICE DESK] Zamanlayıcıda kıdemli TF'nin zamanı alınırken hata oluştu! - sayfa 8

 
Igor Makanu :

3. İlginç bir analiz anı, CopyClose()'un döndürdüğü şeydir, kendim kontrol ettim, eğer istenen TF için .hst dosyası yoksa, CopyClose() asla 2048'den fazla döndürmez - yani. bu indirilebilecek maksimum değer mi?

Numara. 2048, istemcide bulunmadığında sunucudan indirilen verilerin bir kısmıdır.

 
вSlava :

Numara. 2048, istemcide bulunmadığında sunucudan indirilen verilerin bir kısmıdır.

hmm, uzun süredir MQL yapıyorum gibi görünüyor, ama yine de bu benim için beklenmedik bir şey

Tamam, işte yardımdan bir örnek: https://www.mql5.com/en/docs/series/timeseries_access

olduğu belirtilir:

Bir sonraki önemli kontrol, fonksiyonun çağrıldığı programın tipidir. Güncellemeye neden olan gösterge ile aynı periyoda sahip bir zaman serisini güncellemek için bir istek göndermenin oldukça istenmeyen bir durum olduğunu hatırlayın. Gösterge ile aynı sembol periyodu için veri talep edilmesinin istenmemesi, geçmiş verilerin göstergenin çalıştığı aynı iş parçacığında güncellenmesinden kaynaklanmaktadır. Bu nedenle, bir perçin olasılığı yüksektir. Kontrol etmek için MQL5InfoInteger() işlevini MQL5_PROGRAM_TYPE değiştiricisiyle birlikte kullanırız .

onlar. örneğin kendisi https://www.mql5.com/ru/code/449

MT4 göstergesine geçmiş verileri yüklemek için uygun değildir, ancak hazırlanmış bir .hst dosyası yoksa göstergenin tüm geçmişinin nasıl indirileceği, yani. göstergenin kendisi indirme geçmişini sembolle başlattı

tüm geçmişi iBars(Symbol(),PERIOD_CURRENT);

iBars() da yanlış bir değer mi üretecek? - henüz geçmiş yok, çekirdek iBar yok()

MT5'te tarih sorunsuz bir şekilde sallanıyor gibi görünüyor, sadece beklemeniz ve geçmiş verilerin durumunu kontrol etmeniz gerekiyor, ancak MT4'te?

Not: dün kod tabanında MT4 için doğru çalışan çoklu para birimi göstergeleri arıyordum, ancak kodlar taklit konusu değil, kod tabanının birçok örneğinde, göstergede geçmiş sayfalama yok

Документация по MQL5: Доступ к таймсериям и индикаторам / Организация доступа к данным
Документация по MQL5: Доступ к таймсериям и индикаторам / Организация доступа к данным
  • www.mql5.com
Прежде чем ценовые данные будут доступны в терминале MetaTrader 5, их необходимо получить и обработать. Для получения данных требуется подключение к торговому серверу MetaTrader 5. Данные поступают с сервера по запросу терминала в виде экономно упакованных блоков минутных баров. Механизм обращения к серверу за данными не зависит от того, каким...
 

Dördünde, "ev tuşunu basılı tuttular." Başka yolu yok. Konuyu uzun süredir çalışıyorsanız, "klavyede tuğla" ifadesini hatırlamanız gerekir.

https://www.mql5.com/ru/code/9968

https://www.mql5.com/ru/code/9153

https://www.mql5.com/ru/code/9888

ZG_All_Quotings 3.2
ZG_All_Quotings 3.2
  • www.mql5.com
Скайп-чат поддержки продукта: Последние версии библиотек, скриптов и приложений: Сей скрипт продолжение темы закачек котировок обновлением графика. Решил не обновлять старую версию, а выложить заново. Это принципиально новый скрипт. Удалось добиться максимальной надёжности его работы за счёт переноса функций WinAPI в DLL. Скрипт, как и...
 
Igor Makanu :

Ücretsiz indiricimi görebilirsiniz.

 
Alexey Kozitsyn :

Ücretsiz indiricimi görebilirsiniz.

Peki, kodunuza nasıl bakmamı önerirsiniz? Geçmişi nasıl indireceğimi biliyorum, ancak indirmeyi bir gösterge ile nasıl kontrol edeceğimi bilmiyorum

Slava :

Dördünde, "ev tuşunu basılı tuttular." Başka yolu yok. Konuyu uzun süredir çalışıyorsanız, "klavyede tuğla" ifadesini hatırlamanız gerekir.

https://www.mql5.com/ru/code/9968

https://www.mql5.com/ru/code/9153

https://www.mql5.com/ru/code/9888

evet bu kodların hepsini biliyorum, daha önce kullandım, birkaç yıldır hiç MQL yapmadım, bu sene bilgilerimi yeniliyorum, geliştiricilerin MT5 ve MT4 arasında maksimum uyumluluğu büyük ölçüde sağlamasına çok şaşırdım. MQL4'ün performansını artırdı - daha önce MT4'ün projenin artık nasıl gelişmeyeceği konusunda bilgi olmasına rağmen, yalnızca hatalar düzeltilecek

ve MT4 göstergesinde tarihin otomatik yüklenmesi hakkında bilgi bulamadığıma dair bir umut vardı.

Prensip olarak, ek kontroller olmadan tüm geçmişi MT4'te indirmek istiyorsanız, xrenfix kodunu kullanmak daha kolaydır - .hst dosyasına datetime t=0 çubuğunu yazın;

 
Igor Makanu :

Peki, kodunuza nasıl bakmamı önerirsiniz?

Sadece geçmişi otomatik olarak yüklemen gerektiğini düşündüm ...

 

MT4'te daha yüksek zaman dilimlerinden veri elde etme konusuna bir kez daha dönmek zorundayım. Bu sefer burada önerilen yöntemlerin işe yaramaması nedeniyle.

İşte kullanılan kod:

 #property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//--- Время открытия текущего часа, дня и недели
datetime _weekOpenTime = 0 ;
datetime _hourOpenTime = 0 ;
datetime _dayOpenTime= 0 ;
//--- Вести лог журнала
const bool inpFileLog= true ;
//--- Количество секунд в одном дне
const int SEC_PER_DAY= 86400 ;
//--- Флаг работоспособности индикатора
bool _isWorking= true ;
//--- Флаг соединения с торговым сервером (для таймера, получаем в OnCalculate())
bool _isConnected= false ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- Сбрасываем время открытия текущего часа, дня и недели
   _weekOpenTime= 0 ;
   _dayOpenTime = 0 ;
   _hourOpenTime= 0 ;
//--- Устанавливаем флаг работоспособности
   _isWorking= true ;
//--- Сбрасываем флаг установки соединения
   _isConnected= false ;
//--- Запускаем таймер
   if (! EventSetMillisecondTimer ( 20 ))
     {
       Print ( __FUNCTION__ , ": ОШИБКА #" , GetLastError (), ": таймер с частотой 20 не установлен!" );
       //--- Устанавливаем флаг неработоспособности индикатора
      _isWorking= false ;
     }
//--- Запрос данных
   SeriesInfoInteger ( _Symbol , PERIOD_W1 , SERIES_LASTBAR_DATE );
   SeriesInfoInteger ( _Symbol , PERIOD_D1 , SERIES_LASTBAR_DATE );
   SeriesInfoInteger ( _Symbol , PERIOD_H1 , SERIES_LASTBAR_DATE );
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//|                                                                   |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//--- Выключаем таймер
   EventKillTimer ();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer ()
  {
//---
   if (!_isWorking)
       return ;
//---
   if (!_isConnected)
       return ;
//---
   Print ( __FUNCTION__ , ": Данные старших ТФ загружены!" );
//--- Отключаем таймер
   EventKillTimer ();
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
//--- Проверяем связь с сервером
   if (! IsConnected ())                               // Если не удалось установить связь с сервером
     {
       //--- Сбрасываем флаг соединения с сервером
      _isConnected= false ;
       //--- Выходим
       return ( 0 );
     }
//--- Проверяем первый запуск индикатора
   if (prev_calculated<= 0 )
     {
       //--- Проверяем, записано ли время открытия текущей недели
       if (!CheckCurrentWeekOpenTime())                               // Если время не записано
         return ( 0 );                                                 // Выходим
       //--- Проверяем, записано ли время открытия текущего дня
       if (!CheckCurrentDayOpenTime())                               // Если время не записано
         return ( 0 );                                                 // Выходим
       //--- Проверяем, записано ли время открытия текущего часа
       if (!CheckCurrentHourOpenTime())                               // Если время не записано
         return ( 0 );                                                 // Выходим
       //--- Устанавливаем флаг соединения с сервером для запуска таймера
      _isConnected= true ;
     }
//---
   return ( rates_total );
  }
//+------------------------------------------------------------------+
//| Проверяем, записано ли время открытия текущей недели             |
//+------------------------------------------------------------------+
bool CheckCurrentWeekOpenTime()
  {
//--- Проверяем, записано ли время
   if (_weekOpenTime== 0 ) // Если время не записано
     {
       //--- Получаем время открытия недельного бара
       ResetLastError ();
       const datetime weekBarOpenTime=( datetime ) SeriesInfoInteger ( _Symbol , PERIOD_W1 , SERIES_LASTBAR_DATE );
       const int err= GetLastError ();
       //---
       if (inpFileLog)
        {
         Print ( __FILE__ , ": Время открытия недельного бара = " + TimeToString (weekBarOpenTime)+ ". Ошибка #" ,err);
        }
       //--- Проверяем, получено ли время открытия недельного бара
       if (weekBarOpenTime== 0 || err!= 0 ) // Если время бара не получено или история обновляется
         return ( false );                               // Возвращаем ложь
       //--- Запоминаем время открытия текущей недели (время открытия недельного бара - воскресенье)
      _weekOpenTime=weekBarOpenTime+SEC_PER_DAY;
       //---
       if (inpFileLog)
        {
         Print ( __FILE__ , ": Актуальное время открытия текущей недели = " + TimeToString (_weekOpenTime)+ ". Ошибка #" ,err);
        }
       //--- Возвращаем истину
       return ( true );
     }
//--- Время открытия недели ранее записано. Возвращаем истину
   return ( true );
  }
//+------------------------------------------------------------------+
//| Проверяем, записано ли время открытия текущего дня                  |
//+------------------------------------------------------------------+
bool CheckCurrentDayOpenTime()
  {
//--- Проверяем, записано ли время
   if (_dayOpenTime== 0 ) // Если время не записано
     {
       //--- Получаем время открытия дневного бара
       ResetLastError ();
       const datetime tempDayOpenTime=( datetime ) SeriesInfoInteger ( _Symbol , PERIOD_D1 , SERIES_LASTBAR_DATE );
       const int err= GetLastError ();
       //---
       if (inpFileLog)
        {
         Print ( __FILE__ , ": Время открытия текущего дня = " + TimeToString (tempDayOpenTime)+ ". Ошибка #" ,err);
        }
       //--- Проверяем, получено ли время открытия дневного бара
       if (tempDayOpenTime== 0 || err!= 0 ) // Если время бара не получено
         return ( false );                                 // Возвращаем ложь
       //--- Сохраняем в глобальную переменную значение открытия текущего дня
      _dayOpenTime=tempDayOpenTime;
       //---
       if (inpFileLog)
        {
         Print ( __FILE__ , ": Актуальное время открытия текущего дня = " + TimeToString (_dayOpenTime)+ ". Ошибка #" ,err);
        }
       //--- Возвращаем истину
       return ( true );
     }
//--- Время открытия дня ранее записано. Возвращаем истину
   return ( true );
  }
//+------------------------------------------------------------------+
//| Проверяем, записано ли время открытия текущего часа              |
//+------------------------------------------------------------------+
bool CheckCurrentHourOpenTime()
  {
//--- Проверяем, записано ли время
   if (_hourOpenTime== 0 ) // Если время не записано
     {
       //--- Получаем время открытия часового бара
       ResetLastError ();
       const datetime tempHourOpenTime=( datetime ) SeriesInfoInteger ( _Symbol , PERIOD_H1 , SERIES_LASTBAR_DATE );
       const int err= GetLastError ();
       //---
       if (inpFileLog)
        {
         Print ( __FILE__ , ": Время открытия текущего часа = " + TimeToString (tempHourOpenTime)+ ". Ошибка #" ,err);
        }
       //--- Проверяем, получено ли время открытия часового бара
       if (tempHourOpenTime== 0 || err!= 0 ) // Если время бара не получено
         return ( false );                                 // Возвращаем ложь
       //---
      _hourOpenTime=tempHourOpenTime;
       //---
       if (inpFileLog)
        {
         Print ( __FILE__ , ": Актуальное время открытия текущего часа = " + TimeToString (_hourOpenTime)+ ". Ошибка #" ,err);
        }
       //--- Возвращаем истину
       return ( true );
     }
//--- Время открытия часа ранее записано. Возвращаем истину
   return ( true );
  }
//+------------------------------------------------------------------+

Bana tavsiye edildiği gibi veri sayfalama uygular:

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

[SERVICE DESK] Zamanlayıcıda kıdemli TF'nin zamanı alınırken hata oluştu!

Slava , 2018.09.27 06:20

Birçok kez tartışıldı. "4066 hatası" sorgusu başına 12 sayfa

Ve OnInit'te bir istek göndermeniz ve OnCalculate'de analiz etmeniz doğru bir şekilde tavsiye edildi.

Milisaniye zamanlayıcı ne için? Eylemlerinizle istemci terminalinin normal şekilde yükselmesini engelliyorsunuz. Zamanlayıcınıza müdahale eden Windows mesajları değil, zamanlayıcınız herkese müdahale ediyor. Bir kez daha: MT4 İSTEMCİ TERMİNALİNDEKİ GÖSTERGELER ARAYÜZ AKIŞINDA ÇALIŞIYOR.

Uygulama tam olarak şudur: veri için ilk istek OnInit() içinde gerçekleşir. Ardından, ticaret sunucusuyla bağlantı kurulmasını bekliyoruz, ardından OnCalculate()'de! eski TF'lerin verilerini alıyoruz. Bugün ilk çalıştırmada sonucu alıyoruz:

 2018.10 . 04 09 : 10 : 56.266 test_isNewDayInOnCalculate EURGBP.e,M1: OnTimer : Данные старших ТФ загружены!
2018.10 . 04 09 : 10 : 56.237 test_isNewDayInOnCalculate EURGBP.e,M1: test_isNewDayInOnCalculate.mq4: Актуальное время открытия текущего часа = 2018.10 . 03 09 : 00 . Ошибка # 0
2018.10 . 04 09 : 10 : 56.237 test_isNewDayInOnCalculate EURGBP.e,M1: test_isNewDayInOnCalculate.mq4: Время открытия текущего часа = 2018.10 . 03 09 : 00 . Ошибка # 0
2018.10 . 04 09 : 10 : 56.237 test_isNewDayInOnCalculate EURGBP.e,M1: test_isNewDayInOnCalculate.mq4: Актуальное время открытия текущего дня = 2018.10 . 03 00 : 00 . Ошибка # 0
2018.10 . 04 09 : 10 : 56.237 test_isNewDayInOnCalculate EURGBP.e,M1: test_isNewDayInOnCalculate.mq4: Время открытия текущего дня = 2018.10 . 03 00 : 00 . Ошибка # 0
2018.10 . 04 09 : 10 : 56.237 test_isNewDayInOnCalculate EURGBP.e,M1: test_isNewDayInOnCalculate.mq4: Актуальное время открытия текущей недели = 2018.10 . 01 00 : 00 . Ошибка # 0
2018.10 . 04 09 : 10 : 56.237 test_isNewDayInOnCalculate EURGBP.e,M1: test_isNewDayInOnCalculate.mq4: Время открытия недельного бара = 2018.09 . 30 00 : 00 . Ошибка # 0

Logdan da anlaşılacağı gibi, saatin ve günün saatinin hatalı değerleri alındı.

Evet, geliştiriciler ( @Slava ) fark edebilir, bana verilen tüm tavsiyeleri uygulamadım. Onlar. Başlangıçta yavaş olanı başlatmam tavsiye edilse de, hızlı zamanlayıcıyı OnInit () içinde başlatıyorum. Ancak, bu durumda, bilerek yapılır. Bir arabirim iş parçacığında hızlı bir zamanlayıcı başlatılırsa ve diğer göstergelerin verilerinin alınmasını yavaşlatabilirse, bu büyük bir sorundur. Belgelerde bununla ilgili hiçbir uyarı yok, sık sık zamanlayıcılı bir programı piyasaya kolayca koyabilirsiniz, bu bir tür "virüs" olabilir ve diğer programların "kırılmasına" neden olabilir.

Yukarıdakilerle bağlantılı olarak, ya milisaniye zamanlayıcısının çalışmasına kısıtlamalar getirmenin ya da EventSetMillisecondTimer () belgelerinde işlevi OnInit () içinde çalıştıramayacağınızı belirtmenin gerekli olduğunu düşünüyorum, böylece terminal yükselebilir. normalde başlangıçta.

 
Bugün günün açılışında durum benzer, hata tekrarlandı. Test standı: üç göstergeli bir tablo. İkisi zamanlayıcıyı kullanmaz, üçüncüsü kullanır. Yükleme sırasında herkes yanlış veri aldı. Şimdi zamanlayıcıyı kullanan göstergeyi grafikten kaldırdım bakalım ne olacak.
 

Ve şimdi en ilginç olanı. Herhangi bir zamanlayıcı olmadan kod:

 #property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//--- Время открытия текущего часа, дня и недели
datetime _weekOpenTime = 0 ;
datetime _hourOpenTime = 0 ;
datetime _dayOpenTime= 0 ;
//--- Вести лог журнала
const bool inpFileLog= true ;
//--- Количество секунд в одном дне
const int SEC_PER_DAY= 86400 ;
//--- Флаг работоспособности индикатора
bool _isWorking= true ;
//--- Флаг соединения с торговым сервером (для таймера, получаем в OnCalculate())
bool _isConnected= false ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- Сбрасываем время открытия текущего часа, дня и недели
   _weekOpenTime= 0 ;
   _dayOpenTime = 0 ;
   _hourOpenTime= 0 ;
//--- Устанавливаем флаг работоспособности
   _isWorking= true ;
//--- Сбрасываем флаг установки соединения
   _isConnected= false ;
//--- Запрос данных
   SeriesInfoInteger ( _Symbol , PERIOD_W1 , SERIES_LASTBAR_DATE );
   SeriesInfoInteger ( _Symbol , PERIOD_D1 , SERIES_LASTBAR_DATE );
   SeriesInfoInteger ( _Symbol , PERIOD_H1 , SERIES_LASTBAR_DATE );
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//|                                                                   |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
//--- Проверяем связь с сервером
   if (! IsConnected ())                               // Если не удалось установить связь с сервером
     {
       //--- Сбрасываем флаг соединения с сервером
      _isConnected= false ;
       //--- Выходим
       return ( 0 );
     }
//--- Проверяем первый запуск индикатора
   if (prev_calculated<= 0 )
     {
       //--- Проверяем, записано ли время открытия текущей недели
       if (!CheckCurrentWeekOpenTime())                               // Если время не записано
         return ( 0 );                                                 // Выходим
       //--- Проверяем, записано ли время открытия текущего дня
       if (!CheckCurrentDayOpenTime())                               // Если время не записано
         return ( 0 );                                                 // Выходим
       //--- Проверяем, записано ли время открытия текущего часа
       if (!CheckCurrentHourOpenTime())                               // Если время не записано
         return ( 0 );                                                 // Выходим
       //--- Устанавливаем флаг соединения с сервером для запуска таймера
      _isConnected= true ;
       //---
       Print ( __FUNCTION__ , ": Данные старших ТФ загружены!" );
     }
//---
   return ( rates_total );
  }
//+------------------------------------------------------------------+
//| Проверяем, записано ли время открытия текущей недели             |
//+------------------------------------------------------------------+
bool CheckCurrentWeekOpenTime()
  {
//--- Проверяем, записано ли время
   if (_weekOpenTime== 0 ) // Если время не записано
     {
       //--- Получаем время открытия недельного бара
       ResetLastError ();
       const datetime weekBarOpenTime=( datetime ) SeriesInfoInteger ( _Symbol , PERIOD_W1 , SERIES_LASTBAR_DATE );
       const int err= GetLastError ();
       //---
       if (inpFileLog)
        {
         Print ( __FILE__ , ": Время открытия недельного бара = " + TimeToString (weekBarOpenTime)+ ". Ошибка #" ,err);
        }
       //--- Проверяем, получено ли время открытия недельного бара
       if (weekBarOpenTime== 0 || err!= 0 ) // Если время бара не получено или история обновляется
         return ( false );                               // Возвращаем ложь
       //--- Запоминаем время открытия текущей недели (время открытия недельного бара - воскресенье)
      _weekOpenTime=weekBarOpenTime+SEC_PER_DAY;
       //---
       if (inpFileLog)
        {
         Print ( __FILE__ , ": Актуальное время открытия текущей недели = " + TimeToString (_weekOpenTime)+ ". Ошибка #" ,err);
        }
       //--- Возвращаем истину
       return ( true );
     }
//--- Время открытия недели ранее записано. Возвращаем истину
   return ( true );
  }
//+------------------------------------------------------------------+
//| Проверяем, записано ли время открытия текущего дня                  |
//+------------------------------------------------------------------+
bool CheckCurrentDayOpenTime()
  {
//--- Проверяем, записано ли время
   if (_dayOpenTime== 0 ) // Если время не записано
     {
       //--- Получаем время открытия дневного бара
       ResetLastError ();
       const datetime tempDayOpenTime=( datetime ) SeriesInfoInteger ( _Symbol , PERIOD_D1 , SERIES_LASTBAR_DATE );
       const int err= GetLastError ();
       //---
       if (inpFileLog)
        {
         Print ( __FILE__ , ": Время открытия текущего дня = " + TimeToString (tempDayOpenTime)+ ". Ошибка #" ,err);
        }
       //--- Проверяем, получено ли время открытия дневного бара
       if (tempDayOpenTime== 0 || err!= 0 ) // Если время бара не получено
         return ( false );                                 // Возвращаем ложь
       //--- Сохраняем в глобальную переменную значение открытия текущего дня
      _dayOpenTime=tempDayOpenTime;
       //---
       if (inpFileLog)
        {
         Print ( __FILE__ , ": Актуальное время открытия текущего дня = " + TimeToString (_dayOpenTime)+ ". Ошибка #" ,err);
        }
       //--- Возвращаем истину
       return ( true );
     }
//--- Время открытия дня ранее записано. Возвращаем истину
   return ( true );
  }
//+------------------------------------------------------------------+
//| Проверяем, записано ли время открытия текущего часа              |
//+------------------------------------------------------------------+
bool CheckCurrentHourOpenTime()
  {
//--- Проверяем, записано ли время
   if (_hourOpenTime== 0 ) // Если время не записано
     {
       //--- Получаем время открытия часового бара
       ResetLastError ();
       const datetime tempHourOpenTime=( datetime ) SeriesInfoInteger ( _Symbol , PERIOD_H1 , SERIES_LASTBAR_DATE );
       const int err= GetLastError ();
       //---
       if (inpFileLog)
        {
         Print ( __FILE__ , ": Время открытия текущего часа = " + TimeToString (tempHourOpenTime)+ ". Ошибка #" ,err);
        }
       //--- Проверяем, получено ли время открытия часового бара
       if (tempHourOpenTime== 0 || err!= 0 ) // Если время бара не получено
         return ( false );                                 // Возвращаем ложь
       //---
      _hourOpenTime=tempHourOpenTime;
       //---
       if (inpFileLog)
        {
         Print ( __FILE__ , ": Актуальное время открытия текущего часа = " + TimeToString (_hourOpenTime)+ ". Ошибка #" ,err);
        }
       //--- Возвращаем истину
       return ( true );
     }
//--- Время открытия часа ранее записано. Возвращаем истину
   return ( true );
  }
//+------------------------------------------------------------------+

Ve yine de istediğiniz sonucu alamıyorsunuz. Geliştiriciler ( @Slava ) lütfen yorum yapın. Terminali birkaç eski TF'den yüklerken doğru verileri almak imkansızdır. Ön koşul, terminalin kapatıldıktan sonra bir saatten fazla kapalı kalmasıdır (çünkü saatlik çubuk verileri alıyoruz). Ve elbette, TF'deki lansman bir saatten az.

Zamanlayıcı çalışmadı.
 
Aleksey, internetteki kıdemli TF'lerden veri talebinde bulunuyorsunuz. Henüz bağlantı yok, büyük olasılıkla bir hata döndürdü. İlk kenenin gelmesiyle bir talepte bulunmaya çalışın.
Ülkeyi kontrol edemiyorum ve yanıma bir tablet almadım.