Errori, bug, domande - pagina 2888

 
Denis Diakonov:

Per favore, consigliatemi!

Perché l'ora del server non viene aggiornata quando arrivano nuove zecche?

Al momento dell'avvio dell'EA, tutto funziona come dovrebbe, ma poi il tempo passa, ma il nuovo valore del minuto corrente non entra nella variabile.

Cioè, l'Expert Advisor lavora in funzione del numero ottenuto nella variabile int M = TimeMinute(TimeCurrent());

In realtà questa linea di codice è dal riferimento e non funziona.

Per esempio, lo faccio partire alle 12 - l'ora corrente restituita dal server corrisponde all'ora nella variabile, ma la variabile rimane ancora alle 12, anche se sono già 15-20 minuti sull'orologio

TimeMinute() non è disponibile in MQL5.

Le domande su MQL4 dovrebbero essere postate nel corrispondente ramo di MetaTrader 4.

Se volete una soluzione multipiattaforma, usate MqlDateTime.

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура даты
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура даты
  • www.mql5.com
Порядковый номер в году day_of_year в високосном году, начиная с марта, будет отличаться от порядкового номера соответствующего дня в невисокосном году.
 
Questo è un avvertimento dubbio:
void OnStart()
{
    for ( int i = 0, j; i < 10; i = j ) //(1) Warning: possible use of uninitialized variable 'j'
    {
        j = i+1;
    }
}

ma va bene così:

void OnStart()
{
    for ( int i = 0, j; i < 10;       ) //(2) нормально
    {
        j = i+1;
                                i = j;
    }
}

qual è la differenza fondamentale?

 
A100:
Questo è un avvertimento piuttosto dubbio:

ma va bene così:

qual è la differenza fondamentale?

Avviso corretto. La variabile j non viene inizializzata prima del suo primo utilizzo, quando alla variabile i viene assegnato il valore j.

E nella seconda variante, alla variabile j viene assegnato il valore i+1 e solo allora i = j

Questo è il modo in cui dovrebbe essere senza avviso, ma non è stato testato...

void OnStart()
{
    for ( int i = 0, j = 0; i < 10; i = j )
    {
        j = i+1;
    }
}
 
Alexey Viktorov:

Avviso corretto.

per gli alternativi, questi sono cicli identici
 
TheXpert:
per gli alternativamente dotati, questi sono cicli identici

Quindi, questa identità di loop permette l'uso di variabili non identificate?

 
Alexey Viktorov:

Quindi, questa identità di loop permette l'uso di variabili non identificate?

Se i cicli sono identici, allora il comportamento del compilatore dovrebbe essere lo stesso, ed è diverso. È qui che si trova l'errore. Hai spiegato perché c'è un avvertimento nel caso (1), allora spiega perché non c'è nel caso (2)? Cosa è cambiato in linea di principio? E poi, se viene usata una variabile non inizializzata, perché il risultato finale è giusto quando si esegue il codice?

Esiste una tale scienza - la logica. Se A e B sono uguali e A è rosso, allora anche B dovrebbe essere rosso, non verde

 
A100:

Se i cicli sono gli stessi, allora il comportamento del compilatore dovrebbe essere lo stesso, ed è diverso. È qui che si trova l'errore. Hai spiegato perché c'è un avvertimento nel caso (1), allora spiega perché non c'è nel caso (2)? Cosa è cambiato in linea di principio? E poi, se viene usata una variabile non inizializzata, perché il risultato finale è giusto quando si esegue il codice?

Esiste una tale scienza - la logica. Se A e B sono uguali e A è rosso, anche B deve essere rosso, non verde.

Non c'è nessun numero casuale. Lì c'è zero.
Anche MQ l'ha sistemato ))

void OnStart()
{
   int val;
   
   Print(val);
   Print(IntegerToString(val));
}
 
Roman:

Non c'è nessun numero casuale. Lì c'è uno zero.
MQ ha sistemato anche questo ))

Prima devi controllare - poi "stronzate".

void OnStart()
{
        for ( int i = 0, j; i < 10; i++ )
        {
                Print( j );
                break;
        }
}

Risultato: -2052256859


 
A100:

Bisogna prima controllare - poi "parlare a vanvera".

Risultato: -2052256859


void OnStart()
{
   for ( int i = 0, j; i < 10; i++ )
   {
      Print( j );                
   }
}
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0
2020.10.27 17:14:46.623 TestScript (NZDUSD,M1)  0

Forse è perché ho un terminale di prova installato su VirtualBox
Inoltre, il compilatore non avverte che la variabile non è inizializzata.

Ma avverte così

void OnStart()
{
   for ( int i = 0, j; i < 10; i++ )
   {
      Print( IntegerToString(j) );                
   }
}
 
Roman:
Probabilmente perché ho il terminale di prova installato su VirtualBox

Tu hai un numero casuale 0, io ho 540016640

2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640
2020.10.27 17:24:25.244 0011 (EURUSD,H4)        540016640

ma sono comunque numeri casuali.