Errori, bug, domande - pagina 2243
![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Il codice nell'indicatore mql4 ha smesso di funzionare. come posso sistemarlo?
L'editor dice 'ObjectSetInteger' - nessuno degli overload può essere applicato alla chiamata di funzione
Ha funzionato per anni e poi improvvisamente si è fermato. È un peccato, però.
Ma perché ha mischiato due stili? Se usate la prima riga per specificare il codice della freccia, allora usate la seconda riga nello stesso stile:
Ho provato a caricare una nuova versione dell'indicatore sul mercato. Il test si è concluso con degli errori. Rapporto di errore come nell'immagine in appendice con il seguente contenuto:
Forse il problema è nel tester?Ma perché hai mischiato i due stili? Se usate la prima linea per impostare il codice della freccia, allora usate la seconda linea nello stesso stile:
Grazie, mi ha aiutato.
2 stili? Non sapevo degli stili. È solo che prima si poteva fare questa sezione solo in quel modo. C'è stato un cambiamento. Ho programmato in MQL4 per più di 10 anni. E ora gli sviluppatori hanno cambiato il linguaggio e molti dei miei codici non funzionano più. Sono molto deluso. I cambiamenti non erano per il meglio. Significa che devo rifare una quantità enorme di codici. Anche se sono vecchi, sono stati molto usati.
Ho provato a caricare una nuova versione dell'indicatore sul mercato. Il test si è concluso con degli errori. Rapporto di errore come mostrato nell'immagine in appendice con il seguente contenuto:
Forse il problema è nel tester?Si prega di creare una richiesta a servicedesk, troveremo una soluzione
UPD: Trovata la tua richiesta.
Libera il buffer di qualsiasi array dinamico e imposta la dimensione della dimensione zero a 0.
Quando si scrivono script e indicatori, la necessità di utilizzare la funzione ArrayFree() può verificarsi raramente, poiché tutta la memoria utilizzata viene immediatamente rilasciata, e negli indicatori personalizzati il lavoro principale con gli array è rappresentato dall'accesso ai buffer degli indicatori, le cui dimensioni sono gestite automaticamente dal sottosistema esecutivo del terminale.
Se avete bisogno di gestire la memoria in condizioni dinamiche complesse nel vostro programma, la funzione ArrayFree() vi permetterà di liberare esplicitamente e immediatamente la memoria occupata da un array dinamico che non è più necessario.
Vedi? Inutile.
Naturalmente, una volta che la memoria viene liberata da essa, e poi la si alloca di nuovo assegnando una dimensione all'array, nessuno può garantire il suo contenuto.
Utilizzare l'inizializzazione dell'array: ArrayInitialize()
Cosa vuol dire che nessuno garantisce il contenuto? Se la memoria è stata liberata, non c'è più, quindi come si fa a metterci della spazzatura? O cancellare la memoria implica dare il permesso a quella memoria di essere usata da un'altra parte del programma, e non cancellarla del tutto?
Cosa vuol dire che nessuno garantisce il contenuto? Se la memoria è stata cancellata, non c'è più, quindi come fa ad avere dei rifiuti? O cancellare la memoria implica dare il permesso a quella memoria di essere usata da un'altra parte del programma, e non cancellarla del tutto?
ArrayResize non pulisce la memoria, ed è per questo che contiene spazzatura, dal precedente "consumatore".
Questo è fatto per la velocità, perché dopo che la memoria è assegnata a un array, nel 99,99(9)% dei casi, l'utente lo "riempirà" con i suoi dati.
Grazie, mi ha aiutato.
Due stili? Non sapevo degli stili. È solo che prima si poteva fare questa sezione solo in quel modo. C'è stato un cambiamento. Ho programmato in MQL4 per più di 10 anni. E ora gli sviluppatori hanno cambiato il linguaggio e molti dei miei codici non funzionano più. Sono molto deluso. I cambiamenti non erano per il meglio. Significa che devo rifare una quantità enorme di codici. Saranno anche vecchi, ma erano molto più utili.
Non è come il codice della freccia era impostato prima che fossero introdotte le funzioni ObjectSetXXX di mql4?
Ho anche scritto in mql per circa 10 anni (forse di più - come vola il tempo...) - sto cominciando a dimenticare le funzioni strettamente quaternarie - scrivo codice multipiattaforma quando possibile.
ArrayResize non cancella la memoria, ecco perché contiene spazzatura dal precedente "consumatore".
Questo è fatto per la velocità, perché dopo l'assegnazione della memoria a un array, nel 99,99(9)% dei casi, l'utente lo "riempirà" con i suoi dati.
Allora perché i valori numerici sono costanti "spazzatura", anche dopo aver riavviato il terminale?
Personalmente, mi sono bloccato con la semplice somma del contenuto delle celle in un altro array, e mi sono interrogato sul problema per molto tempo.
Allora perché i valori numerici sono costanti "spazzatura", anche dopo aver riavviato il terminale?
Personalmente, mi sono bruciato su una semplice sommatoria del contenuto delle celle di un altro array, e mi sono chiesto cosa c'era di sbagliato per molto tempo.
Non importa che tipo di dati siano contenuti nell'array non inizializzato, in qualsiasi momento i dati possono cambiare, nessuno ne garantisce il valore.
Ecco perché l'uso di variabili non inizializzate (leggere la memoria) a volte porta a situazioni in cui ci vuole molto tempo per trovare la causa:
Posso solo dare qualche consiglio.
Dovreste prendere l'abitudine di inizializzare sempre i dati, in modo che in futuro non perdiate molto tempo a cercare errori legati alla mancanza di inizializzazione.
Cosa vuol dire che nessuno garantisce il contenuto? Se la memoria è stata cancellata, non c'è più, quindi come fa ad avere dei rifiuti? O cancellare la memoria implica dare il permesso a quella memoria di essere usata da un'altra parte del programma, e non cancellarla del tutto?
Cosa vuol dire "no"? Non si rimuove la memory stick dallo slot della scheda madre. E se la memoria è presente e viene liberata (non inizializzata con un valore, ma liberata), allora inizia ad essere usata per altre necessità del programma.