FORTI Si prega di aiutare - pagina 7

 
Continuare a nascondere il codice?
 
barabashkakvn:
Continuare a nascondere il codice?

Ma almeno li leggete i post?

Mikalas2015.03.26 18:56RU

Avete gridato e li avete chiamati chukchi, ma il problema non è stato risolto!

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//
bool is_failed = false;
datetime start_time;
datetime end_time;
int mix_bars, rts_bars, si_bars;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
    start_time = StringToTime( "2015.03.17" );
    end_time = TimeCurrent();
//--- indicator buffers mapping
  mix_bars = GetBars( "MIX-6.15" , PERIOD_CURRENT, start_time, end_time ); 
  if ( mix_bars < 1 )
  {
    is_failed = true;
    Print( "Init failed. MIX-6.15 ");
  }
  rts_bars = GetBars( "RTS-6.15" , PERIOD_CURRENT, start_time, end_time ); 
  if ( rts_bars < 1 )
  {
    is_failed = true;
    Print( "Init failed. RTS-6.15 ");
  }
  si_bars = GetBars( "Si-6.15" , PERIOD_CURRENT, start_time, end_time ); 
  if ( si_bars < 1 )
  {
    is_failed = true;
    Print( "Init failed. Si-6.15 ");
  }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator Get bars function                               |
//+------------------------------------------------------------------+
int GetBars( string symbol, ENUM_TIMEFRAMES period, const datetime start_date, const datetime end_date )
{
  if ( !SymbolInfoInteger( symbol, SYMBOL_SELECT ) )
  {
    ResetLastError();
//---    
    if ( GetLastError() != ERR_MARKET_UNKNOWN_SYMBOL )
    {
      SymbolSelect( symbol, true );
    }
    else
    {
      Print( "GetBars: Неизвестный символ - ", symbol );
      return( 0 );
    }    
  }
//---  
  if ( MQL5InfoInteger( MQL5_PROGRAM_TYPE ) == PROGRAM_INDICATOR && Period() == period && Symbol() == symbol )
  {
    Print( "GetBars: Не пройдена проверка типа программы!" );
    return( 0 );
  }  
//---
  if ( SymbolIsSynchronized( symbol ) )
  {
    return( Bars( symbol, period, start_date, end_date ) );
  }
  else
  {
    long first_date = 0;
    datetime times[1];
//---    
    if ( SeriesInfoInteger( symbol, PERIOD_M1, SERIES_TERMINAL_FIRSTDATE, first_date ) )
    {
      if ( first_date > 0 )
      {
//--- force timeseries build
        CopyTime( symbol, period, datetime( first_date ) + PeriodSeconds( period ), 1, times );
//--- check date
        if ( SeriesInfoInteger( symbol, period, SERIES_FIRSTDATE, first_date ) )
//---        
        if ( first_date > 0 && first_date <= long( start_date ) )
        {
          return( Bars( symbol, period, start_date, end_date ) );
        } 
      }
    }
    Print( "Необходима загрузка истории с сервера!");
  }       
//---  
  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[])
  {
//---
   if ( is_failed )
   {
     Print( "Sorry! Get Bars failed." );
   }
   else Print( "Bingo! We done.");
//--- return value of prev_calculated for next call
   return(rates_total);
  }

Non ho ancora scritto il download della storia, ma i dati sono nel terminale, e NON escono la prima volta!

2015.03.26 20:49:01.641 Test (MIX-6.15,M1)      Необходима загрузка истории с сервера!
2015.03.26 20:49:01.641 Test (MIX-6.15,M1)      Init failed. RTS-6.15 
2015.03.26 20:49:01.641 Test (MIX-6.15,M1)      Необходима загрузка истории с сервера!
2015.03.26 20:49:01.641 Test (MIX-6.15,M1)      Init failed. Si-6.15 
2015.03.26 20:49:01.641 Test (MIX-6.15,M1)      Sorry! Get Bars failed. 

in tasca|modifica|cancella

 

Qualcuno può spiegare per favore:

Perché la funzione con identificatore SERIES_TERMINAL_FIRSTDATE, quando ci sono dati

nel terminale restituisce FALSO?

SeriesInfoInteger( symbol, PERIOD_M1, SERIES_TERMINAL_FIRSTDATE, first_date )
 
Mikalas:

Qualcuno può spiegare per favore:

Perché la funzione con identificatore SERIES_TERMINAL_FIRSTDATE, quando ci sono dati

nel terminale restituisce FALSO?

5 sec. Metterò qualche link...
 
MigVRN:
5 sec. Metterò qualche link...

Da Aiuto Organizza l'accesso ai dati --> Script di esempio per scaricare la storia:

Если мы успешно прошли все проверки, то сделаем последнюю попытку обойтись без обращения к торговому серверу. Сначала узнаем начальную дату, для которой доступны минутные данные в формате HCC.
Запросим это значение функцией SeriesInfoInteger() с модификатором SERIES_TERMINAL_FIRSTDATE и опять сравним со значением параметра start_date.

   if(SeriesInfoInteger(symbol,PERIOD_M1,SERIES_TERMINAL_FIRSTDATE,first_date))
     {
      //--- there is loaded data to build timeseries
      if(first_date>0)
        {
         //--- force timeseries build
         CopyTime(symbol,period,first_date+PeriodSeconds(period),1,times);
         //--- check date
         if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date))
            if(first_date>0 && first_date<=start_date) return(2);
        }
     }
 
 
MigVRN:

Tutto avviene esattamente come dice la documentazione. :)

Abbozzato un indicatore e un Expert Advisor per il controllo + il risultato sul video.

1) Per prima cosa l'ho lanciato sul grafico dell'Expert Advisor che ha al suo interno la funzione OnTick che funziona per 20 secondi.

Il risultato è che il grafico continua a funzionare e visualizza tutto come dovrebbe essere. Anche il grafico funziona come previsto.

2) Poi applichiamo al grafico l'indicatore che ha la funzioneOnCalculate per 20 secondi.

Il risultato - la chat si blocca. Allo stesso tempo viene sospesa anche la prossima chat con lo stesso simbolo che ha un periodo diverso. Il vetro continua a funzionare come dovrebbe. Dopo che la funzione ha funzionato, tutto torna alla normalità.

3) Il video non lo mostra - ma se lanci un indicatore su una chat (impostata a 60 sec), e un EA sull'altra - l'EA non inizia a funzionare fino a quando l'indicatore non funziona male su un'altra chat!

Ho allegato il video separatamente - sta rallentando nel mio browser.

No merda, dov'è finito il multithreading?!

Finché l'indicatore non funziona, i tick non raggiungono l'EA!

 
Serj_Che:

Dove diavolo è finito il multithreading?

Finché l'indicatore non funziona, i tick non raggiungono l'EA!

Le zecche non arrivano al ticker, semplicemente non appaiono sul grafico.
 
Serj_Che:

Dove diavolo è finito il multithreading?

Finché l'indicatore non funziona, i tick non raggiungono l'EA!

È sempre stato così.

Mikalas:
Le offerte arrivano alla coppa, solo che non si vede sul grafico.

I ticchettii dell'EA non funzionano. E tutto il resto sulla chat. Non ho controllato il timer e gli eventi personalizzati.

Mikalas:

Aiuto Organizzazione dell'accesso ai dati --> Esempio di script per caricare la storia:

Anche dall'aiuto.

...I file di servizio in formato HCC fungono da fonte di dati per costruire i dati sui prezzi per i periodi richiesti in formato HC. I dati nel formato HC sono serie temporali, che sono preparati al massimo per un accesso rapido. Vengono creati solo su richiesta di un grafico o di un programma mql5 nel volume che non supera il parametro "Max bars in charts", e vengono salvati per un uso successivo in file con estensione hc.

Per risparmiare risorse, i dati sul timeframe vengono caricati e immagazzinati nella RAM solo quando sono necessari. In caso di lunga assenza di richieste i dati vengono scaricati dalla RAM salvandoli in un file. I dati per ogni lasso di tempo sono preparati indipendentemente dai dati pronti per altri lassi di tempo. Le regole per la preparazione e la disponibilità dei dati sono le stesse per tutti i tempi. Cioè, nonostante il fatto che l'unità di memorizzazione dei dati nel formato HCC sia una barra di un minuto, la disponibilità dei dati nel formato HCC non significa la disponibilità e l'accessibilità dei dati del formato HC per il periodo M1 nello stesso volume.

 
Mikalas:

Qualcuno può spiegare per favore:

Perché la funzione con identificatore SERIES_TERMINAL_FIRSTDATE, quando ci sono dati

nel terminale restituisce FALSO?

Perché è la PRIMA volta che accede a questa particolare serie.
 
Mikalas:

Da Data Access Organisation Help --> Script di esempio per scaricare la storia:

Ecco fatto. Siete sulla strada giusta. Per verificare come funziona esattamente il terminale, piuttosto che come lo si immagina, un semplice algoritmo di controllo.

  • Aprire una tabella "MIX-6.15 M1" nel terminale. Sul grafico c'è l'indicatore del primo post.
  • Aprire "Open Data Catalog" dal terminale.
  • Cercando la storia sul simbolo "MIX-6.15" in questo modo ...\Terminal\D0*******CF37AD**55**0E51F**75\bases\Open-Demo\history
  • Terminale di scarico.
  • Cancellare la cartella "MIX-6.15".
  • Avviare il terminale. Vediamo l'errore. Un piccolo scherzo sul grafico - cambia il timeframe diverse volte. Per esempio, cambiate più volte M1 e M5. L'errore scompare. Significa che sono stati preparati dati di un altro lasso di tempo (diverso da quello richiesto nel codice). Se non volete cambiare manualmente gli intervalli di tempo, dovete preparare i dati da soli.
  • Ricarica il terminale - nessun errore.
  • Se non è chiaro, allora ripetete l'esperimento.