Errori, bug, domande - pagina 434

 

komposter
Hai ragione. Ho fatto un errore.
Grazie per la vostra risposta.

 
Silent:

Manuale di riferimento MQL5 - Libreria Standard - Classi per organizzare i dati - CArrayObj (sul sito web e nella guida):

2. Il meccanismo di gestione della memoria è disabilitato.

In questo caso, CArrayObj non è responsabile della liberazione della memoria

Risolto, grazie.
 

Documentazione. Sezione delle variabili statiche.

"...Le variabili statiche esistono dal momento dell'esecuzione del programma e sono inizializzate una volta prima di chiamare la funzione specializzata OnInit()..."

Controllo del codice dell'Expert Advisor:

void OnInit() {
  Print("OnInit() begin!");

  static bool init = true;
  if (init) {
    Print("Static initialized!");
    init = false;
  } 

  Print("OnInit() end!");
}

"Posizionare" l'EA sul grafico:

2011.06.27 20:10:56     Тест (EURUSD,H1)        OnInit() begin!
2011.06.27 20:10:56     Тест (EURUSD,H1)        Static initialized!
2011.06.27 20:10:56     Тест (EURUSD,H1)        OnInit() end!

Senza rimuovere l'EA dal grafico, cambiamo il periodo del grafico:

2011.06.27 20:11:00     Тест (EURUSD,M30)       OnInit() begin!
2011.06.27 20:11:00     Тест (EURUSD,M30)       OnInit() end!

Dovrebbe funzionare così?

In realtà ho interpretato l'informazione dalla documentazione come un'inizializzazione forzata delle variabili statiche a qualsiasi chiamata della funzione OnInit(), indipendentemente dal fatto che sia stata causata dalla ricompilazione o da un cambiamento del simbolo o altro...

Si scopre che mi sbagliavo. Per favore illuminatemi: quali sono le eccezioni a questa regola?

 

Quando i parametri di input vengono cambiati, è lo stesso "casino".

Quando l'account viene cambiato, tuttavia, viene gestito correttamente - le variabili statiche vengono reinizializzate.

Mi chiedo come cambiare il simbolo del grafico senza cancellare l'esperto(REASON_CHARTCHANGE)?

Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации - Документация по MQL5
 
voix_kas:

Documentazione. Sezione delle variabili statiche.

"...Le variabili statiche esistono dal momento dell'esecuzione del programma e sono inizializzate una volta prima di chiamare la funzione specializzata OnInit()..."

Controllo del codice dell'Expert Advisor:

"Posizionare" l'EA sul grafico:

Senza rimuovere l'EA dal grafico, cambiamo il periodo del grafico:

Dovrebbe funzionare così?

Sì, dovrebbe funzionare.

Il programma (il suo codice) è già stato caricato una volta ed esegue solo una reinizializzazione a caldo (Deinit/Init senza scarico di codice). In questo caso, è compito dello sviluppatore assicurarsi che l'ambiente sia inizializzato correttamente.

 
Renat:

Sì, dovrebbe funzionare così.

Il programma (il suo codice) è già caricato una volta e fa solo una reinizializzazione a caldo (Deinit/Init senza scarico di codice). In questo caso, lo sviluppatore deve preoccuparsi della corretta inizializzazione dell'ambiente.

In primo luogo, il tuo commento contraddice chiaramente la definizione nella documentazione: inizializzare una volta prima di chiamare OnInit(). Allora dovreste specificare chiaramente la definizione nella documentazione: "...inizializzare una volta prima di chiamare OnInit(). prima chiamare OnInit()".
In secondo luogo, il tuo commento contraddice chiaramente il caso di cambio di conto, in cui MT, ovviamente, termina forzatamente l'Expert Advisor e lo ripristina nuovamente.

La questione fondamentale se le variabili statiche debbano essere forzatamente reinizializzate ad ogni (non solo la prima) chiamata a OnInit() può essere portata in considerazione/votazione?

 

In generale, è divertente come funzionano le cose.
A prima vista, ho pensato che la funzione OnDenit è una specie di distruttore, e OnInit - il costruttore dell'Expert Advisor.
In effetti, si scopre che OnInit è un evento multiplo (nel corso della vita di expert). Allora non è chiaro, perché abbiamo bisogno di generare esplicitamente l'evento OnDenit se sappiamo che l'EA non termina la sua operazione (per esempio, in caso di cambiamento del periodo del grafico)?

E un'altra domanda.
Ilmotivo della deinizializzazione di REASON_CHARTCHANGE è che il simbolo o il periodo di un grafico è stato cambiato.
Per favore, spiega come si può cambiare un simbolo del grafico senza cancellare l'EA su di esso?

 
voix_kas:

E un'altra domanda.
Motivo della deinizializzazione REASON_CHARTCHANGE - Il simbolo o il periodo del grafico è stato cambiato.
Per favore, spiega come si può cambiare un simbolo del grafico senza cancellare l'EA su di esso?

ChartSetSymbolPeriod()
 
voix_kas:

In realtà, è divertente.
Per intuito, ho pensato che la funzione OnDenit fosse una specie di distruttore e che la funzione OnInit fosse il costruttore dell'Expert Advisor.
In effetti, si scopre che OnInit è un evento multiplo (nel corso della vita di un Expert Advisor). Allora non è chiaro, perché abbiamo bisogno di generare esplicitamente l'evento OnDenit se sappiamo che l'EA non termina la sua operazione (per esempio, in caso di cambiamento del periodo del grafico)?

E un'altra domanda.
Ilmotivo della deinizializzazione di REASON_CHARTCHANGE - Il simbolo o il periodo di un grafico è stato cambiato.
.per favore, spiega come si può cambiare un simbolo del grafico senza cancellare l'EA su di esso?

Nello stesso modo in cui tutto è stato chiamato in MT4. E non si sa se l'operazione EA è terminata o no (a questo scopo i parametri sono abbandonati in OnDeinit, anche se la ragione di un eventuale attivazione di OnInit può essere facilmente scoperta).

2. È molto semplice, nelle impostazioni del terminale permetti all'Expert Advisor di fare trading quando il simbolo e il periodo cambiano.

Poi seleziona un altro simbolo nella panoramica del mercato e "lascialo" sul grafico con il tuo mouse.

L'EA in ogni caso, con l'inizializzazione normale dopo il cambio di simbolo/periodo "non sarà cancellato" (si "riavvierà a caldo" come ha detto Renat sotto). Se lo guardiamo ad un livello semplice, l'Expert Advisor sarà autorizzato a fare trading sotto certe impostazioni del terminale.

Yedelkin:
ChartSetSymbolPeriod()
Un'altra opzione, ma programmatica. :)
 
voix_kas:

In primo luogo, il tuo commento contraddice chiaramente la definizione nella documentazione: sono inizializzati una volta prima di chiamare OnInit(). Allora dovreste specificare chiaramente la definizione nella documentazione: "...inizializzare una volta prima di chiamare OnInit(). prima chiamata OnInit()".

Sì, questo dovrebbe essere definito più precisamente nella documentazione.


In secondo luogo, il tuo commento contraddice chiaramente il caso del cambio di account, in cui MT ovviamente termina forzatamente l'EA e lo ripristina nuovamente.

Sì, quando il conto viene cambiato, l'Expert Advisor ovviamente si scarica dalla memoria ed esegue un riavvio a freddo. L'abbiamo fatto apposta.


Possiamo introdurre/votare una domanda fondamentale sulla necessità della reinizializzazione forzata delle variabili statiche ad ogni (non solo alla prima) chiamata di OnInit()?

Purtroppo no. Questo può essere risolto solo riavviando a freddo l'Expert Advisor.
Motivazione: