FORTALEZAS Por favor, ayuda - página 12

 
komposter:
Vómito, Edward, vómito =)
Oh, por favor, lo hago con una "U"))
 
Mikalas:

Lo entiendo, pero ¿por qué no se podría haber hecho de la forma que he descrito anteriormente?

No habría tenido ningún efecto en la velocidad de procesamiento de la información:

Si había alguna información sobre la herramienta, registre la fecha en que apareció por primera vez y guárdela en la memoria: ¡8 bytes!

Incluso puedes no almacenarlo, pero cuando haces SymbolSelect(), lo pones en memoria.

Cuando lo abordamos con la función SeriesInfoInteger (SERIES_TERMINAL_FIRSTDATE), obtenemos:

A -1 - sin datos

Б. 0 - no hay datos disponibles pero no están listos

В. A - fecha de la primera información

Entonces todo sería claro y transparente.

-1 - Ir al servidor

0 - Esperamos a la siguiente iteración para comprobar y/o construir las series temporales

> 0 Construir series de tiempo

Por su referencia entendí que casi lo hizo, resulta que no.

Al parecer, un programador empezó a escribir y otro terminó

Su implementación es buena para FOREX, pero muy inconveniente para FORTS.

En el caso de FORTS, es posible que las cotizaciones no se produzcan durante mucho tiempo y que las series temporales se descarguen de la plataforma.

y hay que repetir todo el proceso de recuperación de datos de nuevo, ¡y con inicio de sesión en el servidor!

Utilice los Asesores Expertos para trabajar con datos de múltiples símbolos, todo será cómodo y fácil. Los indicadores en el entorno de MT5 están diseñados principalmente para calcular rápidamente sus datos de series temporales y mostrar los resultados del cálculo en el gráfico. A medida que la plataforma fue evolucionando, ganaron muchas funciones disponibles para los expertos, pero las restricciones arquitectónicas básicas se mantuvieron. Y no hay ninguna razón para eliminar por completo las diferencias entre los indicadores y los EA. Una vez más me gustaría recordarle que la diferencia más importante es que los Asesores Expertos tienen su propio flujo de procesamiento. Los indicadores se calculan en un flujo de servicios, y este flujo realiza muchas otras funciones. Por eso, incluso la funcionalidad que tenemos en común con los Asesores Expertos se implementa de forma diferente.

En cuanto al acceso al historial, no existe una solución universal. El terminal no puede predecir de antemano lo que quiere el usuario, es decir, si el Asesor Experto quiere obtener sólo una fecha o quiere solicitar todo el historial disponible. El terminal opta por el acceso rápido al marco temporal, es decir, a petición del usuario, intenta almacenar en caché el estado actual (sincronizado con el servidor) del historial en su totalidad. Sí, hay una clase de aplicaciones en las que este enfoque no es conveniente. Pero si el programador no se centra en la demanda de reescribir el terminal "personalmente", encontrará una solución en la funcionalidad existente. Si no hay ninguna solución, sólo entonces se plantea la cuestión de ampliar la funcionalidad.

Describa un problema concreto con un código específico, sin generalizaciones. De lo contrario, se obtiene una funcionalidad incomprensible de una sola función hinchada en "todo está mal" y "todo es inconveniente".

 
antt:

Utilice los Asesores Expertos para trabajar con datos de múltiples símbolos, todo será cómodo y sencillo. Los indicadores en el entorno de MT5 están diseñados principalmente para realizar cálculos rápidos sobre sus datos de series temporales y mostrar los resultados del cálculo en el gráfico. A medida que la plataforma fue evolucionando, ganaron muchas funciones disponibles para los expertos, pero las restricciones arquitectónicas básicas se mantuvieron. Y no hay ninguna razón para eliminar por completo las diferencias entre los indicadores y los EA. Una vez más me gustaría recordarle que la diferencia más importante es que los Asesores Expertos tienen su propio flujo de procesamiento. Los indicadores se calculan en un flujo de servicios, y este flujo realiza muchas otras funciones. Por ello, incluso la funcionalidad compartida con los Asesores Expertos se implementa de forma diferente.

En cuanto al acceso a la historia, no existe una solución universal. El terminal no puede predecir de antemano lo que quiere el usuario, es decir, si el Asesor Experto quiere sólo una fecha o si quiere solicitar todo el historial disponible. El terminal ha optado por un acceso rápido al marco temporal, es decir, a petición del usuario, intenta almacenar en caché el estado actual (sincronizado con el servidor) del historial en su totalidad. Sí, hay una clase de aplicaciones en las que este enfoque no es conveniente. Pero si el programador no se centra en la demanda de reescribir el terminal "personalmente", encontrará una solución en la funcionalidad existente. Si no hay ninguna solución, sólo entonces se plantea la cuestión de ampliar la funcionalidad.

Describa un problema concreto con un código específico, sin generalizaciones. De lo contrario, se obtiene una funcionalidad incomprensible de una sola función hinchada en "todo está mal" y "todo es inconveniente".

¡Hola, Anton!

Permítanos "desglosar" su respuesta:

1. " Utiliza a los expertos para trabajar con datos de múltiples caracteres, todo será cómodo y sencillo".

Necesito un historial (cierre) de 3 símbolos con asignación a un gráfico.

¿Hay alguna otra forma de obtener el historial de cierre de EA?

¡Y tengo que hacer un "huerto" para sacar resultados de un EA (en una ventana aparte)!

2. "En cuanto al acceso a la historia, no hay una solución universal. El terminal no puede predecir de antemano lo que quiere el usuario, es decir, si el Asesor Experto quiere obtener sólo una fecha o quiere solicitar todo el historial disponible".

No es necesario predecir los deseos del consumidor. Sólo hay que "decir" en qué estado se encuentran los datos en el símbolo ¡¡¡Y TODO!!!

Así, el usuario sabrá exactamente qué acciones debe realizar a continuación.

3."Pero si un programador no se centra en el requisito de reescribir el terminal "personalmente", encontrará una solución en la funcionalidad existente.

No he dicho, ni mucho menos, que exija hacer algo "por sí mismo", y la solución, por supuesto, siempre se encontrará en la funcionalidad existente.

4. "Si no hay ninguna solución, es cuando se plantea la cuestión de ampliar la funcionalidad. "

No es necesario ampliar la funcionalidad, basta con introducir pequeños cambios para facilitar el uso y la rapidez.

5. "Describa un problema concreto con un código específico, sin generalizar.De lo contrario, se obtiene la funcionalidad mal entendida de una sola función hinchada en "todo está mal" y "todo es inconveniente""

Bien, me prepararé para una explicación "ampliada" del problema con un código específico.

Sólo que, por desgracia, no puedes "confiar" en el libro de referencia...

Gracias por responder.

 
Mikalas:


Como siempre, la posición del usuario es que yo soy el centro del universo y el mundo gira a mi alrededor. Hay que utilizar la funcionalidad que está disponible. Sobre todo porque se ha demostrado más de una vez cómo obtener los datos.
 
barabashkakvn:
Como siempre, la posición del usuario es que yo soy el centro del universo y el mundo gira a mi alrededor. Hay que utilizar la funcionalidad que está disponible. Sobre todo porque se ha demostrado más de una vez cómo obtener los datos.
¿Cuánto cuesta el 2x2?
 
barabashkakvn:
Como siempre, la posición del usuario es que yo soy el centro del universo y el mundo gira a mi alrededor. Tienes que utilizar la funcionalidad que tienes. Además, se ha demostrado más de una vez cómo obtener los datos.

Y tú crees que es al revés. ¿El centro del universo son los promotores y el mundo gira en torno a ellos? ¿Es así?

Entonces, responda a una pregunta: ¿para quién se está desarrollando este terminal? ¿Lo hacen para sí mismos o para el usuario?

Si lo hacen por ellos mismos, no hay preguntas... Está bien.

Y si es para el usuario, entonces su opinión debería ser escuchada al menos...

 
antt :

........

Describir un problema específico con código específico, sin generalizaciones. De lo contrario, resulta que la funcionalidad mal entendida de una sola función se convierte en "todo está mal" y "todo es inconveniente".

Describiendo:

Bróker FORTS cuenta real.

Problema: no obtengo datos de series temporales.

1. Las imágenes muestran que hay datos en el terminal.

2. Aquí está el código:

 //+------------------------------------------------------------------+
//|                                                     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. Y aquí está el resultado:

 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
Archivos adjuntos:
20150331.log  7 kb
 

¿Cómo se reproduce?

Terminal conectada para abrir, historial de todos los símbolos borrado del disco antes de la puesta en marcha

Registro de indicadores desde el momento del inicio

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: Данные получены.


Como puede ver, en menos de un segundo desde el momento del inicio, los datos del símbolo están disponibles para el indicador.

 
alexvd:

¿Cómo se reproduce?

Terminal conectada para abrir, historial de todos los símbolos borrado del disco antes de la puesta en marcha

Registro de indicadores desde el momento del inicio


Como puede ver, en menos de un segundo desde el momento del inicio, los datos del símbolo están disponibles para el indicador.

¡Buenas tardes!

Es decir, ¿segundos no es tiempo para el comercio electrónico?

En otras palabras, con un símbolo sincronizado y series temporales sincronizadas, no podemos obtener

Barras(inmediatamente) - ¿es esto normal?

(Para mí) es un error.

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. Cuando hay datos en TERMINAL (ver fig. todas las barras después del 16 de marzo), nos vemos obligados a ir al servidor, ¿es esto normal?

Las molestias y el tiempo que se tarda en obtener la información(para mí) son evidentes.

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:

¡Buenas tardes!

¿Así que un SEGUNDO en el comercio electrónico no es tiempo?

Un segundo desde el inicio, es decir, una vez al comienzo. "No hay tiempo".