Un consigliere senza indicatore, è possibile? - pagina 3

 
Алексей Тарабанов:

Un pericoloso malinteso.

Qual è il malinteso?
Se avete bisogno di un array di storia, fatelo. Se non ne hai bisogno, non farlo.
Personalmente, faccio per lo più un array, dato che uso spesso test interni, ecc. Ma il mio array è raramente uguale al numero di barre del grafico. A volte meno, a volte più.
Prendiamo ad esempio un comune zigzag. Ci sono meno del 10% di elementi dell'array informativo e il resto è vuoto, ma l'intero array è enumerato. Allora, è efficiente? Ovviamente, è più corretto usare un array più corto di strutture con valore e indice.
 

Ma il mio array raramente è uguale al numero di barre del grafico. A volte meno, a volte più.

Quello che mi preoccupa è che potrebbe essere più grande.

 
Nikolai Semko:
In primo luogo, chi vi impedisce di avere una matrice di dati interna, la stessa del buffer dell'indicatore, e di riempirla allo stesso modo.
In secondo luogo, perché un consulente dovrebbe avere bisogno di tutta la storia. Di regola, l'ultimo e forse il penultimo valore. E non abbiamo bisogno di tutti questi indicatori.

E cosa è più ragionevole in termini di risorse, calcolare in un indicatore o calcolare lo stesso nell'Expert Advisor, che è più veloce?

 
Алексей Тарабанов:

Ma il mio array raramente è uguale al numero di barre del grafico. A volte meno, a volte più.

Quello che mi preoccupa è che potrebbe essere più grande.

Ti stai preoccupando invano, Alexey.
Ci possono essere situazioni in cui questo è necessario, gugilen.
Per esempio.
Io uso per lo più dati di barre di minuti o tick, indipendentemente dal TF.
È molto sbagliato e dispendioso quando il tuo Expert Advisor deve ricalcolare tutti gli indicatori buffer ogni volta che cambi TF. Non voglio che mi succeda questo.
Quindi, se sono su un timeframe settimanale, il mio array sarà ovviamente molto più grande del numero di barre nel grafico.
E non parlo nemmeno delle zecche.
Come regola, ho diversi array di strutture e array di indici per aumentare la produttività e risparmiare memoria. Le loro dimensioni possono essere diverse.
In generale, quando usi gli indicatori tramite iCustom, sei molto limitato in molte cose.
Sei rigidamente legato alla dimensione dell'array pari al numero di barre nel grafico. E se avete un numero illimitato di persone in piedi?
Siete legati a un solo tipo di doppio. E non si può nemmeno sognare di avere una serie di strutture.
È persino ridicolo con gli indicatori di colore. 8 byte per barra è ovviamente troppo.
I buffer degli indicatori sono molto dispendiosi in termini di consumo di memoria.
Inoltre, si ha accesso ai buffer solo attraverso CopyBuffer, anche se si ha bisogno solo di un'ultima barra. In ogni caso, questa operazione è molto più lenta del semplice accesso agli elementi dell'array.

Naturalmente, se state usando indicatori standard integrati come iMA, non dovete prendervela troppo. Ma tuttavia penso che qui stiamo parlando di indicatori personalizzati. Non credo che i professionisti usino gli indicatori integrati per il trading reale.


 
VVT:

E cosa è più conveniente in termini di risparmio di risorse, contare in un indicatore o contare lo stesso in un Expert Advisor, che è più veloce?

Ho risposto parzialmente nel post precedente.
Questa è una domanda molto lunga ed è meglio chiedere agli sviluppatori, specialmente a quelli che sono responsabili del multithreading.

Non sono uno specialista in questa questione. Ma posso condividere i miei pensieri. Se mi sbaglio su qualcosa, per favore correggetemi se lo sapete bene.
Come sapete, ogni Expert Advisor lavora in un thread separato, mentre tutti gli indicatori di un simbolo (anche in diversi grafici) lavorano in un thread comune.
Pertanto, possiamo supporre che se il simbolo non è sovraccarico di indicatori, il lavoro dell'Expert Advisor e il calcolo del buffer degli indicatori verranno eseguiti in parallelo e anche in diversi core della CPU, se lo scheduler del sistema operativo è fortunato a trovare un core di processore separato per il thread del vostro indicatore. È abbastanza possibile che si ottengano risultati più efficienti in tale schema. Non so quanto sia probabile ottenere un core separato per un thread indicatore, ma penso che non sia molto alto.
Ma ci sono nozioni come la velocità di commutazione del contesto del thread e molte altre sottigliezze dell'interazione di più thread. So che la velocità di commutazione di contesto dei thread è molto alta in confronto ai processi, ma non è gratuita.
Inoltre, come ho detto prima l'accesso all'elemento del buffer indicatore attraverso CopyBuffer sarà più costoso dell'accesso a un elemento dell'array tramite il suo indice.
Anche la capacità di ottimizzare icalcoli non necessari, la dimensione degli array interni e la loro indicizzazioneall'interno dell'Expert Advisor fornisce un grande potenziale per ridurre il consumo di risorse.
Naturalmente, avrete bisogno di esperimenti e test adeguati per dare una risposta completa alla vostra domanda. Ma sono ancora più propenso a credere che la performance media sia migliore - tutto in un thread di Expert Advisor.

 
Dmitry Fedoseev:

Ed eseguire ogni volta in un ciclo? L'EMA sarebbe ancora più interessante.

Utilizzare l'algoritmo a passaggio singolo per calcolare la media ponderataesponenzialmente

ma = (1 - a) * prezzo + a * ma

 
Dmitry Fedoseev:

Un indicatore normale conta tutte le barre solo all'inizio, e poi conta 1 barra dopo. Nell'indicatore è facile fare SMA in modo tale che anche al calcolo di 1 barra non c'è bisogno di ciclare attraverso l'intero periodo di MA.

Naturalmente, possiamo creare buffer di array nell'Expert Advisor. Ma per cosa, se c'è un elemento appositamente progettato - indicatori?

Allora qual è il problema? È apparso un nuovo bar - lo abbiamo considerato.

 
anim:
Voglio che l'Expert Advisor non sia legato a un indicatore.Calcolerebbe le barre e prenderebbe i segnali di acquisto/vendita internamente. È possibile?
Naturalmente è possibile, se si implementa la formula dell'indicatore nell'Expert Advisor!
 
Vladimir Mikhailov:

Utilizzare l'algoritmo one-pass per calcolare una media pesataesponenzialmente

ma = (1 - a) * prezzo + a * ma

Questo non è corretto!

Corretto è:

ma[i] = (1 - a) * prezzo + a * ma[i+1]

cioè abbiamo bisogno di un array la cui profondità necessaria dipende dal parametro a.

Altrimenti sarà un'assurdità totale, almeno finché dura il processo di transizione, che può richiedere molto tempo, a seconda del parametro a.

È facile controllare tutto questo confrontando le letture dell'indicatore con i calcoli corrispondenti nell'EA.
 
Dmitry Fedoseev:

Naturalmente, è possibile creare buffer da un array anche nell'Expert Advisor... Ma perché, quando c'è un elemento appositamente progettato - gli indicatori?

Ho un problema con i segnali saltati da un indicatore, nessuno ha dato una raccomandazione

https://www.mql5.com/ru/forum/365021

le stampe mostrano che l'evento proviene dall'indicatore, controlla una nuova barra, e ci sono i dati della barra precedente, non quella nuova

Ho testato in 3 terminali allo stesso tempo, entrambe le omissioni erano in uno dei tre terminali, può essere che sia casuale

В моих ТС пропуск сигнала
В моих ТС пропуск сигнала
  • 2021.03.16
  • www.mql5.com
Не люблю создавать новые темы, Небольшие исходные данные: Советник работает в OnChatEvent, 7 символов, циклов нет, прямая передача номера за минусо...