Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 18
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
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
Ho ricaricato il mio saldo e ora non riesco a trovare il terminale con il conto reale.
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 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];
}
}
Ho ricaricato il mio saldo e ora non riesco a trovare il terminale con il conto reale.
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 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:
Questo è un tipico caso di sfruttamento di errori logici impliciti. ...
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 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];
}
}
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.
la risposta è molto semplice - avete un banale overrun dell'array - e il vostro indicatore smette di funzionare a causa di questo errore
{
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:
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];
}
}
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.