FORTI Si prega di aiutare - pagina 12

 
komposter:
Vomita, Edward, vomita =)
Oh, per favore, lo faccio con la "U")))
 
Mikalas:

Lo capisco, ma perché non poteva essere fatto nel modo che ho descritto sopra?

Non avrebbe avuto alcun effetto sulla velocità di elaborazione delle informazioni:

Se c'era qualche informazione sullo strumento - registrate la data in cui è apparso per la prima volta e memorizzatela - 8 byte!

Puoi anche non memorizzarlo, ma quando fai SymbolSelect(), lo metti in memoria.

Quando lo indirizziamo con la funzione SeriesInfoInteger (SERIES_TERMINAL_FIRSTDATE), otteniamo:

A -1 - nessun dato

Б. 0 - nessun dato disponibile ma non pronto

В. A - data della prima informazione

Allora tutto sarebbe chiaro e trasparente.

-1 - Andare al server

0 - Aspettiamo la prossima iterazione per controllare e/o costruire la serie temporale

> 0 Costruire serie temporali

Dal tuo riferimento ho capito che TU l'hai quasi fatto, ma non è così.

A quanto pare un programmatore ha iniziato a scrivere e qualcun altro ha finito

La tua implementazione è buona per il FOREX, ma molto scomoda per FORTS.

Per FORTS, le quotazioni possono non arrivare per molto tempo e la serie temporale viene scaricata dalla piattaforma.

e si deve ripetere tutto il processo di recupero dei dati di nuovo, e con il login al server!

Usa Expert Advisors per lavorare con dati di simboli multipli, tutto sarà comodo e facile. Gli indicatori nell'ambiente MT5 sono progettati principalmente per calcolare rapidamente i dati delle loro serie temporali e visualizzare i risultati del calcolo sul grafico. Con l'evoluzione della piattaforma, hanno guadagnato molte funzioni disponibili per gli esperti, ma le restrizioni architettoniche di base sono rimaste. E non c'è motivo di eliminare completamente le differenze tra indicatori ed EAs. Ancora una volta vorrei ricordarvi che la differenza più importante è che gli Expert Advisors hanno un proprio flusso di elaborazione. Gli indicatori sono calcolati in un flusso di servizio, e questo flusso svolge molte altre funzioni. Ecco perché anche le funzionalità che abbiamo in comune con gli Expert Advisors sono implementate in modo diverso.

Per quanto riguarda l'accesso alla storia, non esiste una soluzione universale. Il terminale non può prevedere in anticipo cosa vuole l'utente, cioè se l'Expert Advisor vuole ottenere solo una data o vuole richiedere l'intera storia disponibile. Il terminale sceglie l'accesso veloce alla cronologia, cioè, su richiesta dell'utente, cerca di mettere in cache lo stato attuale (sincronizzato con il server) della cronologia per intero. Sì, c'è una classe di applicazioni in cui questo approccio non è conveniente. Ma se il programmatore non si concentrerà sulla richiesta di riscrivere il terminale "personalmente", troverà una soluzione nella funzionalità esistente. Se non c'è nessuna soluzione, solo allora si pone la questione di estendere la funzionalità.

Descrivere un problema specifico con un codice specifico, senza generalizzazioni. Altrimenti, si ottiene una funzionalità incomprensibile di una sola funzione gonfiata in "tutto è sbagliato" e "tutto è scomodo".

 
antt:

Usa Expert Advisors per lavorare con dati di simboli multipli, tutto sarà comodo e semplice. Gli indicatori nell'ambiente MT5 sono progettati principalmente per il calcolo rapido sui dati delle serie temporali e la visualizzazione dei risultati del calcolo sul grafico. Con l'evoluzione della piattaforma, hanno guadagnato molte funzioni disponibili per gli esperti, ma le restrizioni architettoniche di base sono rimaste. E non c'è motivo di eliminare completamente le differenze tra indicatori ed EAs. Ancora una volta vorrei ricordarvi che la differenza più importante è che gli Expert Advisors hanno un proprio flusso di elaborazione. Gli indicatori sono calcolati in un flusso di servizio, e questo flusso svolge molte altre funzioni. Ecco perché anche la funzionalità condivisa con gli Expert Advisors è implementata in modi diversi.

Per quanto riguarda l'accesso alla storia, non esiste una soluzione universale. Il terminale non può prevedere in anticipo cosa vuole l'utente, cioè se l'Expert Advisor vuole ottenere solo una data o se vuole richiedere l'intera storia disponibile. Il terminale ha fatto una scelta a favore dell'accesso rapido alla cronologia, cioè su richiesta dell'utente, cerca di mettere in cache lo stato attuale (sincronizzato con il server) della cronologia nella sua totalità. Sì, c'è una classe di applicazioni in cui questo approccio non è conveniente. Ma se il programmatore non si concentrerà sulla richiesta di riscrivere il terminale "personalmente", troverà una soluzione nella funzionalità esistente. Se non c'è nessuna soluzione, solo allora si pone la questione di estendere la funzionalità.

Descrivere un problema specifico con un codice specifico, senza generalizzazioni. Altrimenti, si ottiene una funzionalità incomprensibile di una sola funzione gonfiata in "tutto è sbagliato" e "tutto è scomodo".

Ciao, Anton!

Lasciateci "scomporre" la vostra risposta:

1. "Usate gli esperti per lavorare con dati a caratteri multipli, tutto sarà comodo e semplice".

Ho bisogno di una storia (chiusura) su 3 simboli con mappatura su un grafico.

C'è un altro modo per ottenere la cronologia ravvicinata da EA?

E devo fare un "orto" per trarre i risultati da un EA (in una finestra separata)!

2. "Per quanto riguarda l'accesso alla storia, non esiste una soluzione universale. Il terminale non può prevedere in anticipo ciò che l'utente vuole, cioè se l'Expert Advisor vuole ottenere solo una data o vuole richiedere l'intera storia disponibile".

Non c'è bisogno di prevedere i desideri del consumatore. Basta "dire" in che stato sono i dati sul simbolo E TUTTO !!!

Poi l'utente saprà esattamente quali azioni eseguire dopo.

3."Ma se un programmatore non si concentra sul requisito di riscrivere il terminale "personalmente", troverà una soluzione nella funzionalità esistente.

Non ho detto, tanto meno pretendere di fare qualcosa "da soli", e la soluzione si troverà ovviamente sempre nella funzionalità esistente.

4. "Se non c'è nessuna soluzione, è allora che si pone la questione di estendere la funzionalità. "

Non c'è bisogno di estendere la funzionalità, si possono solo introdurre piccole modifiche per la facilità d'uso e la velocità.

5. "Descrivere un problema specifico con un codice specifico, senza generalizzare.Altrimenti, si ottiene la funzionalità incompresa di una singola funzione gonfiata in "tutto è sbagliato" e "tutto è scomodo""

OK, mi preparo per una spiegazione "estesa" del problema con un codice specifico.

Solo che, purtroppo, non si può "fare affidamento" sul libro di riferimento...

Grazie per aver risposto.

 
Mikalas:


Come sempre, la posizione dell 'utente è che io sono il centro dell'universo e il mondo gira intorno a me. Dovete usare la funzionalità che è disponibile. Soprattutto perché è stato dimostrato più di una volta come ottenere i dati.
 
barabashkakvn:
Come sempre, la posizione dell'utente è che io sono il centro dell'universo e il mondo gira intorno a me. Dovete usare la funzionalità che è disponibile. Soprattutto perché è stato dimostrato più di una volta come ottenere i dati.
Quanto costa il 2x2?
 
barabashkakvn:
Come sempre, la posizione dell'utente è che io sono il centro dell'universo e il mondo gira intorno a me. Dovete usare la funzionalità che avete. Inoltre, è stato dimostrato più di una volta come ottenere i dati.

E tu pensi che sia il contrario. Il centro dell'universo sono gli sviluppatori e il mondo gira intorno a loro? È così?

Allora rispondi a una domanda: per chi viene sviluppato questo terminale? Lo fanno per se stessi o per l'utente?

Se lo fanno per se stessi, nessuna domanda... È tutto a posto.

E se è per l'utente, allora la sua opinione dovrebbe essere ascoltata almeno...

 
antt :

........

Descrivi un problema specifico con codice specifico, senza generalizzazioni. Altrimenti, si scopre che la funzionalità incompresa di una singola funzione viene esplosa in "tutto è sbagliato" e "tutto è scomodo".

Descrivendo:

Broker FORTS per conto reale.

Problema: non ricevo i dati delle serie temporali.

1. Le immagini mostrano che ci sono dati nel terminale.

2. Ecco il codice:

 //+------------------------------------------------------------------+
//|                                                     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. Ed ecco il risultato:

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

Come riprodursi?

Terminale collegato ad aprire, cronologia su tutti i simboli cancellati dal disco prima dell'avvio

Registro degli indicatori dal momento dell'avvio

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


Come potete vedere in meno di un secondo dal momento dell'avvio i dati del simbolo sono diventati disponibili per l'indicatore.

 
alexvd:

Come riprodursi?

Terminale collegato ad aprire, cronologia su tutti i simboli cancellati dal disco prima dell'avvio

Registro degli indicatori dal momento dell'avvio


Come potete vedere in meno di un secondo dal momento dell'avvio i dati sul simbolo sono diventati disponibili per l'indicatore.

Buon pomeriggio!

Cioè SECONDI non è tempo per il commercio elettronico?

In altre parole, con un simbolo sincronizzato e una serie temporale sincronizzata, non possiamo ottenere

Barre(immediatamente) - è normale?

(Per me) è un errore.

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 ci sono dati in TERMINAL (vedi fig. tutte le barre dopo il 16 marzo), siamo costretti ad andare al server, è normale?

L'inconveniente e il lungo tempo per ottenere le informazioni(per me) è ovvio.

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:

Buon pomeriggio!

Quindi un SECONDO nell'e-commerce non è tempo?

Un secondo dall'inizio, cioè una volta all'inizio. "Non c'è tempo".