Errori, bug, domande - pagina 2047

 
Alexey Navoykov:

Non capisco cosa vuoi. Ho detto che parlavo di "inizializzazione di variabili". E in questo contesto, le variabili statiche e globali si comportano in modo identico. Ti ho anche dato un link alla documentazione:inizializzazione delle variabili

Notate che le variabili statiche e globali sono ovunque insieme.

E non critichiamo la sequenza di inizializzazione perché non è legata al problema in questione. Lasciate che vi ricordi che il problema è che il compilatore NON genera un errore dove dovrebbe. Se una variabile statica non è ancora inizializzata, non è possibile accedervi.

Beh, cambiate il nome della variabile globale, se vi dà così fastidio. Non influenzerà il risultato in alcun modo.

Ciao, ci siamo... Hai letto il link da solo?

Oltre a mql conosco anche, non molto bene, solo VBA e solo lì ho incontrato la direttiva che richiede l'inizializzazione delle variabili. Si noti che è esclusivamente a discrezione del programmatore. E volete che MQ forzi l'inizializzazione di tutte le variabili? E cambiare la sequenza di inizializzazione su ogni reclamo di tali utenti? Vi è stata data l'opportunità di deviare dalle regole, capendo COSA state facendo, e chiedete di escludere tale opportunità?

Sembra che tu stia solo cercando qualcosa con cui prendertela e infangare il linguaggio mql. Rimuovete static da una variabile in una classe e sarete felici.

 

Cosa succede quando la variabile di sistema che otteniamo da GetTickCount() è in overflow?

C'è una reazione standard del terminale?

C'è bisogno di monitorare programmaticamente questo momento e implementare una risposta?

 
Alexey Viktorov:

Ciao, ci siamo... Hai letto tu stesso questo link?

Oltre a mql conosco, anche non molto bene, solo VBA e solo lì ho incontrato la direttiva di inizializzazione obbligatoria delle variabili. Si noti che è esclusivamente a discrezione del programmatore. E volete che MQ forzi l'inizializzazione di tutte le variabili?

Beh, qui sta la ragione. Non solo non sai molto bene (e l'hai detto tu stesso quante volte), ma conosci anche VBA, che ha poco a che fare con questo linguaggio. Conosco abbastanza bene il C++. Questo è un linguaggio molto chiaro e rigoroso, nessun libero arbitrio è permesso lì, che si sta fantasticando. E MQL è stato creato a immagine e somiglianza di C++. Quindi smettiamola. Familiarizzate con C++ per cominciare e poi avrà senso discutere di qualcosa.

p.s. A proposito, mi rendo conto solo ora che hai portato la conversazione nella direzione sbagliata, perché ho già dimenticato dove è iniziato tutto, e ora ho rivisto il mio codice originale e ho capito che il tuo primo attaccoqui era completamente fuori tema. E come potevo non prestare attenzione subito! Nel mio codice, la variabile statica è inizializzata esattamente come una costante, come è descritto nella documentazione. Quindi il problema è che non ha inizializzato un cazzo. E tu hai cominciato a dirmi che è perché deve essere inizializzato con una costante. Ed eccoci qui...

 

Perché non posso inizializzare l'array con delle variabili?

void (double a, double b,double c )

{

double inp[3]={a,b,c};   // компилятор ругается 'а' - constant expression required      

}

 
Alexey Kochetkov:

Perché non posso inizializzare l'array con delle variabili?

Perché in MQL si può solo inizializzare con delle costanti.
 
Alexey Navoykov:

Bene, qui sta la ragione. Non solo non sai molto bene (e l'hai detto tu stesso quante volte), ma conosci anche VBA, che ha poco a che fare con il linguaggio in questione. Conosco abbastanza bene il C++. Questo è un linguaggio molto chiaro e rigoroso, nessun libero arbitrio è permesso lì, che si sta fantasticando. E MQL è stato creato a immagine e somiglianza di C++. Quindi smettiamola. Familiarizzate con C++ per cominciare e poi avrà senso discutere di qualcosa.

p.s. A proposito, mi rendo conto solo ora che hai portato la conversazione nella direzione sbagliata, perché ho già dimenticato dove è iniziato tutto, e ora ho rivisto il mio codice originale e ho capito che il tuo primo attaccoqui era completamente fuori tema. E come potevo non prestare attenzione subito! Nel mio codice, la variabile statica è inizializzata esattamente come una costante, come è descritto nella documentazione. Quindi il problema è che non ha inizializzato un cazzo. E tu hai cominciato a dirmi che è perché deve essere inizializzato con una costante. Ed ecco che va...

Vi chiamo un'ultima volta per studiare la sequenza di inizializzazione. Mi sembra che la capacità di pensare logicamente sia più importante della conoscenza. Potete conoscere a memoria tutti i linguaggi di programmazione, ma dovete capire la sequenza di inizializzazione.

Una variabile statica NON può essere inizializzata prima di quella globale. E questo dice tutto.

 
Bug di ChartNavigate
const bool Init = ChartSetInteger(0, CHART_AUTOSCROLL, false) && EventSetTimer(1);  

void OnTimer()
{  
  Print("----------")  ;
  Print(ChartGetInteger(0, CHART_FIRST_VISIBLE_BAR));  

  ChartNavigate(0, CHART_BEGIN, 100);
  
  Print(ChartGetInteger(0, CHART_FIRST_VISIBLE_BAR));
}

Risultato su ICMarkets-Demo EURCHF M1 (max barre = 5000):

2017.10.18 21:16:00.800 ----------
2017.10.18 21:16:00.800 4899
2017.10.18 21:16:00.801 199930
2017.10.18 21:16:01.821 ----------
2017.10.18 21:16:01.821 199930
2017.10.18 21:16:01.821 4899
2017.10.18 21:16:02.836 ----------
2017.10.18 21:16:02.836 4899
2017.10.18 21:16:02.836 199930
2017.10.18 21:16:03.845 ----------
2017.10.18 21:16:03.845 199930
2017.10.18 21:16:03.855 4899
2017.10.18 21:16:04.864 ----------
2017.10.18 21:16:04.864 4899
2017.10.18 21:16:04.864 199930
2017.10.18 21:16:05.876 ----------
2017.10.18 21:16:05.876 4999
2017.10.18 21:16:05.886 199930

Non capisco assolutamente nulla. Dovrebbero essere gli stessi numeri. Ma alla fine il grafico salta sempre.

Funziona per qualcuno?

 
Alexey Viktorov:

Vi invito un'ultima volta a familiarizzare con la sequenza di inizializzazione. Mi sembra che la capacità di pensare logicamente sia più importante della conoscenza. Potete conoscere a memoria tutti i linguaggi di programmazione, ma dovete capire la sequenza di inizializzazione.

Una variabile statica NON può essere inizializzata prima di una globale. E questo dice tutto.

Mi dispiace, ma non presterò più attenzione alle tue provocazioni senza senso e con questo tono. Sono già dispiaciuto per aver perso tempo in discussioni inutili con un dilettante. In primo luogo, lei presentava delle costanti che non riguardavano affatto la mia situazione, e con la stessa arroganza aggressiva di adesso. Ora stai facendo delle affermazioni senza fondamento, non conoscendo nemmeno l'argomento e non capendo come è organizzato un linguaggio di programmazione. Tieni per te i tuoi "pensieri logici", congetture e fantasie. Non sono interessato a loro.

 
Kirill Belousov:

Cosa succede quando la variabile di sistema che otteniamo da GetTickCount() è in overflow?

C'è una reazione standard del terminale?

C'è bisogno di tracciare programmaticamente questo momento e implementare una reazione?

Non c'è bisogno di attuare alcuna reazione.

Se ricevete il valore restituito da GetTickCount in una variabile di tipo uint, potete facilmente ricevere la differenza

uint prev_count=GetTickCount();
...
...
uint diff=GetTickCount()-prev_count;

Anche se c'è un overflow, otterrete la differenza corretta. Queste sono peculiarità delle operazioni con i numeri interi senza segno. Ma questo va bene solo se il valore precedente è stato ottenuto esattamente nello stesso modo (GetTickCount) e se il valore precedente è stato ottenuto non prima di 49 giorni fa.

Se controllate per più o meno, avete bisogno di più operazioni della semplice sottrazione

 
fxsaber:
Il bug di ChartNavigate

Risultato su ICMarkets-Demo EURCHF M1 (max barre = 5000):

Non capisco assolutamente nulla. Dovrebbero essere gli stessi numeri. Ma alla fine il grafico salta sempre.

Si sta riproducendo?

Perché è un bug?

La navigazione in un grafico non è immediata. È un comando asincrono. Il risultato della sua esecuzione non è garantito.

È come se tu premessi il pulsante PageUp e il grafico si fermasse. E improvvisamente ha sussultato.