Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 18

 
Artyom Trishkin:
Questo non va bene. Probabilmente hai ricevuto degli avvertimenti in fase di compilazione? È necessario sbarazzarsi delle cause degli avvertimenti in questi casi, non della #proprietà rigorosa
Quando è stato scritto #property strict, il compilatore ha dato errori in ogni ciclo for() che le variabili devono avere un tipo, quindi ho dovuto scrivere int i e int p in ogni ciclo. Dopo di che il compilatore non ha generato errori, ma la linea non ha costruito. Quando ho rimosso #property strict, il compilatore non ha più richiesto di dichiarare il tipo in ogni ciclo, e la linea è stata costruita.
 

Ho ricaricato il mio saldo e ora non riesco a trovare il terminale con il conto reale.

 
Timur1988:
Quando #property strict era scritto, il compilatore generava errori in ogni ciclo for() che le variabili devono avere un tipo, così ho dovuto scrivere int i e int p in ogni ciclo. Dopo di che il compilatore non ha generato errori, ma la linea non ha costruito. Quando ho rimosso #property strict, il compilatore non ha richiesto di dichiarare il tipo in ogni ciclo, e la linea è stata costruita.

Un tipico caso di sfruttamento di errori impliciti nella logica. Una volta che il compilatore è diventato più "severo", l'auto-inganno sta lentamente scomparendo.

Mi chiedevo perché ci fossero così tanti anelli identici?

E perché non si preoccupa in alcun modo dell'errore "out of array" quando esegue l'indicatore sul grafico?

Per esempio, qui:

    for(int i=1; i<n; i++)
      {    
      for(int p=0; p<m; p++)
         {  
         sum_x[i][p]=sum_x[i][p-1]+Price_CloseX[i][p];                                        
         sum_y[i][p]=sum_y[i][p-1]+Price_CloseY[i][p];
         }        
      }
 
7u6y5t4r3e2w1q:

Ho ricaricato il mio saldo e ora non riesco a trovare il terminale con il conto reale.

Il terminale è lo stesso, devi solo rifare il login con un account reale. Come fare: File - Connect to trading account - specificare il numero di conto, la password e il server nella finestra che appare. Tutti questi dati sono stati dati dal DC, in caso di qualsiasi cosa chiedere loro.
 
Timur1988:
Quando #property strict era scritto, il compilatore dava errori in ogni ciclo for() che le variabili devono avere un tipo, e così ho dovuto scrivere int i e int p in ogni ciclo. Dopo di che il compilatore non ha generato errori, ma la linea non ha costruito. Quando ho rimosso #property strict, il compilatore non ha più richiesto di dichiarare il tipo in ogni ciclo, e la linea è stata costruita.

la risposta è molto semplice - avete un banale overrun dell'array - e il vostro indicatore smette di funzionare a causa di questo errore

    for(int i=1; i<n; i++)
      {    
      for(int p=0; p<m; p++)
         {  
         sum_x[i][p]=sum_x[i][p-1]+Price_CloseX[i][p];                                        
         sum_y[i][p]=sum_y[i][p-1]+Price_CloseY[i][p];
        
         }        
      }
  
   for(int i=1; i<n; i++)
      {    
      for(int p=0; p<m; p++)
         {      
         Mx[i][p]=sum_x[p+1][m-1]/(n-1);  
         My[i][p]=sum_y[p+1][m-1]/(n-1);

puoi vedere questo errore in fase di esecuzione - avvia l'indicatore e guarda il file di log sul Terminale - scheda Esperti:

 
Vitalie Postolache:

Questo è un tipico caso di sfruttamento di errori logici impliciti. ...

Sovrascrivere un array è un grossolano errore di logica - e non si può chiamare un tale errore "implicito".
 
Vitalie Postolache:

Un tipico caso di sfruttamento di errori impliciti nella logica. Una volta che il compilatore è diventato più "severo", l'auto-inganno sta lentamente scomparendo.

Continuavo a chiedermi: perché ci sono così tanti anelli identici?

E perché non si preoccupa in alcun modo dell'errore "out of array" quando esegue l'indicatore sul grafico?

Per esempio, qui:

    for(int i=1; i<n; i++)
      {    
      for(int p=0; p<m; p++)
         {  
         sum_x[i][p]=sum_x[i][p-1]+Price_CloseX[i][p];                                        
         sum_y[i][p]=sum_y[i][p-1]+Price_CloseY[i][p];
         }        
      }


Come calcolare la somma dei prezzi di chiusura in ogni dimensione?
Per quanto riguarda gli stessi cicli, io, a causa della mia limitata conoscenza della programmazione e degli algoritmi, non ho pensato a niente di meglio per selezionare l'elemento dell'array dalla dimensione richiesta, che era necessario per la sostituzione nella formula.
 
Andrey F. Zelinsky:

la risposta è molto semplice - avete un banale overrun dell'array - e il vostro indicatore smette di funzionare a causa di questo errore

    for(int i=1; i<n; i++)
      {    
      for(int p=0; p<m; p++)
         {  
         sum_x[i][p]=sum_x[i][p-1]+Price_CloseX[i][p];                                        
         sum_y[i][p]=sum_y[i][p-1]+Price_CloseY[i][p];
        
         }        
      }
  
   for(int i=1; i<n; i++)
      {    
      for(int p=0; p<m; p++)
         {      
         Mx[i][p]=sum_x[p+1][m-1]/(n-1);  
         My[i][p]=sum_y[p+1][m-1]/(n-1);

puoi vedere questo errore in fase di esecuzione - avvia l'indicatore e guarda il file di log nella scheda Terminale - Esperti:

Potresti per favore dirmi come risolvere questo errore?
 
Timur1988:
Allora come si calcola la somma dei prezzi di chiusura di ogni dimensione?
Per quanto riguarda gli stessi cicli, a causa della mia limitata conoscenza della programmazione e degli algoritmi, non ho potuto pensare a niente di meglio per selezionare quell'elemento dell'array dalla dimensione desiderata che era necessario per sostituire nella formula.

Per esempio, così:

     for(int i=1; i<n; i++)

      {    
      for(int p=1; p<m; p++)
         {   
         sum_x[i][p]=sum_x[i][p-1]+Price_CloseX[i][p];                                        
         sum_y[i][p]=sum_y[i][p-1]+Price_CloseY[i][p];
         }         
      }
 
Timur1988:
Potete dirmi per favore come risolvere questo errore?

Per correggere questo errore, dovete capire la vostra formula - cosa, perché e come state contando.

E solo allora sarete in grado di elaborare il vostro algoritmo ed eliminare l'errore al di fuori dell 'array.

Con il metodo "gut feeling" e non capendo la vostra formula - eliminerete l'errore, ma farete un calcolo sbagliato.

p.s. Spiega in dettaglio cosa stai calcolando - commenta il tuo codice in dettaglio - e poi capiremo come risolvere l'errore.