Linea:
if(period<=1 || rates_total-begin<period) return(0);
deve essere un'uguaglianza non rigida:
if(period<1 || rates_total-begin<period) return(0);Altrimenti, se ad esempio si compila il codice di consegna MACD.mq5 e si imposta InpSignalSMA=1, la linea Signal sarà uguale a zero, mentre dovrebbe essere uguale alla linea MACD.
Perché è necessario l'ultimo parametro weightsum in
int LinearWeightedMAOnBuffer(const int rates_total,const int prev_calculated,const int begin,const int period,const double& price[],double& buffer[],int &weightsum)
mentre le altre 3 funzioni non ce l'hanno. Se è ancora necessario, come usarlo quando si inizializza la variabile esterna weightsum=0, le altre funzioni lavorano in modo scorretto e generano l'errore di divisione per zero.
Perché è necessario l'ultimo parametro weightsum in
int LinearWeightedMAOnBuffer(const int rates_total,const int prev_calculated,const int begin,const int period,const double& price[],double& buffer[],int &weightsum)
mentre le altre 3 funzioni non ce l'hanno. Se è ancora necessaria, come utilizzarla quando si inizializza la variabile esterna weightsum=0, le altre funzioni lavorano in modo scorretto e generano l'errore di divisione per zero.
In un indicatore simile Custom Moving Average.mq5, fornito con il terminale, è dichiarato all'interno della funzione:
static int weightsum;
come statico, cioè non verrà reimpostato a ogni nuovo ricalcolo dell'indicatore. Negli indicatori statici int weightsum - non si incrociano, perché sono thread diversi e hanno le loro variabili.
Ma suppongo che se contiamo 2 o più LWMA (eseguiti dall'Expert Advisor) con periodi diversi, allora weightsum dovrebbe essere diverso per ciascuno, e non 1 per tutti dichiarando static all'interno della funzione.
Pertanto, per ogni LWMA, dobbiamo avere una nostra variabile globale, che passeremo a LinearWeightedMAOnBuffer(),
Ad esempio, se ci sono 2 LWMA, le seguenti variabili devono essere dichiarate a livello globale
int weightsum1;
int weightsum2;
e poi è necessario passarle alla funzione.
Se ho capito male, vi prego di correggermi.
Pertanto, per ogni LWMA è necessario disporre di una variabile globale, che verrà passata a LinearWeightedMAOnBuffer(),
Ad esempio, se ci sono 2 LWMA, si dovrà dichiarare a livello globale
int weightsum1;
int weightsum2;
e poi è necessario passarli alla funzione.
Nella funzione ExponentiaMA non capisco bene il significato dell'inserimento del terzo parametro prev_value. È chiaro che in una formula pura per il calcolo della media è necessario il valore del periodo precedente, ma a mio parere la funzione sarebbe più chiara per la persona media se contasse questo valore internamente e se si dovessero inserire solo 3 dati nella funzione come per SimpleMA.
Assolutamente d'accordo! Non è chiaro come utilizzarla. Alla fine ho scelto ExponentialMAOnBuffer perché non capivo dove prendere prev_value. Queste funzioni sono necessarie non per chiamare un indicatore esterno dall'Expert Advisor, ma per leggere tutto quello che c'è dentro. Lo sviluppatore ha suggerito cosa?
Mi ricorda una citazione dal cartone animato "Prostokvashino": "Per vendere qualcosa che non ti serve, devi prima comprare qualcosa che non ti serve, e noi non abbiamo soldi".
Sono assolutamente d'accordo! Non è chiaro come usarlo. Alla fine ho scelto ExponentialMAOnBuffer, perché non capivo dove prendere prev_value. Queste funzioni sono necessarie non per chiamare un indicatore esterno dall'Expert Advisor, ma per leggere tutto quello che c'è dentro. Lo sviluppatore ha suggerito cosa?
Mi ricorda una citazione dal cartone animato "Prostokvashino": "Per vendere qualcosa che non ti serve, devi prima comprare qualcosa che non ti serve, e noi non abbiamo soldi".
Sì, sono d'accordo. Lo stesso vale per:
//+------------------------------------------------------------------+ //| Media mobile smussata| //+------------------------------------------------------------------+ double SmoothedMA(const int position,const int period,const double prev_value,const double &price[]) { double result=0.0; //--- controllare il periodo if(period>0 && period<=(position+1)) { if(position==period-1) { for(int i=0; i<period; i++) result+=price[position-i]; result/=period; } result=(prev_value*(period-1)+price[position])/period; } return(result); }
Non importa come viene calcolato il codice in giallo. Il risultato sarà comunque una stringa verde. E questo è nelle librerie standard di MT5! Sì!
Migliorate la funzione, altrimenti è inutile. In MQL5, è molto utile quando è necessario calcolare i valori MA su diversi strumenti. E non si sa in anticipo quali. Non è possibile formare le maniglie MA di tutti gli strumenti dalla panoramica del mercato!
Sono assolutamente d'accordo! Non è chiaro come usarlo. Alla fine ho scelto ExponentialMAOnBuffer, perché non capivo dove prendere prev_value. Queste funzioni sono necessarie non per chiamare un indicatore esterno dall'Expert Advisor, ma per leggere tutto quello che c'è dentro. Lo sviluppatore ha suggerito cosa?
Mi ricorda una citazione dal cartone animato "Prostokvashino": "Per vendere qualcosa che non ti serve, devi prima comprare qualcosa che non ti serve, e noi non abbiamo soldi".
Sì, mi associo. Lo stesso vale per:
Non importa come viene calcolato il codice evidenziato in giallo. Il risultato sarà comunque una stringa verde. E questo è nelle librerie standard di MT5! Sì!
Migliorate la funzione, altrimenti è inutile. In MQL5, è molto utile quando è necessario calcolare i valori MA su diversi strumenti. E non si sa in anticipo quali. Non è possibile formare le maniglie MA di tutti gli strumenti dalla panoramica del mercato!
Si può cercare nel CodeBase e guardare lì. Non sono l'unico ad aver utilizzato questa libreria...

Mi scusi, cos'è la variabile "posizione"?
double SimpleMA(const int position,const int period,const double &price[])
double SimpleMA( const int position, const int period, const double &price[]) { double result= 0.0 ; //--- controllare il periodo if (period> 0 && period<=(position+ 1 )) { for ( int i= 0 ; i<period; i++) result+=price[position-i]; result/=period; } return (result); }
Buongiorno
È più chiaro così?

- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
MovingAverages:
La libreria MovingAverages contiene funzioni per il calcolo di diversi tipi di medie mobili.
Autore: MetaQuotes