Разные сделки в разных терминалах - страница 2

 
Vladimir Karputov:

Скрипт, загрузка истории - уже только за это Вам при работе в MQL5 нужно связывать руки и не пускать за клавиатуру.

Все Ваши ошибки из-за этого. Выкиньте скрипт, историю в MQL5 НЕ НУЖНО подкачивать, вместо этого индикатор ДОЛЖЕН корректно отрабатывать получение нового бара и изменение истории.

при запуске робота  подгрузка идет автоматом на все символы если требуется

этот скрипт MQ и они его рекомендовали, сам терминал не способен правильно загружать требуемое(он просто не знает сколько нужно)

представители сами рекомендовали использовать, если не его, то свое решение правильной загрузки истории, давно писал как недозагрузка может повлиять, большинства это не косалось,

и никакой максбар и макскалькуляте там не работает.

 

но тут то все загружено и iCustom  выдает иногда вместо нужного бара - значение прошлого.

7 символов, на 50 сделок в 3 терминалах сравнение, в одном не открытие, в принте стоят данные прошлого бара, весь M1

 
Fast235:

этот скрипт MQ и они его рекомендовали, сам терминал не способен правильно загружать требуемое(он просто не знает сколько нужно)

Ну так скрипт в студию! Почему о таком чудесном скрипте, который рекомендоавли сами MQ, никому ничего неизвестно?

 
Fast235:
но тут то все загружено и iCustom  выдает иногда вместо нужного бара - значение прошлого.

Вот тут интересно уже. Можно подробнее?

 
Ihor Herasko:

Ну так скрипт в студию! Почему о таком чудесном скрипте, который рекомендоавли сами MQ, никому ничего неизвестно?


//+------------------------------------------------------------------+
//|                                              TestLoadHistory.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+

#include "..\NL_Multi.mq5"
//+------------------------------------------------------------------+
//| Вызов загрузки истории                                           |
//+------------------------------------------------------------------+
void LoadingHistory()
  {
   if(LoadHistory)
     {
      //--- Загрузка истории
      for(int s=0; s<TRADE_SYMBOLS; s++)
        {
         //--- Если торговля по этому символу разрешена
         if(Symbols[s]!="")
            //---
            History(Symbols[s],PERIOD_H1,D'2018.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("Requested bars more than max bars in chart ");
         break;
      case -3 :
         Print("Program was stopped ");
         break;
      case -4 :
         Print("Indicator shouldn't load its own data ");
         break;
      case -5 :
         Print("Load failed ");
         break;
      case  0 :
         Print("Loaded OK ");
         break;
      case  1 :
         Print("Loaded previously ");
         break;
      case  2 :
         Print("Loaded previously and built ");
         break;
      default :
         Print("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");
  }
//+------------------------------------------------------------------+
 
Vladimir Karputov:

Вот тут интересно уже. Можно подробнее?

ну как подробней, вы пропустили прошлый бунт, тогда у меня бан вроде неделя был, за урода на месяц тут забанили, он со вчера тоже сидит)

 
Ihor Herasko:

Ну так скрипт в студию! Почему о таком чудесном скрипте, который рекомендоавли сами MQ, никому ничего неизвестно?

странно что не видели его, он в справке

этот код оригинал, за исключением первой функции

 
Fast235:

но тут то все загружено и iCustom  выдает иногда вместо нужного бара - значение прошлого.

7 символов, на 50 сделок в 3 терминалах сравнение, в одном не открытие, в принте стоят данные прошлого бара, весь M1

то есть мультивалютник... а вы проверяете, что на всех символах открыт нужный бар ? они открываются в разное время, на разных тиках

типичная ошибка в мультике - открытие бара контроллируется про текущему символу, а индикаторы проверяются по всем..

Например когда текущий EURUSD, открывается часовой бар 12:00, то на каком-нить GBPCHF текущий бар 11:00

 
Fast235:

Это не похоже на скрипт (этот код невозможно запустить). Скорее, библиотека, которой непонятно, как пользоваться. А главное непонятно, зачем.

 
Fast235:

странно что не видели его, он в справке

этот код оригинал, за исключением первой функции

То есть наличие кода в справке уже считается рекомендованным кодом разработчиков? Справка - это всего лишь демонстрация того, как работает та или иная функция. Ни в коем случае не используйте справочные коды как есть в боевых условиях. Они на это не рассчитаны.