Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 361

 
ijonhson:

La domanda è se devo calcolare il codice dell'indicatore 900 volte per un tick (3 timeframes con 300 barre per esempio), o 3 volte. È chiaro che icustom è meno fastidioso, lo metto nel ciclo ed è fatto. Come opzione, ho visto un indirizzo dell'array di valori dell'indicatore passato a un EA usando dll, ma non voglio prendere l'indicatore in un set


Di nuovo, c'è un errore nella dichiarazione del problema. Perché avete bisogno di 900 barre nel vostro Expert Advisor? Se hai davvero bisogno di così tanti dati nell'indicatore, 900 barre, allora lavora con loro nell'indicatore stesso, perché trascinarli nell'Expert Advisor? Il compito giusto è il 50% del successo

 
Nikolay Ivanov:

La dichiarazione del problema è di nuovo sbagliata... Perché avete bisogno di 900 barre nel vostro EA? Se hai davvero bisogno di così tanti dati nell'indicatore, 900 di loro, poi lavorare con loro nell'indicatore stesso, perché trascinarli nell'Expert Advisor? Il compito corretto è il 50% del successo


Ho bisogno di confrontare i picchi minimi e massimi dell'indicatore a 3 timeframes per esempio 5min 15min e 30min, per determinare le tendenze, non sarò in grado di indovinare i picchi, cioè dovrò prendere giri su tutta la storia. Ho preso 300 barre di storia come esempio.

È ancora troppo impegnativo usare icustom.

 
ijonhson:

Ho bisogno di confrontare l'indicatore dei picchi minimi e massimi per 3 timeframe per esempio 5min 15min e 30min, per determinare le tendenze, non sarò in grado di indovinare i picchi, che è quello di dover guardare attraverso l'intera storia. Ho preso 300 barre di storia come esempio.

È ancora troppo esigente in termini di risorse per usare icustom.


La questione rimane aperta in ontick, la funzione IndicatorCounted() nel primo calcolo dà -1, come può essere sostituita in un Expert Advisor?

 
ijonhson:

"Non è necessario cambiarlo" - cioè funziona correttamente con onTick in Expert Advisor così come con onCalculate nell'indicatore?

No, volevo dire che non è affatto necessario lì.

 
Alexey Viktorov:

No, volevo dire che non ce n'è affatto bisogno.


Scavatehttps://www.mql5.com/ru/articles/1456, ci darò un'occhiata, ma pensavo ci fosse un'opzione più semplice.

Перенос кода индикатора в код эксперта. Строение индикатора.
Перенос кода индикатора в код эксперта. Строение индикатора.
  • 2007.02.16
  • Nikolay Kositsin
  • www.mql5.com
Прежде чем приступить к основной теме статьи, мне следовало бы вкратце коснуться общего строения индикатора под углом зрения программиста, которого этот индикатор интересует, как будущая часть кода эксперта: Вполне естественно, что у реального индикатора может быть другое количество отображаемых индикаторных значений, другое количество...
 
ijonhson:

La questione rimane aperta nella funzione ontick IndicatorCounted() al primo controllo come sostituirla nell'Expert Advisor?

Non c'è bisogno di guardare tra le cime ad ogni spunta, non cambiano.

Nell'EA, controllare il ciclo all'apertura della barra e uscire dal ciclo non appena si trova il top.

   int count=Bars(Symbol,Period);
   for(int i=0; i<count; i++) {
     // ищем и запоминаем в переменную, если нашли break;
   }
 
ijonhson: La questione rimane aperta in ontick, la funzione IndicatorCounted() nel primo calcolo dà -1, cosa la sostituirà nell'Expert Advisor?

La funzione IndicatorCounted() era precedentemente usata negli indicatori con la funzione start(). I nuovi indicatori con OnCalculate() usano invece il secondo parametro prev_calculate. Li ho analizzati appositamente e ho scoperto che differiscono di 1. La differenza è piccola e mostrano quante barre sono già state calcolate. Se è 0 (o -1), allora tutte le barre devono essere calcolate. Questo accade all'avvio dell'indicatore, quando deve disegnare l'intera linea e salvare il risultato negli array del buffer. Ai tick successivi, solo i dati dell'ultima barra dovrebbero essere ricalcolati. Pertanto, ciò che viene fatto al valore zero (o -1) dovrebbe essere posto in OnInit() dell'EA. Il resto - molto poco - dovrebbe essere messo in OnTick()

 
YarTrade:

Grazie. Ci lavorerò. Non ho letto nulla nel libro di testo sul tipo lungo per qualche motivo.

Dovete mettere il cursore su long int o short (o qualsiasi altra parola della lingua) e premere F1.

 
ijonhson:

Grazie mille, ma per quanto ho capito dalla descrizione della funzione, essa eseguirà tutto il codice dell'indicatore per ottenere un valore, nel posto che ho specificato, cioè, per ottenere tutti i top avrò bisogno di calcolare il codice dell'indicatore per l'ennesima volta (passare attraverso tutte le barre una per una), ma ho bisogno di confrontare l'ordine dei top di questo indicatore su diversi timeframe.

E poi devi cercare manualmente le cime

Questo è assolutamente sbagliato! Tutte le barre dell'indicatore, quando vengono chiamate dall'Expert Advisor usando iCustom(), vengono ricalcolate solo una volta! Tutte le seguenti chiamate dell'indicatore lavorano con i risultati già calcolati, solo le barre non calcolate dalla chiamata precedente vengono ricalcolate. Per esempio, quando si chiama l'indicatore di periodo M15 dal grafico H1 su ogni nuova barra, risulta che 4 barre di 15 minuti non vengono ricalcolate dalla chiamata all'indicatore. Quindi, solo queste 4 barre saranno ricalcolate.

Anche se facciamo un ciclo attraverso la sequenza di barre da 0 a xxx, l'indicatore sarà ricalcolato solo una volta alla prima chiamata. Tutte le chiamate seguenti non eseguiranno alcun ricalcolo.

 
ijonhson:

Ho scavatohttps://www.mql5.com/ru/articles/1456, ci darò un'occhiata, ma ho pensato che ci fosse un modo più semplice

Questo è un cattivo esempio. Ha già dieci anni!!! Il linguaggio è già cambiato in meglio.

Motivazione: