Errori, bug, domande - pagina 1524

 
Slawa:

Cosa documentare? "Fratelli, rilassatevi e prendetevela comoda, deinizializzatevi come volete. Gli sviluppatori l'hanno permesso.

Ma quando si chiude il terminale, il terminale innesca condizioni rigorose, che sono già state esplicitamente menzionate nella documentazione. E la prossima volta che aprite il terminale, potreste non aver aperto i grafici, perché non sono riusciti a salvare nel tempo assegnato.

Cosa c'entra questo?

Provate a inondare il log in un ciclo infinito e vedete quanto velocemente cresce e come 64 MB taglierà i record duplicati e troncherà l'inizio del log. Stai esagerando con la tua affermazione sulla mancanza di protezione. Avremmo avuto tutti i dischi dei siti di hosting intasati da tempo.

Documentare come è o fare come documentato... OK, sono affari vostri.

Provato, rischiando la salute del computer, tasso di riempimento ~1,5 GB/min. Ma il terminale non si blocca, rispetto al 4).

 
-Aleks-:

Ugh, quindi il bug non è tornato - puoi chiudere il terminale ed essere sicuro che tutti i grafici siano salvati.

Ha detto che quando si chiude il terminale, il programma è costretto a terminare dopo 3 secondi ora. Questo è il modo in cui funziona ora e continuerà a funzionare. Non vogliono restituire l'arresto forzato quando il programma viene rimosso dal grafico senza terminare il terminale.
 
Slawa:

In origine si trattava di un indicatore in loop. Il che è categoricamente sconsigliato. Anche come illustrazione

Non stiamo parlando dell'indicatore in loop, ma di qualsiasi indicatore senza controllo IsStopped all'interno dei suoi cicli. Perché i cicli di costruzione di indicatori complessi possono essere lunghi. Naturalmente, questo problema non è così attuale per me a causa del ciclo infinito, solo che non posso mostrare il codice sorgente, ed è inutile perché è troppo ingombrante.
 

Qualsiasi indicatore utilizza almeno un ciclo.

Un ciclo senza controllo IsStopped rende questo ciclo potenzialmente infinito. Perché ci possono essere milioni di dati sui prezzi nell'array, e ogni iterazione può essere scritta in modo non ottimale.

Un programmatore che crea deliberatamente un ciclo infinito non deve appellarsi alla mancanza di informazioni nella documentazione; inoltre, la documentazione afferma esplicitamente

В одном потоке с индикаторами также последовательно выполняются остальные действия по данному символу - обработка тиков и синхронизация истории. Это означает, что если в индикаторе выполняется бесконечное действие, все остальные события по его символу никогда не выполнятся.

Il programmatore cosciente capisce subito che in questo caso, è lui/lei il responsabile dell'efficienza dell'indicatore, non la documentazione. Inoltre, ci sono state molte discussioni e articoli su questo argomento

 
Slawa:

Il programmatore coscienzioso capisce subito che in questo caso è responsabile dell'efficienza dell'indicatore, non della documentazione. Inoltre, ci sono state molte discussioni e articoli su questo argomento

Confesso che non avevo il controllo IsStopped, ed è per questo che ho avuto problemi di interruzioni nella costruzione di indicatori complessi per mia sola colpa. Ma, d'altra parte, mi sono abituato al fatto che il lavoro del programma e la sua documentazione devono coincidere.
 
Ilya Malev:
Ha detto che quando si chiude il terminale, il programma è costretto a terminare già dopo 3 secondi. Questo è il modo in cui funziona ora e continuerà a funzionare. Non vogliono riportare l'arresto forzato quando si rimuove il programma dal grafico senza terminare il terminale.
Um, ho fatto il mio punto su quadruplo - sembra che ora termina e chiude tutto correttamente, mentre prima perdeva i grafici con gli EAs.
 
Ilya Malev:
Tutto questo è corretto, mi sono pentito di non aver fatto il controllo di IsStopped e quindi ho avuto problemi di interruzione della costruzione di indicatori complessi solo per colpa mia. Ma, d'altra parte, mi sono abituato al fatto che il funzionamento del programma e la sua documentazione devono coincidere.

La documentazione non può prendere in considerazione tutte le sfumature. Soprattutto quando si parla di secondi, GHz, megabyte - i valori che sono misurabili ma dipendono fortemente dal loro ambiente

Cerchiamo di riempire gli spazi vuoti della documentazione (anche se segretamente speriamo in una presunzione di coscienziosità)

 
-Aleks-:
Um, ho fatto un commento su quadruplo - sembra completare e chiudere tutto correttamente ora, ma perdeva i grafici con gli EAs.

Il quartetto ha messo in parallelo i processi di chiusura di ogni grafico. Perciò sono stati in grado di aumentare il timeout per ciascuno di essi.

In passato, le tabelle venivano memorizzate una per una, e ad ognuna veniva dato lo stesso timeout. Più grafici e più EAs inibiti su di essi, più lungo era il processo di chiusura.

 
Slawa:

Il quartetto ha messo in parallelo i processi di chiusura di ogni grafico. Quindi sono stati in grado di aumentare il timeout per ciascuno di essi.

In passato, le tabelle venivano memorizzate una per una, e ad ognuna veniva dato lo stesso timeout. Più grafici e su di essi, più lungo era il processo di chiusura.

Approssimativamente capito.

Lento non lento, molto dipende dall'hardware e dai compiti che l'EA esegue, e si deve tener conto del fatto che i programmi sono spesso scritti non da programmatori professionisti - è per questo che esiste un linguaggio di programmazione, credo.

 

MT4. Vorrei richiamare la vostra attenzione ancora una volta sulle peculiarità dell'inizializzazione delle variabili globali del programma.

Le variabili globali sono inizializzate una volta quando si installa il programma su un grafico o si ricompila il codice.

Se volete cambiare timeframe, simbolo o parametri di input, allora le variabili globali non vengono reinizializzate (per esempio, non vengono cancellate), e mantengono i loro valori, che hanno ottenuto durante il lavoro con timeframe, simboli o parametri di input precedenti.

input int c;
int a,b;
void OnInit() {
 a++; Print(" a=",a," b=",b," c=",c); }

Si scopre che se non si cancellano tutte le variabili globali programmaticamente, allora quando si cambia il TF, lo strumento o i parametri di ingresso, il codice funzionerà con i valori precedenti, cioè in modo errato.

È ragionevole? Non sarebbe meglio farlo nello strategy tester? Lì, le variabili globali sono reinizializzate ad ogni cambio di TF, di strumento o di parametri d'ingresso.