FORTES Por favor, ajude - página 12

 
komposter:
Vômito, Edward, vômito =)
Oh, por favor, eu faço isso com um "U")))
 
Mikalas:

Entendo isso, mas por que não poderia ter sido feito da maneira que descrevi acima?

Isso não teria tido efeito sobre a velocidade de processamento das informações:

Se havia alguma informação sobre a ferramenta - registre a data em que ela apareceu pela primeira vez e guarde-a na memória - 8 bytes!

Você pode até mesmo não armazená-lo, mas quando você faz SymbolSelect(), você o coloca na memória.

Quando a abordamos com a função SeriesInfoInteger (SERIES_TERMINAL_FIRSTDATE), obtemos:

A -1 - sem dados

Б. 0 - nenhum dado disponível mas não pronto

В. A - data da primeira informação

Então tudo ficaria claro e transparente.

-1 - Indo para o servidor

0 - Esperamos a próxima iteração para verificar e/ou construir as séries de tempo

> 0 Construir timeseries

De sua referência, eu entendi que VOCÊ quase fez isso, afinal não.

Aparentemente, um programador começou a escrever e outra pessoa terminou

Sua implementação é boa para a FOREX, mas muito inconveniente para a FORTS.

Para FORTS, as citações podem não vir por muito tempo e a série cronológica é baixada da plataforma.

e você tem que repetir todo o processo de recuperação de dados novamente, e com o login no servidor!

Use o Expert Advisors para trabalhar com dados de múltiplos símbolos, tudo será conveniente e fácil. Os indicadores no ambiente MT5 são projetados principalmente para calcular rapidamente seus dados de série cronológica e exibir os resultados do cálculo no gráfico. Com a evolução da plataforma, eles ganharam muitas funções disponíveis aos especialistas, mas as restrições arquitetônicas básicas permaneceram. E não há razão para eliminar completamente as diferenças entre os indicadores e os EAs. Mais uma vez, gostaria de lembrar que a diferença mais importante é que os Conselheiros Especialistas têm seu próprio fluxo de processamento. Os indicadores são calculados em um fluxo de serviço, e este fluxo desempenha muitas outras funções. É por isso que mesmo a funcionalidade que temos em comum com os Expert Advisors é implementada de forma diferente.

Quanto ao acesso à história, não existe uma solução universal. O terminal não pode prever antecipadamente o que o usuário deseja, ou seja, se o Expert Advisor deseja obter apenas uma data ou se deseja solicitar todo o histórico disponível. O terminal escolhe o acesso rápido ao cronograma, ou seja, a pedido do usuário, ele tenta fazer o cache do estado atual (sincronizado com o servidor) do histórico na íntegra. Sim, há uma classe de aplicações onde esta abordagem não é conveniente. Mas se o programador não se concentrar na demanda de reescrever o terminal "pessoalmente", ele encontrará uma solução na funcionalidade existente. Se não houver solução alguma, só então surge a questão de ampliar a funcionalidade.

Descrever um problema específico com um código específico, sem generalizações. Caso contrário, você obtém uma funcionalidade incompreensível de uma única função inchada em "tudo está errado" e "tudo é inconveniente".

 
antt:

Use o Expert Advisors para trabalhar com dados de múltiplos símbolos, tudo será conveniente e fácil. Os indicadores no ambiente MT5 são projetados principalmente para o cálculo rápido dos dados de suas séries cronológicas e a exibição dos resultados do cálculo no gráfico. Com a evolução da plataforma, eles ganharam muitas funções disponíveis aos especialistas, mas as restrições arquitetônicas básicas permaneceram. E não há razão para eliminar completamente as diferenças entre os indicadores e os EAs. Mais uma vez, gostaria de lembrar que a diferença mais importante é que os Conselheiros Especialistas têm seu próprio fluxo de processamento. Os indicadores são calculados em um fluxo de serviço, e este fluxo desempenha muitas outras funções. É por isso que mesmo a funcionalidade compartilhada com os Expert Advisors é implementada de diferentes maneiras.

Quanto ao acesso à história, não existe uma solução universal. O terminal não pode prever antecipadamente o que o usuário deseja, ou seja, se o Expert Advisor deseja obter apenas uma data ou se deseja solicitar todo o histórico disponível. O terminal fez uma escolha a favor do acesso rápido ao cronograma, ou seja, a pedido do usuário, ele tenta armazenar em cache o estado atual (sincronizado com o servidor) da história em sua totalidade. Sim, há uma classe de aplicações onde esta abordagem não é conveniente. Mas se o programador não se concentrar na demanda de reescrever o terminal "pessoalmente", ele encontrará uma solução na funcionalidade existente. Se não houver solução alguma, só então surge a questão de ampliar a funcionalidade.

Descrever um problema específico com um código específico, sem generalizações. Caso contrário, você obtém uma funcionalidade incompreensível de uma única função inchada em "tudo está errado" e "tudo é inconveniente".

Olá, Anton!

Deixe-nos "quebrar" sua resposta:

1. "Use especialistas para trabalhar com dados de múltiplos caracteres, tudo será conveniente e simples".

Preciso de um histórico (fechar) em 3 símbolos com mapeamento para um gráfico.

Existe outra maneira de se aproximar da história da EA?

E eu tenho que fazer uma "horta" para extrair resultados de uma EA (em uma janela separada)!

2. "Quanto ao acesso à história, não há uma solução universal. O terminal não pode prever antecipadamente o que o usuário deseja, ou seja, se o Expert Advisor deseja obter apenas uma data ou se deseja solicitar todo o histórico disponível".

Não há necessidade de prever os desejos do consumidor. Você só tem que "dizer" em que estado estão os dados no símbolo E TODOS!!!

Então o usuário saberá exatamente quais ações executar a seguir.

3."Mas se um programador não se concentrar na exigência de reescrever o terminal "pessoalmente", ele encontrará uma solução na funcionalidade existente.

Eu não disse, muito menos exigir fazer algo "por si mesmo", e a solução, naturalmente, sempre será encontrada na funcionalidade existente.

4. "Se não houver solução alguma, é quando surge a questão da ampliação da funcionalidade. "

Você não precisa ampliar a funcionalidade, você pode apenas introduzir pequenas mudanças para facilitar o uso e a velocidade.

5. "Descreva um problema específico com um código específico, sem generalização.Caso contrário, você obtém a funcionalidade incompreendida de uma única função inchada em "tudo está errado" e "tudo é inconveniente"".

OK, vou me preparar para uma explicação "ampliada" do problema com um código específico.

Só que, infelizmente, você não pode "confiar" no livro de referência.

Obrigado por responder.

 
Mikalas:


Como sempre, a posição do usuário é que eu sou o centro do universo e o mundo gira em torno de mim. Você tem que usar a funcionalidade que está disponível. Especialmente porque já foi mostrado mais de uma vez como obter os dados.
 
barabashkakvn:
Como sempre, a posição do usuário é que eu sou o centro do universo e o mundo gira em torno de mim. Você tem que usar a funcionalidade que está disponível. Especialmente porque já foi mostrado mais de uma vez como obter os dados.
Quanto é 2x2 ?
 
barabashkakvn:
Como sempre, a posição do usuário é que eu sou o centro do universo e o mundo gira em torno de mim. Você tem que usar a funcionalidade que você tem. Além disso, já foi mostrado mais de uma vez como obter os dados.

E você acha que é o contrário. O centro do universo são os desenvolvedores e o mundo gira em torno deles? É assim?

Então responda a uma pergunta: para quem é projetado este terminal? Eles estão fazendo isso para si mesmos ou para o usuário?

Se o fizerem por si mesmos, nenhuma pergunta ... Está tudo bem.

E se for para o usuário, então sua opinião deve ser ouvida pelo menos...

 
antt :

........

Descreva um problema específico com código específico, sem generalizações. Caso contrário, a funcionalidade incompreendida de uma única função é expandida para "tudo está errado" e "tudo é inconveniente".

Descrevendo:

Corretor FORTS de conta real.

Problema - não estou recebendo dados de séries temporais.

1. As imagens mostram que há dados no terminal.

2. Aqui está o 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. E aqui está o 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
Arquivos anexados:
20150331.log  7 kb
 

Como reproduzir?

Terminal conectado ao aberto, histórico em todos os símbolos apagados do disco antes do início

Log indicador desde o momento do início

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 você pode ver em menos de um segundo desde o momento do início, os dados do símbolo ficaram disponíveis para o indicador.

 
alexvd:

Como reproduzir?

Terminal conectado ao aberto, histórico em todos os símbolos apagados do disco antes do início

Log indicador desde o momento do início


Como você pode ver em menos de um segundo desde o momento do início, os dados do símbolo ficaram disponíveis para o indicador.

Boa tarde!

Em outras palavras, SEGUNDO não é o tempo durante o comércio eletrônico?

Em outras palavras, com um símbolo sincronizado e séries temporais sincronizadas, não podemos obter

Barras(imediatamente) - isto é normal?

(Para mim) é um erro.

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. Quando dados no TERMINAL (ver fig. todas as barras após 16 de março), somos forçados a ir ao servidor, isto é normal?

O inconveniente e o longo tempo que leva para obter as informações(para mim) é óbvio.

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:

Boa tarde!

Então um SEGUNDO no comércio eletrônico não é tempo?

Um segundo desde o início, ou seja, uma vez no início. "Não é hora".