Errori, bug, domande - pagina 348

 
Rosh:

Se c'è una posizione, si otterrà un ciclo infinito perché

è equivalente a

Non c'è modo di uscire dal ciclo nel codice perché non c'è nessuna pausa nel corpo dell'operatore;
Grazie mille, non dovrebbe essere lì; l'ho corretto, tutto funziona
 

Errori (build 421, forse qualcosa risolto in 425, nessun aggiornamento a 425 da alpari ancora):

1. Già scritto nel thread sulla visualizzazione 3D: le didascalie dei grafici 3D (nome della scala e valore della scala) non cambiano quando si cambiano i parametri di visualizzazione sul grafico.

2. Durante l'ottimizzazione veloce il grafico è abbinato a circa 10600° passaggio, cioè l'ottimizzazione va avanti per 50,51...60 generazioni e il grafico non si sposta e non vengono visualizzati nuovi passaggi. Allo stesso tempo, la scheda Settings visualizza "Optimization progress:" invece del numero di passaggi, e in alcune circostanze inspiegabili cambia ancora, per esempio, 12420/14400 (le cifre sono approssimative).

3. Gli agenti cancellati possono andare allo stato Busy e rimanere in questo stato, devo spegnerli e riaccenderli, dopo di che l'ottimizzazione continua.

E domanda: sarà possibile cambiare la vista del grafico (1D/2D/3D) durante l'ottimizzazione e non dopo il suo completamento?

 
PiramidaR:

Errori (build 421, forse qualcosa risolto in 425, nessun aggiornamento a 425 da alpari ancora):

Nello stesso terminale, aprite un conto da MetaQuotes e si aggiornerà. Poi passa di nuovo a un altro account
 
PiramidaR:

Errori (build 421, forse qualcosa risolto in 425, nessun aggiornamento a 425 da alpari ancora):

1. Già scritto nel thread sulla visualizzazione 3D: le didascalie dei grafici 3D (nome della scala e valore della scala) non cambiano quando si cambiano i parametri di visualizzazione sul grafico.

2. Durante l'ottimizzazione veloce il grafico è abbinato a circa 10600° passaggio, cioè l'ottimizzazione va avanti per 50,51...60 generazioni e il grafico non si sposta e non vengono visualizzati nuovi passaggi. Allo stesso tempo, la scheda Settings visualizza "Optimization progress:" invece del numero di passaggi, e in alcune circostanze inspiegabili cambia ancora, per esempio, 12420/14400 (le cifre sono approssimative).

3. Gli agenti cancellati possono andare allo stato Busy e rimanere in questo stato, devo spegnerli e riaccenderli, dopo di che l'ottimizzazione continua.

E una domanda: sarà possibile cambiare la vista grafica (1D/2D/3D) durante l'ottimizzazione e non dopo il suo completamento?

1,2 Corretto, ma non incluso nell'ultima build

3 Ci stiamo lavorando.

Non ci sarà nessuna caratteristica di questo tipo

 
Mi piacerebbe avere la possibilità non solo di specificare il valore che non sarà disegnato
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);

ma anche per poter auto-inizializzarel'array con questo valore. Se l'indicatore non ha assegnato nulla all'ultima barra, allora per default assegna ciò che è stato specificato nel parametro

PLOT_EMPTY_VALUE

o meglio, prima lo inizializzi con un valore vuoto e poi lasci che l'indicatore scriva quello che vuole.

Perché ora il valore di default sarà zero, ma zero in molti indicatori è un numero significativo che dovrebbe essere disegnato.

HZ ha scritto in questo thread come non sono sicuro che questo non è stato risolto, quindi il desiderio può essere considerato come una domanda. Se è così, per favore ditemi come si risolve.

 

Urain:

Perché in questo momento il numero di default sarà zero, ma zero in molti indicatori è un numero significativo da disegnare.

In effetti, tutto può esserci, è solo che di solito è una fortuna che sia zero. L'articoloindicatore da indicatore in MQL5 dice direttamente:

È necessario inizializzare i buffer degli indicatori?

Le matrici in MQL5 non sono inizializzate di default con alcun valore, e questo vale certamente per le matrici che sono assegnate ai buffer di indicatori usando SetIndexBuffer(). Se un array è un buffer indicatore, la sua dimensione dipenderà dal parametro rates_total nel gestore OnCalculate().

Ci può essere la tentazione di inizializzare tutti i buffer degli indicatori con un valore vuoto di EMPTY_VALUE usando la funzione ArrayInitialize(), per esempio, una volta all'inizio di OnCalculate()
//--- если это первый вызов OnCalculate() 
   if(prev_calculated==0)
     {
      ArrayInitialize(TSIBuffer,EMPTY_VALUE);
     }

Ma non è consigliabile farlo per il seguente motivo: durante il funzionamento del terminale, si ricevono le quotazioni del simbolo sui cui dati viene calcolato l'indicatore. Così, il numero di barre aumenterà nel tempo, e il terminale assegnerà ulteriore memoria per i buffer degli indicatori.

Ma i valori negli elementi dell'array appena collegati avranno qualsiasi valore, perché quando la memoria viene riallocata per qualsiasi array, non c'è inizializzazione. E l'inizializzazione iniziale può dare una fiducia fuorviante che tutti gli elementi dell'array, a cui non abbiamo esplicitamente assegnato alcun valore, saranno riempiti con lo stesso valore con cui abbiamo inizializzato l'array la prima volta. Questo non è certamente vero, e non dovremmo mai contare sul fatto che il valore di qualche variabile o elemento dell'array sia inizializzato con il valore che vogliamo.

È necessario impostare un valore per ogni elemento del buffer dell'indicatore, e se il valore dell'indicatore per questa barra non è definito (non calcolato, secondo l'algoritmo implementato nell'indicatore), allora per questi casi un valore vuoto dovrebbe essere esplicitamente impostato. Per esempio, il valore del buffer dell'indicatore è calcolato utilizzando l'operazione di divisione, e ad un certo punto potrebbe risultare che il divisore è uguale a zero.
 
Rosh:

In realtà può esserci di tutto, è solo che di solito è una fortuna che ci sia zero. L'articoloIndicatore da Indicatore in MQL5 lo dice esplicitamente:


Questo è esattamente il problema che vorrei risolvere a livello di linguaggio, perché l'inizializzazione dell'ultimo valore richiederà ulteriori linee di codice dove potrebbero esserci errori.

In questo modo si può essere sicuri che c'è il valore esatto e in base a questo si può costruire un ulteriore algoritmo.

 
Urain:

Questo è esattamente il problema che vorrei risolvere a livello di linguaggio, perché l'inizializzazione dell'ultimo valore richiede ulteriori linee di codice che possono contenere errori.

In questo modo si può essere sicuri che c'è un valore esatto e su questa base si può costruire un ulteriore algoritmo.

Anch'io ho affrontato questo problema. Appoggio: fare una soluzione a livello di lingua.
 
Lizar:
Ho incontrato anche questo. Appoggio: fare la soluzione a livello di lingua.
+1
 

Costruire 425

Sono confuso da questa situazione con il tester: l'EA viene eseguito più volte nelle stesse condizioni, ma i risultati delle esecuzioni sono diversi. La differenza è piccola, ma...

Controllato su due macchine, ottengo 2 risultati diversi, con circa la stessa probabilità. Che cosa significherebbe?

Motivazione: