Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2006

 
Alexandr Sokolov #:

Интересно получается - Украина вроде не под санкциями а MetaQuotes не в России, почему тогда нас блокируют?

Это нас блокируют, а опасный регион
 
Tretyakov Rostyslav #:
Это нас блокируют, а опасный регион

Не понял?

 
Alexandr Sokolov #:

Не понял?

Трафик СНГ
 
Tretyakov Rostyslav #:
Трафик СНГ

Так при чём тут это?
... ладно денежные переводы ограничили конкретно для граждан России - а как трафик из всего СНГ может предоставлять угрозу?

 
Alexandr Sokolov #:

Так при чём тут это?
... ладно денежные переводы ограничили конкретно для граждан России - а как трафик из всего СНГ может предоставлять угрозу?

Деверсанты)))

Ты знаешь где находится сервер MQL5 Cloud Protector? Возможно у нас блокируют доступ к нему.

 
Tretyakov Rostyslav #:

Деверсанты)))

Ты знаешь где находится сервер MQL5 Cloud Protector? Возможно у нас блокируют доступ к нему.

По идее должен находится на Кипре

 
Alexandr Sokolov #:

По идее должен находится на Кипре

Нет. Серверы могут буть где угодно. Кипр - это только регистрация компании, даже офис может быть в другой стране.


"MetaQuotes Software Corp., созданная в 2000 году в Казани.

Сейчас компания зарегистрирована в офшорной зоне на Кипре.

Там находятся сбыт и маркетинг. Производственная часть и техподдержка находятся в Казани (Россия)."

 
Tretyakov Rostyslav #:

Нет. Серверы могут буть где угодно. Кипр - это только регистрация компании, даже офис может быть в другой стране.


"MetaQuotes Software Corp., созданная в 2000 году в Казани.

Сейчас компания зарегистрирована в офшорной зоне на Кипре.

Там находятся сбыт и маркетинг. Производственная часть и техподдержка находятся в Казани (Россия)."

Я этого не знал

 

Здравствуйте. Подсткажите, пожалста. 

Была какая-то функция проверяющая при инициализации, что индикатор, используемый советником завершил расчеты. Не могу вспомнить что за функция.

 
Andrei Sokolov #:

Здравствуйте. Подсткажите, пожалста. 

Была какая-то функция проверяющая при инициализации, что индикатор, используемый советником завершил расчеты. Не могу вспомнить что за функция.

INVALID_HANDLE и CopyBuffer -1

ну и конечно обеспечить загрузку необходимой истории

скрипт из Справки, добавлена вверху функция для подключения в робота, изменены еще немного комментарии,

оригинал смотрите в Справке

//+------------------------------------------------------------------+
//|                                                     _History.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Вызов загрузки истории                                           |
//+------------------------------------------------------------------+
void LoadingHistory()
  {
   if(LoadHistory)
     {
      //--- Загрузка истории
      for(int s=0; s<TRADE_SYMBOLS; s++)
        {
         //--- Если торговля по этому символу разрешена
         if(Symbols[s]!="")
            //---
            History(Symbols[s],PERIOD_H1,D'2020.01.01');
        }
     }
//иначе выходим
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void History(string InpLoadedSymbol,ENUM_TIMEFRAMES InpLoadedPeriod,datetime InpStartDate)
  {
//   Print("Start load ",InpLoadedSymbol+","+GetPeriodName(InpLoadedPeriod)," from ",InpStartDate);
//---
   int res=CheckLoadHistory(InpLoadedSymbol,InpLoadedPeriod,InpStartDate);
   switch(res)
     {
      case -1 :
         Print("Unknown symbol ",InpLoadedSymbol);
         break;
      case -2 :
         Print(InpLoadedSymbol+", "+GetPeriodName(InpLoadedPeriod)," from ",InpStartDate,"Requested bars more than max bars in chart!!!");
         break;
      case -3 :
         Print(InpLoadedSymbol+", "+GetPeriodName(InpLoadedPeriod)," from ",InpStartDate,"Program was stopped!!!");
         break;
      case -4 :
         Print(InpLoadedSymbol+", "+GetPeriodName(InpLoadedPeriod)," from ",InpStartDate,"Indicator shouldn't load its own data!!!");
         break;
      case -5 :
         Print(InpLoadedSymbol+", "+GetPeriodName(InpLoadedPeriod)," from ",InpStartDate,"Load failed!!!");
         break;
      case  0 :
         Print(InpLoadedSymbol+", "+GetPeriodName(InpLoadedPeriod)," from ",InpStartDate,"...loaded OK");
         break;
      case  1 :
         Print("Loading ",InpLoadedSymbol+", "+GetPeriodName(InpLoadedPeriod)," from ",InpStartDate," ...loaded previously");
         break;
      case  2 :
         Print(InpLoadedSymbol+", "+GetPeriodName(InpLoadedPeriod)," from ",InpStartDate,"Loaded previously and built!!!");
         break;
      default :
         Print(InpLoadedSymbol+", "+GetPeriodName(InpLoadedPeriod)," from ",InpStartDate,"Unknown result!!!");
     }
//---
   datetime first_date;
   SeriesInfoInteger(InpLoadedSymbol,InpLoadedPeriod,SERIES_FIRSTDATE,first_date);
   int bars=Bars(InpLoadedSymbol,InpLoadedPeriod);
//сколько всего загружено
//Print("First date ",first_date," - ",bars," bars");
//---
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CheckLoadHistory(string symbol,ENUM_TIMEFRAMES period,datetime start_date)
  {
   datetime first_date=0;
   datetime times[100];
//--- check symbol & period
   if(symbol==NULL || symbol=="")
      symbol=Symbol();
   if(period==PERIOD_CURRENT)
      period=Period();
//--- check if symbol is selected in the MarketWatch
   if(!SymbolInfoInteger(symbol,SYMBOL_SELECT))
     {
      if(GetLastError()==ERR_MARKET_UNKNOWN_SYMBOL)
         return(-1);
      SymbolSelect(symbol,true);
     }
//--- check if data is present
   SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date);
   if(first_date>0 && first_date<=start_date)
      return(1);
//--- don't ask for load of its own data if it is an indicator
   if(MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR && Period()==period && Symbol()==symbol)
      return(-4);
//--- second attempt
   if(SeriesInfoInteger(symbol,PERIOD_M1,SERIES_TERMINAL_FIRSTDATE,first_date))
     {
      //--- there is loaded data to build timeseries
      if(first_date>0)
        {
         //--- force timeseries build
         CopyTime(symbol,period,first_date+PeriodSeconds(period),1,times);
         //--- check date
         if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date))
            if(first_date>0 && first_date<=start_date)
               return(2);
        }
     }
//--- max bars in chart from terminal options
   int max_bars=TerminalInfoInteger(TERMINAL_MAXBARS);
//--- load symbol history info
   datetime first_server_date=0;
   while(!SeriesInfoInteger(symbol,PERIOD_M1,SERIES_SERVER_FIRSTDATE,first_server_date) && !IsStopped())
      Sleep(5);
//--- fix start date for loading
   if(first_server_date>start_date)
      start_date=first_server_date;
   if(first_date>0 && first_date<first_server_date)
      Print("Warning: first server date ",first_server_date," for ",symbol,
            " does not match to first series date ",first_date);
//--- load data step by step
   int fail_cnt=0;
   while(!IsStopped())
     {
      //--- wait for timeseries build
      while(!SeriesInfoInteger(symbol,period,SERIES_SYNCHRONIZED) && !IsStopped())
         Sleep(5);
      //--- ask for built bars
      int bars=Bars(symbol,period);
      if(bars>0)
        {
         if(bars>=max_bars)
            return(-2);
         //--- ask for first date
         if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date))
            if(first_date>0 && first_date<=start_date)
               return(0);
        }
      //--- copying of next part forces data loading
      int copied=CopyTime(symbol,period,bars,100,times);
      if(copied>0)
        {
         //--- check for data
         if(times[0]<=start_date)
            return(0);
         if(bars+copied>=max_bars)
            return(-2);
         fail_cnt=0;
        }
      else
        {
         //--- no more than 100 failed attempts
         fail_cnt++;
         if(fail_cnt>=100)
            return(-5);
         Sleep(10);
        }
     }
//--- stopped
   return(-3);
  }
//+------------------------------------------------------------------+
//| Возвращает строкое значение периода                              |
//+------------------------------------------------------------------+
string GetPeriodName(ENUM_TIMEFRAMES period)
  {
   if(period==PERIOD_CURRENT)
      period=Period();
//---
   switch(period)
     {
      case PERIOD_M1:
         return("M1");
      case PERIOD_M2:
         return("M2");
      case PERIOD_M3:
         return("M3");
      case PERIOD_M4:
         return("M4");
      case PERIOD_M5:
         return("M5");
      case PERIOD_M6:
         return("M6");
      case PERIOD_M10:
         return("M10");
      case PERIOD_M12:
         return("M12");
      case PERIOD_M15:
         return("M15");
      case PERIOD_M20:
         return("M20");
      case PERIOD_M30:
         return("M30");
      case PERIOD_H1:
         return("H1");
      case PERIOD_H2:
         return("H2");
      case PERIOD_H3:
         return("H3");
      case PERIOD_H4:
         return("H4");
      case PERIOD_H6:
         return("H6");
      case PERIOD_H8:
         return("H8");
      case PERIOD_H12:
         return("H12");
      case PERIOD_D1:
         return("Daily");
      case PERIOD_W1:
         return("Weekly");
      case PERIOD_MN1:
         return("Monthly");
     }
//---
   return("unknown period");
  }
//+------------------------------------------------------------------+
Причина обращения: