Dato che stiamo parlando della velocità di calcolo e non della differenza di prestazioni dell'algoritmo, dovremmo confrontare funzioni semplici. Gli indicatori allegati sono ancora indicatori, la cui validità di calcolo è il punto del contendere qui. Dovremmo prendere una semplice funzione e implementarla in due modi: come indicatore personalizzato e come funzione da chiamare nel codice. Ho già fatto e scritto su questo - Sullavelocità di calcolo degli indicatori in MQL4.
Vedo due differenze negli esempi: test è chiamato come una funzione (piuttosto che inserito direttamente nel codice) e il contenuto di test è più povero (nessuna gestione di array). Quindi, la risposta alla domanda se iCustom debba essere usato sembra ancora dipendente dalla situazione. P.S. Nel mio esempio non c'è una differenza così essenziale nel numero di operazioni per due varianti - il "codice di servizio" funziona una volta sola, e i cicli sono gli stessi.
1. Lo stile di programmazione procedurale è secondo solo alla programmazione modulare e orientata agli oggetti. Quindi, mettere l'algoritmo di calcolo in una funzione separata è un passo logico.
E perché dovreste lavorare con gli array in una funzione integrata? Stiamo parlando della differenza nel costo della chiamata di una funzione personalizzata incorporata nel codice e una funzione esterna chiamata attraverso iCustom().
Rosh: 1. Lo stile di programmazione procedurale è secondo solo alla programmazione modulare e orientata agli oggetti. Quindi, mettere l'algoritmo di calcolo in una funzione separata è un passo logico.
E perché dovreste lavorare con gli array in una funzione integrata? Stiamo parlando della differenza nel costo della chiamata di una funzione personalizzata incorporata nel codice e una funzione esterna chiamata attraverso iCustom().
1. è esattamente l'efficienza risultante per i grandi progetti. È solo inferiore in termini di velocità. 2. Allo stesso modo. È l'efficienza finale che mi interessa. In caso di MQL, di solito è il tempo necessario per lo sviluppo più il tempo necessario per i test nel tester. Anche se i secondi extra di attesa del terminale per caricare il conto reale possono essere molto costosi. Voglio dire che i nervi, non tutti hanno la giusta visione del trading :)
Come potete vedere, l'uso di una funzione separata è giustificato - la differenza di tempo per un ciclo di miliardi di passaggi è solo un secondo. Ma è molto più facile sviluppare il codice!
Una delle implementazioni di regressione lineare, il grado del polinomio è 20, il numero di punti di calcolo e l'offset del punto di partenza è impostato...
l'uscita è fatta usando un canale la cui profondità è impostata in punti... ad una profondità di 0 viene emessa solo la curva di regressione stessa
Ecco l'indicatore test.mq4
Ecco lo script che misura la velocità di calcolo dell'algoritmo di prova
attraverso iCustom() e attraverso la chiamata test().
P.S. Nel mio esempio non c'è una differenza così essenziale nel numero di operazioni per due varianti - il "codice di servizio" funziona una volta sola, e i cicli sono gli stessi.
E perché dovreste lavorare con gli array in una funzione integrata? Stiamo parlando della differenza nel costo della chiamata di una funzione personalizzata incorporata nel codice e una funzione esterna chiamata attraverso iCustom().
1. Lo stile di programmazione procedurale è secondo solo alla programmazione modulare e orientata agli oggetti. Quindi, mettere l'algoritmo di calcolo in una funzione separata è un passo logico.
E perché dovreste lavorare con gli array in una funzione integrata? Stiamo parlando della differenza nel costo della chiamata di una funzione personalizzata incorporata nel codice e una funzione esterna chiamata attraverso iCustom().
2. Allo stesso modo. È l'efficienza finale che mi interessa. In caso di MQL, di solito è il tempo necessario per lo sviluppo più il tempo necessario per i test nel tester. Anche se i secondi extra di attesa del terminale per caricare il conto reale possono essere molto costosi. Voglio dire che i nervi, non tutti hanno la giusta visione del trading :)
Ed ecco i risultati dello script.
Come potete vedere, l'uso di una funzione separata è giustificato - la differenza di tempo per un ciclo di miliardi di passaggi è solo un secondo. Ma è molto più facile sviluppare il codice!
Qui c'è di più su come trovare i parametri di una regressione lineare. Preso da qui - Canale di regressione lineare
Ed ecco una funzione che implementa l'algoritmo descritto (forse qualcuno può usarla):
La funzione si chiama così:
C'èqualcosa che non va nel regno danese.
Ho dovuto cancellare il mio post precedente. C'è un errore nell'algoritmo.
So che molte persone usano questa procedura ma .... non riesce a trovare il motivo dell'errore AIUTATEMI.
Ecco lo script. I coefficienti A e B sono calcolati due volte.
Il risultato è il seguente
intercetta = -3.33333333 pendenza = 5.00000000
intercetta = -1102.16914108 pendenza = 0.00000091
Ed ecco lo stesso, ma calcolato in MathCad. In blu i risultati corrispondono, in rosso no (.
In Mathcad queste sono funzioni integrate, quindi molto probabilmente un errore in MT4, ma dove?
C'èqualcosa che non va nel regno danese.
Ho dovuto cancellare il mio post precedente. C'è un errore nell'algoritmo.
So che molte persone usano questa procedura ma .... non riesce a trovare il motivo dell'errore AIUTATEMI.
Ecco lo script. I coefficienti A e B sono calcolati due volte.
Il risultato è il seguente
intercetta = -3.33333333 pendenza = 5.00000000
intercetta = -1102.16914108 pendenza = 0.00000091
Ed ecco lo stesso, ma calcolato in MathCad. In blu i risultati corrispondono, in rosso no (.
Questa è una funzione integrata in Mathcad, quindi molto probabilmente un errore in MT4, ma dove?
Ecco cosa mostra Excel 2007
Quindi, potrebbe essere necessario controllare Matcad.
Una delle implementazioni di regressione lineare, il grado del polinomio è 20, il numero di punti di calcolo e l'offset del punto di partenza è impostato...
l'uscita è fatta usando un canale la cui profondità è impostata in punti... ad una profondità di 0 viene emessa solo la curva di regressione stessa