FORTS Please help - page 12

 
komposter:
Vomit, Edward, vomit =)
Oh, please, I do it with a "U")))
 
Mikalas:

I understand that, but why couldn't it have been done in the way I described above?

It would have had no effect on the speed of processing the information:

If there was any information on the tool - record the date when it first appeared and store it in memory - 8 bytes!

You can even not store it, but when you do SymbolSelect(), you put it into memory.

When we address it with the SeriesInfoInteger (SERIES_TERMINAL_FIRSTDATE) function, we get:

A -1 - no data

Б. 0 - no data available but not ready

В. A - date of the first information

Then everything would be clear and transparent.

-1 - Going to the server

0 - We wait for the next iteration to check and/or build the timeseries

> 0 Build timeseries

From your reference I understood that YOU almost did that, turns out not.

Apparently one programmer started writing and someone else finished

Your implementation is good for FOREX, but very inconvenient for FORTS.

For FORTS, quotes may not come for a long time and the time series is downloaded from the platform.

and you have to repeat the whole process of data retrieval again, and with server login!

Use Expert Advisors to work with multiple symbol data, everything will be convenient and easy. The indicators in the MT5 environment are primarily designed to quickly calculate their time series data and display the results of the calculation on the chart. As the platform evolved, they gained many functions available to experts, but the basic architectural restrictions remained. And there is no reason to completely eliminate the differences between indicators and EAs. Once again I would like to remind you that the most important difference is that the Expert Advisors have their own processing flow. The indicators are calculated in a service flow, and this flow performs many other functions. This is why even the functionality we have in common with the Expert Advisors is implemented differently.

As for access to the history, there is no universal solution. The terminal cannot predict in advance what the user wants, i.e. whether the Expert Advisor wants to get only one date or wants to request the entire available history. The terminal chooses the fast access to the timeframe, i.e., at the user's request, it tries to cache the current (synchronized with the server) state of the history in full. Yes, there is a class of applications where this approach is not convenient. But if the programmer will not focus on the demand to rewrite the terminal "personally", he will find a solution in the existing functionality. If there is no solution at all, only then the question of extending the functionality arises.

Describe a specific problem with a specific code, without generalizations. Otherwise, you get an incomprehensible functionality of one single function bloated into "everything is wrong" and "everything is inconvenient".

 
antt:

Use Expert Advisors to work with multiple symbol data, everything will be convenient and simple. Indicators in the MT5 environment are primarily designed to quickly calculate on their time series data and display the results of the calculation on the chart. As the platform evolved, they gained many functions available to experts, but the basic architectural restrictions remained. And there is no reason to completely eliminate the differences between indicators and EAs. Once again I would like to remind you that the most important difference is that the Expert Advisors have their own processing flow. The indicators are calculated in a service flow, and this flow performs many other functions. That is why even the functionality shared with the Expert Advisors is implemented in different ways.

As for access to history, there is no universal solution. The terminal cannot predict in advance what the user wants, i.e. whether the Expert Advisor wants to get only one date or whether it wants to request the whole available history. The terminal has made a choice in favor of rapid access to the timeframe, i.e. at the user's request, it tries to cache the current (synchronized with the server) state of the history in its entirety. Yes, there is a class of applications where this approach is not convenient. But if the programmer will not focus on the demand to rewrite the terminal "personally", he will find a solution in the existing functionality. If there is no solution at all, only then the question of extending the functionality arises.

Describe a specific problem with a specific code, without generalizations. Otherwise, you get an incomprehensible functionality of one single function bloated into "everything is wrong" and "everything is inconvenient".

Hello, Anton!

Let us "break down" your answer:

1. "Use experts to work with multiple character data, everything will be convenient and simple."

I need a history (close) on 3 symbols with mapping to a chart.

Is there any other way to get close history from EA?

And I have to make a "vegetable garden" to draw results from an EA (in a separate window)!

2. "As for access to the history, there is no universal solution. The terminal cannot predict in advance what the user wants, i.e. whether the Expert Advisor wants to obtain only one date or wants to request the entire available history".

There is no need to predict the consumer's wishes. You just have to "tell" what state the data is in on the symbol AND ALL!!!

Then the user will know exactly what actions to perform next.

3."But if a programmer does not focus on the requirement to rewrite the terminal "personally", he will find a solution in the existing functionality.

I didn't say, much less demand to do something "for yourself", and the solution will of course always be found in the existing functionality.

4. "If there is no solution at all, that's when the question of extending the functionality comes up. "

You don't need to extend the functionality, you can just introduce minor changes for ease of use and speed.

5. "Describe a specific problem with a specific code, without generalisation.Otherwise, you get the misunderstood functionality of one single function bloated into "everything is wrong" and "everything is inconvenient""

OK, I'll prepare myself for an "extended" explanation of the problem with a specific code.

Only, unfortunately, you can't "rely" on the reference book...

Thanks for replying.

 
Mikalas:


As always, the user position is that I am the centre of the universe and the world revolves around me. You have to use the functionality that is available. Especially since it has been shown more than once how to get the data.
 
barabashkakvn:
As always, the user position is that I am the centre of the universe and the world revolves around me. You have to use the functionality that is available. Especially since it has been shown more than once how to get the data.
How much is 2x2 ?
 
barabashkakvn:
As always, the user's position is that I am the centre of the universe and the world revolves around me. You have to use the functionality that you have. Moreover, it has been shown more than once how to get the data.

And you think it's the other way around. The centre of the universe is the developers and the world revolves around them? Is it so?

Then answer one question: Who is this terminal being developed for? Are they making it for themselves or for the user?

If they do it for themselves, no questions ... It's OK.

And if it's for the user, then their opinion should be listened to at least...

 
antt :

........

Describe a specific problem with specific code, without generalizations. Otherwise, it turns out that the misunderstood functionality of a single function is blown up to "everything is wrong" and "everything is inconvenient."

Describing:

Real account FORTS broker.

Problem - I'm not getting timeseries data.

1. The pictures show that there is data in the terminal.

2. Here is the code:

 //+------------------------------------------------------------------+
//|                                                     Ind_test.mq5 |
//|                                          Copyright 2015, Mikalas |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Mikalas"
#property link        "http://www.mql5.com"
#property version    "1.00"
//
#property indicator_separate_window

#property indicator_buffers 1
#property indicator_plots    1

//--- plot Label1
#property indicator_label1   "Data"
#property indicator_type1   DRAW_LINE
#property indicator_color1   clrYellow
#property indicator_style1   STYLE_SOLID
#property indicator_width1   1
//---
ENUM_TIMEFRAMES time_frame; //Таймфрейм
//
string sec_symbol;
//
input string StartData = "2015.03.16" ; //Дата начала расчёта индикатора
//--- indicator buffers
double MainBuffer[];
//---
datetime start_time;
datetime end_time;
datetime sec_times[];
//
int   sec_bars;
//
int next_month;
//+------------------------------------------------------------------+
//| Indicator Expert set second symbol function                      |
//+------------------------------------------------------------------+
string SetSecSymbol( const string aSymbol )
{
   int str_tire = 0 ;
   int str_tochka = 0 ;
   ushort let_symbol;
   string str_month, str_year;
   long aYear;
    
   int str_size = StringLen ( aSymbol );
    
   for ( int i = 0 ; i < str_size; i++ )
  {
    let_symbol = StringGetCharacter ( aSymbol, i );
      
     if ( let_symbol == '-' )
    {
      str_tire = i;
    }
      
     if ( let_symbol == '.' )
    {
      str_tochka = i;
    }
  }
    
   if ( ( str_tire != 0 ) && ( str_tochka != 0 ) )
  {
    str_month = StringSubstr ( aSymbol, str_tire + 1 , str_tochka - str_tire - 1 );
    str_year = StringSubstr ( aSymbol, str_tochka + 1 , str_size - str_tochka - 1 );
    
     if ( str_month == "12" )
    {
      str_month = IntegerToString ( next_month );
        
      aYear = StringToInteger ( str_year );
      aYear = aYear + 1 ;
      str_year = IntegerToString ( aYear );
    }
     else
    {
       long aMonth = StringToInteger ( str_month );
      aMonth = aMonth + next_month;
      
       if ( aMonth > 12 )
      {
        aMonth = aMonth - 12 ;
        aYear = StringToInteger ( str_year );
        aYear = aYear + 1 ;
        str_year = IntegerToString ( aYear );
      } 
      str_month = IntegerToString ( aMonth );
    }
  }
//--- Set new symbol 
   return ( StringSubstr ( aSymbol, 0 , str_tire + 1 ) + str_month + "." + str_year );
}
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
bool CheckBrent( const string a_symbol )
{
   ushort let_symbol;
   int str_size = StringLen ( a_symbol );
    
   for ( int i = 0 ; i < str_size; i++ )
  {
    let_symbol = StringGetCharacter ( a_symbol, i );
      
     if ( let_symbol == '-' )
    {
       string str_info = StringSubstr ( a_symbol, 0 , i );
//---      
       if ( str_info == "BR" )
      {
         return ( true );
      }
    }
  }
   return ( false );
}
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
{
  time_frame = PERIOD_CURRENT ;
  next_month = 3 ;
//---
   if ( CheckBrent( _Symbol ) ) next_month = 1 ;
//---
  sec_symbol = SetSecSymbol( _Symbol );
//---
   SymbolSelect ( sec_symbol, true );  
//---
  end_time = datetime ( SymbolInfoInteger ( _Symbol , SYMBOL_EXPIRATION_TIME ) );
  start_time = datetime ( StringToTime ( StartData ) + 19 * 3600 + 10 * 60 );
//---  
   IndicatorSetInteger ( INDICATOR_DIGITS , 0 );
   IndicatorSetString ( INDICATOR_SHORTNAME , "FORTS" );
   SetIndexBuffer ( 0 , MainBuffer, INDICATOR_DATA );
   PlotIndexSetDouble ( 0 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
   ArraySetAsSeries ( MainBuffer, true );
//---
   if ( ( TimeCurrent () - start_time ) < 60 )
  {
     Print ( "Слишком мал промежуток времени!" );
     return ( INIT_FAILED );
  }
//--- 
   Print ( "OnInit: Получение баров для символа " , sec_symbol, "..." ); 
  sec_bars = GetBars( sec_symbol, time_frame, start_time, end_time );
//---
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//|  Custom indicator deinitialization function                      |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason )
{
   if ( reason == REASON_INITFAILED )
  {
     ChartIndicatorDelete ( 0 , 1 , "FORTS" ); 
  }
}
//+------------------------------------------------------------------+
// Custom indicator Check timer function                             |
//+------------------------------------------------------------------+
bool CheckTimer( const uint start_value, const uint per_value )
{
   uint end_value = GetTickCount ();
  
   if ( end_value < start_value )
  {
     if ( ( start_value - end_value ) >= per_value ) return ( true );
  } 
   else
  {
     if ( ( end_value - start_value ) >= per_value ) return ( true );
  }
   return ( false );
}
//+------------------------------------------------------------------+
//| Custom indicator Get local data function                         |
//+------------------------------------------------------------------+
int GetLocalData( const string a_symbol, ENUM_TIMEFRAMES a_period, datetime start_date, datetime end_date )
{
   datetime times[ 1 ];
//---  
   long first_date = SeriesInfoInteger ( a_symbol, PERIOD_M1 , SERIES_TERMINAL_FIRSTDATE );  
  
   if ( first_date > 0 )
   Print ( "GetLocalData: Первая дата в терминале есть." );
  {
//--- force timeseries build
     CopyTime ( a_symbol, a_period, datetime ( first_date ) + PeriodSeconds ( a_period ), 1 , times );
//--- check date
    first_date = SeriesInfoInteger ( a_symbol, PERIOD_M1 , SERIES_FIRSTDATE );
//---        
     if ( first_date > 0 && first_date <= long ( start_date ) )
    {
       bool is_sync = bool ( SeriesInfoInteger ( a_symbol, a_period, SERIES_SYNCHRONIZED ) ); 
//---     
       if ( is_sync )
      {
         Print ( "GetLocalData: Серия синхронизирована." );
         return ( Bars ( a_symbol, a_period, start_date, end_date ) );
      }
    }  
  }
   Print ( "GetLocalData: Не удалось построить таймсерию!" );
   return ( 0 );
}
//+------------------------------------------------------------------+
//| Custom indicator Get server data function                        |
//+------------------------------------------------------------------+
int LoadServerData( const string a_symbol, ENUM_TIMEFRAMES period, const datetime start_date, const datetime end_date  )
{
   SeriesInfoInteger ( a_symbol, PERIOD_M1 , SERIES_SERVER_FIRSTDATE );
   int fail_cnt = 0 ;
//---
   while ( fail_cnt < 10 )
  {
     uint start_tick = GetTickCount ();
//---    
     while ( !CheckTimer( start_tick, 5 ) )
    {
       if ( SymbolIsSynchronized ( a_symbol ) )
      {
         Print ( "LoadServerData: Символ синхронизирован." );
         return ( GetLocalData( a_symbol, period, start_date, end_date ) );
      }
    }
    fail_cnt++;
    start_tick = GetTickCount ();
  }
   Print ( "LoadServerData: Не удалось загрузить историю с сервера!" );
   return ( 0 );
}
//+------------------------------------------------------------------+
//| Custom indicator Get bars function                               |
//+------------------------------------------------------------------+
int GetBars( string symbol, ENUM_TIMEFRAMES period, const datetime start_date, const datetime end_date )
{
//---Check for symbol present
   if ( ! SymbolInfoInteger ( symbol, SYMBOL_SELECT ) )
  {
     ResetLastError ();
//---    
     if ( GetLastError () != ERR_MARKET_UNKNOWN_SYMBOL )
    {
       SymbolSelect ( symbol, true );
    }
     else
    {
       Print ( "GetBars: Неизвестный символ - " , symbol );
       return ( 0 );
    }    
  }
//---Check program  
   if ( MQL5InfoInteger ( MQL5_PROGRAM_TYPE ) == PROGRAM_INDICATOR && Period () == period && Symbol () == symbol )
  {
     Print ( "GetBars: Не пройдена проверка типа программы!" );
     return ( 0 );
  }  
//---
   if ( SymbolIsSynchronized ( symbol ) )
  {
     Print ( "GetBars: Символ синхронизирован." );
//---Check series syncronization
     bool is_sync = bool ( SeriesInfoInteger ( symbol, period, SERIES_SYNCHRONIZED ) );
   
     if ( is_sync )
    {
       Print ( "GetBars: Серия синхронизирована." );
       return ( Bars ( symbol, period, start_date, end_date ) );
    }
     else
    {
       Print ( "GetBars: Локальная загрузка..." );
       return ( GetLocalData( symbol, period, start_date, end_date ) );
    }  
  }
   else
  {
     Print ( "GetBars: Символ НЕ синхронизирован. Загрузка данных с сервера..." );
     return ( LoadServerData( symbol, period, start_date, end_date ) );
  }       
//---  
   return ( 0 );
}
//+------------------------------------------------------------------+
//| 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[])
{
   int nStartBar = rates_total - prev_calculated;
//---
   ArraySetAsSeries ( time, true );
   ArraySetAsSeries ( close, true );
   ArraySetAsSeries ( sec_times, true );
//---
   Print ( "OnCalculate: Получение баров для символа " , sec_symbol, "..." );
  sec_bars = GetBars( sec_symbol, time_frame, start_time, end_time );
//---  
   if ( sec_bars < 1 )
  {
     Print ( "OnCalculate: Не получены бары по символу - " , sec_symbol );
     return ( prev_calculated );
  }
   else
  {
    sec_bars = CopyTime ( sec_symbol, time_frame, 0 , sec_bars, sec_times );
     if ( sec_bars < 1 )
    {
       Print ( "OnCalculate: Не скопированы тийминги по символу - " , sec_symbol );
       return ( prev_calculated );
    }
  }
   Print ( "OnCalculate: Данные получены." );
 
   return ( rates_total );
}

//+------------------------------------------------------------------+

3. And here is the outcome:

 2015.03 . 31 06 : 39 : 16.826 Ind_test (BR- 4.15 ,M1)   OnInit : Получение баров для символа BR- 5.15 ...
2015.03 . 31 06 : 39 : 16.827 Ind_test (BR- 4.15 ,M1)   GetBars: Символ НЕ синхронизирован. Загрузка данных с сервера...
2015.03 . 31 06 : 39 : 16.848 Ind_test (BR- 4.15 ,M1)   LoadServerData: Символ синхронизирован.
2015.03 . 31 06 : 39 : 16.848 Ind_test (BR- 4.15 ,M1)   GetLocalData: Первая дата в терминале есть.
2015.03 . 31 06 : 39 : 16.848 Ind_test (BR- 4.15 ,M1)   GetLocalData: Не удалось построить таймсерию!
2015.03 . 31 06 : 39 : 16.848 Ind_test (BR- 4.15 ,M1)   OnCalculate : Получение баров для символа BR- 5.15 ...
2015.03 . 31 06 : 39 : 16.848 Ind_test (BR- 4.15 ,M1)   GetBars: Символ синхронизирован.
2015.03 . 31 06 : 39 : 16.848 Ind_test (BR- 4.15 ,M1)   GetBars: Серия синхронизирована.
2015.03 . 31 06 : 39 : 16.848 Ind_test (BR- 4.15 ,M1)   OnCalculate : Не получены бары по символу - BR- 5.15
2015.03 . 31 06 : 39 : 49.379 Ind_test (ED- 6.15 ,M1)   OnInit : Получение баров для символа ED- 9.15 ...
2015.03 . 31 06 : 39 : 49.379 Ind_test (ED- 6.15 ,M1)   GetBars: Символ НЕ синхронизирован. Загрузка данных с сервера...
2015.03 . 31 06 : 39 : 49.399 Ind_test (ED- 6.15 ,M1)   LoadServerData: Символ синхронизирован.
2015.03 . 31 06 : 39 : 49.399 Ind_test (ED- 6.15 ,M1)   GetLocalData: Первая дата в терминале есть.
2015.03 . 31 06 : 39 : 49.399 Ind_test (ED- 6.15 ,M1)   GetLocalData: Не удалось построить таймсерию!
2015.03 . 31 06 : 39 : 49.399 Ind_test (ED- 6.15 ,M1)   OnCalculate : Получение баров для символа ED- 9.15 ...
2015.03 . 31 06 : 39 : 49.399 Ind_test (ED- 6.15 ,M1)   GetBars: Символ синхронизирован.
2015.03 . 31 06 : 39 : 49.399 Ind_test (ED- 6.15 ,M1)   GetBars: Серия синхронизирована.
2015.03 . 31 06 : 39 : 49.399 Ind_test (ED- 6.15 ,M1)   OnCalculate : Не получены бары по символу - ED- 9.15
2015.03 . 31 06 : 39 : 55.555 Ind_test (Eu- 6.15 ,M1)   OnInit : Получение баров для символа Eu- 9.15 ...
2015.03 . 31 06 : 39 : 55.555 Ind_test (Eu- 6.15 ,M1)   GetBars: Символ НЕ синхронизирован. Загрузка данных с сервера...
2015.03 . 31 06 : 39 : 55.567 Ind_test (Eu- 6.15 ,M1)   LoadServerData: Символ синхронизирован.
2015.03 . 31 06 : 39 : 55.567 Ind_test (Eu- 6.15 ,M1)   GetLocalData: Первая дата в терминале есть.
2015.03 . 31 06 : 39 : 55.567 Ind_test (Eu- 6.15 ,M1)   GetLocalData: Не удалось построить таймсерию!
2015.03 . 31 06 : 39 : 55.567 Ind_test (Eu- 6.15 ,M1)   OnCalculate : Получение баров для символа Eu- 9.15 ...
2015.03 . 31 06 : 39 : 55.567 Ind_test (Eu- 6.15 ,M1)   GetBars: Символ синхронизирован.
2015.03 . 31 06 : 39 : 55.567 Ind_test (Eu- 6.15 ,M1)   GetBars: Серия синхронизирована.
2015.03 . 31 06 : 39 : 55.567 Ind_test (Eu- 6.15 ,M1)   OnCalculate : Не получены бары по символу - Eu- 9.15
2015.03 . 31 06 : 40 : 01.683 Ind_test (GAZR- 6.15 ,M1) OnInit : Получение баров для символа GAZR- 9.15 ...
2015.03 . 31 06 : 40 : 01.683 Ind_test (GAZR- 6.15 ,M1) GetBars: Символ НЕ синхронизирован. Загрузка данных с сервера...
2015.03 . 31 06 : 40 : 01.694 Ind_test (GAZR- 6.15 ,M1) LoadServerData: Символ синхронизирован.
2015.03 . 31 06 : 40 : 01.694 Ind_test (GAZR- 6.15 ,M1) GetLocalData: Первая дата в терминале есть.
2015.03 . 31 06 : 40 : 01.694 Ind_test (GAZR- 6.15 ,M1) GetLocalData: Не удалось построить таймсерию!
2015.03 . 31 06 : 40 : 01.694 Ind_test (GAZR- 6.15 ,M1) OnCalculate : Получение баров для символа GAZR- 9.15 ...
2015.03 . 31 06 : 40 : 01.694 Ind_test (GAZR- 6.15 ,M1) GetBars: Символ синхронизирован.
2015.03 . 31 06 : 40 : 01.694 Ind_test (GAZR- 6.15 ,M1) GetBars: Серия синхронизирована.
2015.03 . 31 06 : 40 : 01.694 Ind_test (GAZR- 6.15 ,M1) OnCalculate : Не получены бары по символу - GAZR- 9.15
Files:
20150331.log  7 kb
 

How to reproduce?

Terminal connected to open, history on all symbols deleted from disk before start-up

Indicator log from the moment of start

2015.03.31 11:00:35.611 tmp6 (GAZR-6.15,M1)     OnInit: Получение баров для символа GAZR-9.15...
2015.03.31 11:00:35.611 tmp6 (GAZR-6.15,M1)     GetBars: Символ НЕ синхронизирован. Загрузка данных с сервера...
2015.03.31 11:00:35.638 tmp6 (GAZR-6.15,M1)     LoadServerData: Символ синхронизирован.
2015.03.31 11:00:35.638 tmp6 (GAZR-6.15,M1)     GetLocalData: Не удалось построить таймсерию!
2015.03.31 11:00:35.638 tmp6 (GAZR-6.15,M1)     OnCalculate: Получение баров для символа GAZR-9.15...
2015.03.31 11:00:35.638 tmp6 (GAZR-6.15,M1)     GetBars: Символ синхронизирован.
2015.03.31 11:00:35.638 tmp6 (GAZR-6.15,M1)     GetBars: Серия синхронизирована.
2015.03.31 11:00:35.638 tmp6 (GAZR-6.15,M1)     OnCalculate: Не получены бары по символу - GAZR-9.15
2015.03.31 11:00:36.306 tmp6 (GAZR-6.15,M1)     OnCalculate: Получение баров для символа GAZR-9.15...
2015.03.31 11:00:36.306 tmp6 (GAZR-6.15,M1)     GetBars: Символ синхронизирован.
2015.03.31 11:00:36.306 tmp6 (GAZR-6.15,M1)     GetBars: Серия синхронизирована.
2015.03.31 11:00:36.306 tmp6 (GAZR-6.15,M1)     OnCalculate: Данные получены.
2015.03.31 11:00:37.123 tmp6 (GAZR-6.15,M1)     OnCalculate: Получение баров для символа GAZR-9.15...
2015.03.31 11:00:37.123 tmp6 (GAZR-6.15,M1)     GetBars: Символ синхронизирован.
2015.03.31 11:00:37.123 tmp6 (GAZR-6.15,M1)     GetBars: Серия синхронизирована.
2015.03.31 11:00:37.123 tmp6 (GAZR-6.15,M1)     OnCalculate: Данные получены.


As you can see in less than a second from the moment of start the symbol data became available to the indicator.

 
alexvd:

How to reproduce?

Terminal connected to open, history on all symbols deleted from disk before start-up

Indicator log from the moment of start


As you can see in less than a second from the moment of start the data on the symbol became available to the indicator.

Afternoon!

In other words, SECOND is not time during the electronic trading?

In other words, with a synchronized symbol and synchronized time series, we cannot get

Bars(immediately) - is this normal?

(For me) it's a mistake.

2015.03.31 11:00:35.638 tmp6 (GAZR-6.15,M1)     GetBars: Символ синхронизирован.
2015.03.31 11:00:35.638 tmp6 (GAZR-6.15,M1)     GetBars: Серия синхронизирована.
2015.03.31 11:00:35.638 tmp6 (GAZR-6.15,M1)     OnCalculate: Не получены бары по символу - GAZR-9.15

2. When there is data in TERMINAL (see fig. all bars after March 16), we are forced to go to server, is this normal?

The inconvenience and the long time it takes to get the information(for me) is obvious.

2015.03.31 11:00:35.611 tmp6 (GAZR-6.15,M1)     OnInit: Получение баров для символа GAZR-9.15...
2015.03.31 11:00:35.611 tmp6 (GAZR-6.15,M1)     GetBars: Символ НЕ синхронизирован. Загрузка данных с сервера...
 
Mikalas:

Good afternoon!

So a SECOND in e-commerce is not time?

A second from the start, i.e. once at the start. "Not time."
Reason: