Errori, bug, domande - pagina 2050

 

Potete dirmi se c'è un server demo MT4 e MT5 funzionante con le quotazioni del fine settimana?

 
Kirill Belousov:

C'è un server demo MT4 e MT5 funzionante con le quotazioni nel fine settimana?

Il server demo è un server demo perché il trading non è fatto con denaro reale ma con "demo" :), e tutto il resto (così come il tempo delle quotazioni) è quasi come nella vita reale.

 
Kirill Belousov:

Potete dirmi se c'è un server demo MT4 e MT5 funzionante con le quotazioni del fine settimana?

Non ci sono citazioni nel fine settimana.
Può emulare l'arrivo delle citazioni.
 

Prendete MT5 offline (proxy sinistro, per esempio) ed eseguite un EA come questo

void OnInit()
{
  Print("Hello World!");
}

La stampa nel registro sarà solo cinque secondi dopo l'inizio del consulente - BAG.


Esegui questo indicatore offline

#property indicator_chart_window

#property indicator_buffers 0
#property indicator_plots 0

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[] )
{
  return(rates_total);
}

void OnInit()
{
  const datetime LastBar = (datetime)SeriesInfoInteger(_Symbol, PERIOD_CURRENT, SERIES_LASTBAR_DATE);

  Print(LastBar);
  Print(Bars(_Symbol, PERIOD_CURRENT, LastBar - 24 * 3600, LastBar)); // 0
  Print(GetLastError());                                              // ERR_HISTORY_NOT_FOUND
}

Ci viene un'incazzatura a Bars. Lo stesso inconveniente accadrà con chiamate ripetute, per esempio, in OnTimer. Ma se chiamate Bars in Expert Advisor, tutto funzionerà. Nel caso dell'indicatore, questo è chiaramente un bug.

2017.10.22 23:35:40.678 Terminal        Alpari Limited MT5 x64 build 1653 started (Alpari Limited)
2017.10.22 23:35:40.678 Terminal        Windows 7 Ultimate (x64 based PC), IE 09.00, Intel Core i7-2700 K  @ 3.50 GHz, RAM: 11310 / 16301 Mb, HDD: 827 / 30000 Mb, GMT+02:00
La spiegazione nella documentazione non spiega nulla

Если данные для таймсерии с указанными параметрами при вызове функции Bars() еще не сформированы в терминале, или данные таймсерии в момент вызова функции не синхронизированы с торговым сервером, то функция вернет нулевое значение.

Inviare la richiesta di aggiornamento della serie temporale con lo stesso periodo, come l'indicatore che chiama l'aggiornamento, è estremamente indesiderabile. L'indesiderabilità della richiesta dello stesso symbol-period dell'indicatore è dovuta al fatto che l'aggiornamento dei dati storici viene eseguito nello stesso thread che esegue l'indicatore. Pertanto, c'è un'alta probabilità di uno scontro.

 

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Caratteristiche del linguaggio mql5, sottigliezze e trucchi

fxsaber, 2017.10.17 15:07

Gli array discendenti non sono in grado di convertire gli array antenati. Elemento per elemento, invece, sì. C'è una limitazione di ArrayCopy in questo, che sarebbe bene rimuovere.

C'è qualcosa di sbagliato nella lingua in questa situazione

struct RATES : public MqlRates {};

void f1( RATES& ) {}

void f2( MqlRates& ) {}
void f2( MqlRates &[] ) {}

void OnStart()

{
  MqlRates a = {0};  
  
  f1(a); // 'a' - parameter conversion not allowed
  
  RATES b[1] = {0};
  
  b[0] = a; // no problem
  a = b[0]; // no problem
  
  f2(b[0]); // no problem
  f2(b);    // 'f2' - no one of the overloads can be applied to the function call
}


Le corde gialle e rosse si contraddicono a vicenda. Se l'eredità da una struttura è in corso e il costruttore, l'operatore di assegnazione e i campi non vengono modificati, la trasformazione del discendente nel genitore e viceversa deve avvenire senza problemi. E le linee gialle lo confermano. Tuttavia, in alcune situazioni si verificano degli inconvenienti - quelli rossi.
 
fxsaber:

C'è qualcosa di sbagliato nella lingua in questa situazione

Il mio compilatore ha dato


 
Kirill Belousov:

Il mio compilatore ha dato

Sì, ho corretto il messaggio.
 
   int tim=(int)FileGetInteger(aFileName,FILE_CREATE_DATE);
   int cur_tim=(int)TimeCurrent();

   RefreshRates();
   if(FileGetInteger(aFileName,FILE_EXISTS)==1)
      if(tim>0)
         if((cur_tim-tim)>120) 
           {
            Print(" ttt   "+TimeToString(cur_tim)+"  "+TimeToString(tim));
            FileDelete(aFileName);
            Print("Обновление файла ");
            return false;
           }

int tim=(int)FileGetInteger(aFileName,FILE_CREATE_DATE); non aggiorna il tempo.

Creo un file e voglio cancellarlo dopo 60 secondi, il file viene cancellato eint tim=(int)FileGetInteger(aFileName,FILE_CREATE_DATE); restituisce il tempo del primo file dopo la compilazione. Vedo nella finestra di Windows che il file viene cancellato e viene creato con il nuovo tempo.

RefreshRates non aiuta...

 

int tim=(int)FileGetInteger(aFileName,FILE_MODIFY_DATE);

Funziona correttamente

 
Vladimir Pastushak:

int tim=(int)FileGetInteger(aFileName,FILE_CREATE_DATE); non aggiorna il tempo.

Creo un file e voglio cancellarlo dopo 60 secondi, il file viene cancellato eint tim=(int)FileGetInteger(aFileName,FILE_CREATE_DATE); restituisce il tempo del primo file dopo la compilazione. Vedo nella finestra di Windows che il file viene cancellato e creato con nuovo tempo.

RefreshRates non aiuta...

Dov'è il codice di creazione del file?

Chiudi il file prima di cancellarlo?

Cosa c'entra RefreshRates?

Stiamo parlando di un cinque o di un quattro?