Errori, bug, domande - pagina 3151
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
C'è sempre stato un controllo: if(limit>1) limit=rates_total-1. Questo è per i casi in cui non c'è i+qualcosa nel calcolo. Se c'è, allora questi "quanti-qualcosa" devono essere inclusi nel costrutto: limit=rates_total-1-qualcosa-qualcosa.
Senza di essa, ci sarebbe sempre un superamento dell'array. Perché rates_total non è altro che Bars(). Corrispondentemente, se ci sono 5000 barre e ci rivolgiamo all'indice 5000, cadremo fuori dai limiti dell'array (il calcolo delle barre inizia da zero).
Nel tuo esempio, il calcolo del limite è sbagliato:
Dovrebbe essere così:
E dopo di ciò controlla se c'è un limite>1
E se il limite è maggiore di uno, allora limite = rates_total-1
Grazie Artem! E scusa per il trambusto.
Giusto, dovrebbe esserci un controllo, l'ho solo dimenticato.
Ho ancora un commento nel codice
//Controlla e calcola il numero di barre calcolate.
A quanto pare, il copia-incolla ha causato il mio malinteso.
Tutto funziona come dovrebbe con il controllo. Grazie.
Grazie Artem!
Giusto, dovrebbe esserci un controllo, che avevo dimenticato.
Tutto funziona correttamente con il controllo. Grazie.
Non c'è di che. Correggere il calcolo. Non è corretto - l'ho sottolineato sopra.
-1 non dovrebbe essere qui.
Se rates_total è 5000, e le barre calcolate nella precedente chiamata di OnCalculate() sono anche 5000 (prev_calculated), allora il limite sarà uguale a -1. Di conseguenza, il ciclo non sarà eseguito affatto.
Se volete selezionare come leggere l'indicatore (per tick sulla barra zero o solo all'apertura di una nuova barra), allora inserite una variabile, specificando come farlo:
int end = (ogni tick ? WRONG_VALUE : 0);
il ciclo sarà il seguente: for(int i=limit; i>end; i--) { //... }
e il calcolo dei limiti sarà corretto, e il ciclo sarà come volete voi.
Codice corretto.
i>=0 per ogni tick
i>0 per la nuova barra
Oppure
Non hai nemmeno chiesto cosa fare... I telepati sono tornati dalle vacanze? ;)
Codice corretto.
i>=0 per ogni tick
i>0 per una nuova barra
Questo è meglio spostato in OnInit()
Non hai nemmeno chiesto cosa fare... I telepati sono tornati dalle vacanze? ;)
:)
Artem, non c'è bisogno di essere un telepate per vedere che l'uomo si è registrato pochi minuti fa e la prima cosa che ha visto è stata "Bugs, bugs, questions"
Chiaramente, sta chiedendo se può avere dei soldi gratis, e di non fare troppi problemi...
:)
Artem, non c'è bisogno di essere un telepate per vedere che l'uomo si è registrato pochi minuti fa e la prima cosa che ha visto è stata "Errori, bug, domande"
Chiaramente, sta chiedendo se può ottenere dei soldi gratis, e di non sforzarsi troppo...
Forse ha deciso di fare qualche soldo in più su Bentley investendo in un tutor? :)
Forse ha deciso di fare un po' di soldi per la sua Bentley investendo in un tutor, con un duro lavoro come programmatore. :)
Sai qual è la cosa più fastidiosa? Che qualsiasi comportamento viene tradito in silenzio, senza preavviso.
E poi la gente si fa male. Sono stufo di questo metatrader.
Il design di un ciclo di indicatori è solo preso in prestito dai vecchi tempi con il metodo del copia-incolla (e l'autocompletamento storto) senza pensare.
tutto è semplice con l'interfaccia attuale:
for(int bar=prev_calculated>0?prev_calculates-1:0 ; bar<rates_total; bar++) {
int i=rates_total-1; // i используем если обращения как ArraySetSeries(x,true), иначе bar
....
}
return rates_total;
il push con prev_calculated-1 in questo caso è necessario se è necessario ricalcolare l'ultima barra ad ogni chiamata.
È solo che il design del ciclo dell'indicatore è preso dai vecchi tempi del copia-incolla (e dell'autocompletamento storto) senza pensare.
tutto è semplice con l'interfaccia attuale:
for(int bar=prev_calculated>0?prev_calculates-1:0 ; bar<rates_total; bar++) {
int i=rates_total-1; // i используем если обращения как ArraySetSeries(x,true), иначе bar
....
}
return rates_total;
l'affollamento con prev_calculated-1 in questo caso è necessario se è necessario ricalcolare l'ultima barra ad ogni chiamata.
Sì, mi sono un po' eccitato con la mia dichiarazione.
Proprio quando qualcosa funzionava e ora non più, iniziano i tic nervosi ))
E cominci a ricontrollare tutto e incolpare senza motivo il crash, dimenticando qualche particolarità che non ricordi ovviamente.
E la colpa è del copia-incolla. Credo che molti l'abbiano affrontato.
Voglio suggerire agli sviluppatori di creare modelli personalizzati per gli indicatori e gli EA.
Potranno selezionarli nella procedura guidata.
Alcuni editor C/C++ hanno questa caratteristica.
È molto comodo aggiungere i modelli di base, con i quali si lavora principalmente, e poi li si carica nella procedura guidata.
I modelli MQL standard non sono affatto uguali.
Ovviamente, possiamo dire che possiamo scrivere modelli e poi copiarli.
E di nuovo torniamo all'insidiosa parola "copia". E il fatto di poterlo automatizzare e facilitare la vita del programmatore non viene preso in considerazione.