Discussione sull’articolo "I Principi del Calcolo Economico degli Indicatori"

 

Il nuovo articolo I Principi del Calcolo Economico degli Indicatori è stato pubblicato:

Le chiamate all'utente e gli indicatori tecnici occupano pochissimo spazio nel codice del programma dei sistemi di trading automatizzati. Spesso si tratta semplicemente di poche righe di codice. Ma capita spesso che siano queste poche righe di codice a impiegare la maggior parte del tempo, che deve essere speso per testare l'Expert Advisor. Pertanto, tutto ciò che è correlato ai calcoli dei dati all'interno di un indicatore, deve essere considerato molto attentamente di quanto sembrerebbe a prima vista. In questo articolo si parlerà proprio di questo.

Ora che sono chiari i dettagli della chiamata razionale della funzione della copia dei valori degli indicatori nel codice dell'Expert Advisor, è possibile testare i vantaggi dell'applicazione della funzione IsNewBar () negli Expert Advisor.

Quindi abbiamo due opzioni di Expert Advisor disponibili per essere testati nello Strategy Tester, il primo - AMA_Test.ex5. Copia i dati dal buffer dell'indicatore ad ogni tick.

Fig.9 Il risultato del superamento del test con l'Expert Advisor AMA_Test

Il secondo - IsNewBar_AMA_Test.mq5 copia i dati solo durante un cambio di barra.

Fig.10 Il risultato del superamento del test con l'Expert Advisor IsNewBar_AMA_Test

Sì! I risultati dei test sono alquanto deludenti. Si scopre che chiamare una funzione IsNewBar () su ogni tick è molto più costoso che copiare i dati in tre celle dell'array dell'utente! 

Qui vorrei attirare la vostra attenzione su un'altra parte importante, ma apparentemente poco appariscente dell'indicatore. Il fatto è che se otteniamo l’handler dell'indicatore nella funzione OnInit (), indipendentemente dal fatto che copiamo o meno i dati da questo indicatore all'interno della funzione OnTick (), i suoi calcoli su barre ancora non calcolate e correnti, verranno comunque eseguiti su ciascun tick.

Autore: Nikolay Kositsin

 

Grazie per l'articolo.

Ho una domanda. Si utilizza la prima forma dell'indicatore per ottimizzare i calcoli dell'indicatore, c'è begin. Ma se non è possibile utilizzarlo (per i calcoli corretti servono open[], high[], low[], close[] ...) come si fa? Non c'è begin nella seconda forma.

 
Prival:

Grazie per l'articolo.

Ho una domanda. Si utilizza la prima forma dell'indicatore per ottimizzare i calcoli dell'indicatore, c'è inizio. Ma se non è possibile utilizzarlo (per i calcoli corretti sono necessari open[], high[], low[], close[] ...) come si fa? Non c'è begin nella seconda forma.

E non è necessario, perché i parametri di input sono sempre le caratteristiche del prezzo - sono in tutti gli elementi, non si usa un array "arbitrario" riempito solo da begin.
 

non tutto è considerato, ma in generale è ancora interessante =)

e in particolare non viene presa in considerazione una cosa come l'ottimizzazione della chiamata degli indicatori tecnici.

Penso che questo argomento sia abbastanza rilevante.

 

più precisamente, come inizializzare meglio l'indicatore tecnico

in generale viene implementata la funzione di controllo dei dati

ma l'esempio dell'inizializzazione non è esattamente considerato

per quanto è noto dalla guida

Нельзя обратиться к данным индикатора сразу после его создания, так как на расчет значений индикатора требуется некоторое время, и поэтому создавать хэндлы индикаторов лучше всего в OnInit(). Функция iCustom() создает соответствующий пользовательский индикатор и при успешном создании возвращает его хэндл. Пользовательские индикаторы могут содержать до 512 индикаторных буферов, содержимое которых также можно получать при помощи функции CopyBuffer(), используя полученный хэндл.

come aggirare al meglio questa funzione....

 

Mi chiedo sempre la stessa cosa.

   if (Handle == INVALID_HANDLE)  Print(" Impossibile ottenere la maniglia dell'indicatore SMA".);

se questa condizione funziona, cosa devo fare? Diciamo che è il campionato, ecco... l'init non correrà più.

 
Prival:

Mi sono sempre chiesto la stessa cosa.

se questa condizione funziona, cosa devo fare? Diciamo che è il campionato, ecco... l'init non funzionerà più.

Sì! È un fatto non documentato, non lo sapevo nemmeno io! Dovremmo sicuramente indagare! Ma per me è più facile, impacchetto tutti i tacchini nell'Expert Advisor stesso e basta, in modo che l'Expert Advisor corra come un velocista sulla distanza della maratona e non inciampi da nessuna parte e mai!

 
Prival:

Mi chiedo sempre la stessa cosa.

Se questa condizione funziona, cosa devo fare? Diciamo che è un campionato, ecco... l'init non funziona più.

Prima di tutto, ottenere il codice di errore e inviarlo al log. Poi provate ad accedervi di nuovo in OnTick() o OnCalculate(). Se non si riesce a ottenere l'handle dell'indicatore, molto probabilmente l'indicatore non esiste o la memoria non è sufficiente. In questo caso, l'Expert Advisor non ha il diritto di operare.
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений - Документация по MQL5
 
Rosh:
Prima di tutto, ottenere il codice di errore e riportarlo nel log. Quindi provare ad accedere nuovamente a OnTick() o OnCalculate(). Se non si riesce a ottenere l'handle dell'indicatore, molto probabilmente l'indicatore non esiste o manca di memoria. In questo caso, l'Expert Advisor non ha il diritto di operare.

Ecco, possiamo farlo da soli! In una situazione del genere, se potessimo fare in modo che la funzione OnInit() restituisca meno uno per richiamare nuovamente OnInit() e così via fino alla comparsa dell'handle! Ma ora è chiaro che se non si stressa troppo il computer, non ci sarà motivo di non ottenere l'handle. Ma mi è capitato una volta, durante l'aggiornamento di una build, e il problema può essere risolto ricompilando l'indicatore!

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
Il meno uno può essere restituito, ma non è di buon auspicio per l'EA/indicatore.
 
Fortunatamente, l'errore di creazione dell'indicatore dovuto al guasto del terminale praticamente non si verifica.