La ligne :
if(period<=1 || rates_total-begin<period) return(0);
doit être une égalité non stricte :
if(period<1 || rates_total-begin<period) return(0);Sinon, si, par exemple, vous compilez le code de livraison MACD.mq5 et que vous réglez InpSignalSMA=1, la ligne Signal sera égale à zéro, alors qu'elle devrait être égale à la ligne MACD.
Pourquoi avez-vous besoin du dernier paramètre weightsum dans
int LinearWeightedMAOnBuffer(const int rates_total,const int prev_calculated,const int begin,const int period,const double& price[],double& buffer[],int &weightsum)
alors que les 3 autres fonctions n'en disposent pas. Si elle est toujours nécessaire, comment l'utiliser lors de l'initialisation de la variable externe weightsum=0, les autres fonctions fonctionnent de travers et génèrent l'erreur de division par zéro.
Pourquoi avez-vous besoin du dernier paramètre weightsum dans
int LinearWeightedMAOnBuffer(const int rates_total,const int prev_calculated,const int begin,const int period,const double& price[],double& buffer[],int &weightsum)
alors que les 3 autres fonctions n'en disposent pas. Si elle est encore nécessaire, comment l'utiliser lors de l'initialisation de la variable externe weightsum=0, les autres fonctions fonctionnent de travers et génèrent l'erreur de division par zéro.
Dans un indicateur similaire Custom Moving Average.mq5, fourni avec le terminal, elle est déclarée à l'intérieur de la fonction :
static int weightsum;
comme statique, c'est-à-dire qu'elle ne sera pas réinitialisée à chaque nouveau calcul de l'indicateur. Dans les indicateurs static int weightsum - ne se croisent pas, car ce sont des fils différents et ils ont leurs propres variables.
Mais je suppose que si nous comptons 2 ou plusieurs LWMA (exécutées par l'Expert Advisor) avec des périodes différentes, alors weightsum devrait être différent pour chacun, et non 1 pour tous en déclarant static à l'intérieur de la fonction.
Ainsi, pour chaque LWMA, nous devons avoir notre propre variable globale, que nous passerons à LinearWeightedMAOnBuffer(),
Par exemple, s'il y a 2 LWMA, les variables suivantes doivent être déclarées globalement
int weightsum1 ;
int weightsum2 ;
et vous devez ensuite les transmettre à la fonction.
Si j'ai mal compris, veuillez me corriger.
Ainsi, pour chaque LWMA, nous devons disposer d'une variable globale que nous transmettrons à LinearWeightedMAOnBuffer(),
Par exemple, s'il y a 2 LWMA, il faut déclarer globalement
int weightsum1 ;
int weightsum2 ;
et vous devez ensuite les transmettre à la fonction.
Dans la fonction ExponentiaMA, je ne comprends pas très bien la signification de la saisie du 3ème paramètre prev_value. Il est clair que dans une formule pure de calcul de la moyenne, vous avez besoin de la valeur de la période précédente, mais à mon avis, la fonction serait plus claire pour le commun des mortels si elle comptait cette valeur en interne et si seulement 3 données étaient entrées dans la fonction comme pour SimpleMA.
Tout à fait d'accord ! La façon de l'utiliser n'est pas claire. Finalement, j'ai choisi ExponentialMAOnBuffer parce que je ne comprenais pas où prendre prev_value. Ces fonctions sont nécessaires non pas pour appeler un indicateur externe à partir du conseiller expert, mais pour lire tout ce qui se trouve à l'intérieur. Le développeur a suggéré quoi ?
Cela me rappelle une citation du dessin animé "Prostokvashino" - "Pour vendre quelque chose dont vous n'avez pas besoin, vous devez d'abord acheter quelque chose dont vous n'avez pas besoin, et nous n'avons pas d'argent".
Je suis tout à fait d'accord ! La façon de l'utiliser n'est pas claire. Finalement, j'ai choisi ExponentialMAOnBuffer, parce que je ne comprenais pas où prendre prev_value. Ces fonctions sont nécessaires non pas pour appeler un indicateur externe à partir du conseiller expert, mais pour lire tout ce qui se trouve à l'intérieur. Qu'a suggéré le développeur ?
Cela me rappelle une citation du dessin animé "Prostokvashino" - "Pour vendre quelque chose dont vous n'avez pas besoin, vous devez d'abord acheter quelque chose dont vous n'avez pas besoin, et nous n'avons pas d'argent".
Oui, je suis d'accord. Il en va de même :
//+------------------------------------------------------------------+ //| Moyenne mobile lissée| //+------------------------------------------------------------------+ double SmoothedMA(const int position,const int period,const double prev_value,const double &price[]) { double result=0.0; //--- période de contrôle 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); }
La façon dont le code en jaune est calculé n'a pas d'importance. Le résultat sera toujours une chaîne verte. Et cela se trouve dans les bibliothèques standard de MT5 !
Améliorez la fonction, sinon elle est inutile. Dans MQL5, c'est très utile lorsque vous avez besoin de calculer les valeurs MA sur plusieurs instruments. Et on ne sait pas à l'avance lesquels. Vous ne pouvez pas former les poignées MA de tous les instruments à partir de la vue d'ensemble du marché !
Je suis tout à fait d'accord ! La façon de l'utiliser n'est pas claire. Finalement, j'ai choisi ExponentialMAOnBuffer, parce que je ne comprenais pas où prendre prev_value. Ces fonctions sont nécessaires non pas pour appeler un indicateur externe à partir du conseiller expert, mais pour lire tout ce qui se trouve à l'intérieur. Qu'a suggéré le développeur ?
Cela me rappelle une citation du dessin animé "Prostokvashino" - "Pour vendre quelque chose dont vous n'avez pas besoin, vous devez d'abord acheter quelque chose dont vous n'avez pas besoin, et nous n'avons pas d'argent".
Oui, je vous rejoins. Il en va de même pour :
La façon dont le code surligné en jaune est calculé n'a pas d'importance. Le résultat sera toujours une chaîne verte. Et ceci dans les bibliothèques standard de MT5 ! Yep !
Améliorez la fonction, sinon elle est inutile. Dans MQL5, c'est très utile lorsque vous avez besoin de calculer les valeurs MA sur plusieurs instruments. Et on ne sait pas à l'avance lesquels. Vous ne pouvez pas former les poignées MA de tous les instruments à partir de la vue d'ensemble du marché !
Vous pouvez faire une recherche dans CodeBase et y regarder. Je ne suis pas le seul à avoir utilisé cette bibliothèque...
Excusez-moi, qu'est-ce que la variable "position" ?
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 ; //--- période de contrôle if (period> 0 && period<=(position+ 1 )) { for ( int i= 0 ; i<period; i++) result+=price[position-i]; result/=period; } return (result); }
Bonjour
Est-ce que c'est plus clair comme ça ?
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
MovingAverages:
La bibliothèque MovingAverages contient des fonctions pour le calcul de différents types de moyennes mobiles.
Auteur : MetaQuotes