Questions d'un "mannequin - page 65

 
x100intraday:

Lorsque j'appelle ma fonction, dois-je passer le tableau par référence, par pointeur ou autre chose ?

Lisez la section sur le passage de paramètres par valeur et par référence :

Référence MQL5 / Notions de base du langage / Fonctions / Passage de paramètres

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5
 
Yedelkin:

Lisez la section du manuel de référence sur le passage de paramètres par valeur et par référence :

Référence MQL5 / Notions de base du langage / Fonctions / Passage de paramètres

En fait, j'en viens et les erreurs de compilation que j'ai mentionnées dans mon message précédent se sont produites après avoir lu la section ci-dessus.

Maintenant que je l'ai relu attentivement, tout est question de constance et de l'endroit où la mettre.

Merci, j'ai trouvé la solution.

 
x100intraday:

DansOnCalculate, je peux facilement utiliser des éléments de tableau comme high par index. Est-il également possible d'accéder aux éléments d'index de ce tableau dans ExtFunc ? Lorsque j'appelle ma fonction, dois-je passer l'argument tableau par référence, par pointeur ou autre chose ? Jusqu'à présent, j'ai réussi à réduire les messages d'erreur à : "'high' - la conversion des paramètres n'est pas autorisée" et "'high' - une variable constante ne peut être passée comme référence" concernant la même ligne de mon appel de fonction avec l'argument tableau de OnCalculate. Est-ce sans espoir ou existe-t-il une solution ?

Jusqu'à présent, dans OnCalculate, j'ai eu recours à la copie des valeurs élevées dans un autre tableau:

et ensuite utiliser CopyOfHigh dans ExtFunc au lieu d'utiliser directement high-array.

Il vous suffit de passer le tableau à votre fonction par référence

bool ExtFunc (string str, int P, int i, double & high[])
  {
   if (high[i] < high[i-1]) return(false);
   return(true);   
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i=0;
   if ExtFunc("s",60,i,high) == 1)
     Buffer[i] = high[i];
  }
 

Salutations à tous !

Que signifie l'avertissement :

perte éventuelle de données due à la conversion de type expert.mq5

lors de sa compilation ? Ça dit ceci :

   string Symb="EURJPY";
   int DIGITS = SymbolInfoInteger(Symb,SYMBOL_DIGITS);

Qu'est-ce qu'il y a ?

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
sergey1294:

Il suffit de passer le tableau à votre fonction par référence

Pas exactement :

bool ExtFunc (string str, int P, int i, const double & high[])
  {
   if (high[i] < high[i-1]) return(false);
   return(true);   
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i=0;
   if ExtFunc("s",60,i,high) == 1)
     Buffer[i] = high[i];
  }
 
RomanS:

Salutations à tous !

Que signifie l'avertissement :

perte éventuelle de données due à la conversion de type expert.mq5

lors de sa compilation ? Ça dit ceci :

Qu'est-ce qu'il y a ?

La fonctionSymbolInfoInteger() renvoie une valeur de type long (voir Référence), alors que DIGITS est déclaré comme int. Il s'agit d'une conversion de type implicite. Voir "Conversion de type".
 
RomanS:

Ce que signifie l'avertissement :

perte éventuelle de données due à la conversion de type

La signification de ce message varie en fonction du contexte dans lequel il est considéré.

Par exemple :

1. "Faites une conversion de type explicite !"

   int DIGITS = (int) SymbolInfoInteger(Symb,SYMBOL_DIGITS);

2. "Possible data twitching with implicit type conversion." // C'est une traduction littérale.

Cela est compréhensible, puisque le type long renvoyé par la fonction a une taille plus grande et couvre une plus large gamme de valeurs.

Une autre option qui me vient à l'esprit le plus souvent ces derniers temps :

3. "Le personnel de MetaQuotes ne comprend pas à quel point il serait cool, attrayant et efficace d'apprendre si les messages d'erreur et les avertissements du compilateur mql5 étaient donnés dans la langue maternelle de l'utilisateur."

 
MetaDriver:

... combien il serait cool, attrayant et efficace d'apprendre si les messages d'erreur et les avertissements du compilateur mql5 étaient donnés dans la langue maternelle de l'utilisateur".

Oui, ça ne serait pas mal. Bien que je sois personnellement déjà un peu doué en anglais, et que les traducteurs ne manquent pas de nos jours, mais là encore, cela prend un temps précieux, qui n'est pas si important. Certaines personnes n'en ont pas assez pour utiliser un traducteur pour un sujet aussi compliqué que le trading sur les marchés financiers + la programmation. MetaTrader 5 est une plateforme multi-langues. J'aimerais que les messages et les commentaires dans les exemples d'aide (nous les rencontrons parfois) soient dans la langue qui a été sélectionnée dans le terminal.
 

Je soupçonne que si l'indicateur est activé par iCustom, il est calculé à chaque tick. Et il ne dépend pas des appels qui lui sont adressés par le biais du CopyBuffer. Est-ce correct ?

Si c'est correct, est-il possible de désactiver le calcul de l'indicateur et de l'activer uniquement avant d'appeler le CopyBuffer ?

 
masharov:

Je soupçonne que si l'indicateur est activé par iCustom, il est calculé à chaque tick. Et il ne dépend pas des appels qui lui sont adressés par le biais du CopyBuffer. Est-ce correct ?

Cela dépend de la logique de l'indicateur personnalisé. En fait, il peut recalculer ses valeurs une fois par jour, en sautant tous les autres tics. C'est à dire, selon la volonté de l'auteur.

masharov:

Si c'est le cas, est-il possible de désactiver le recalcul de l'indicateur et de l'activer uniquement avant d'appeler le CopyBuffer ?

En fait, certaines personnes essaient d'utiliser cette approche monstre : créer une copie de l'indicateur via iCustom, copier les données requises, supprimer la copie de l'indicateur. La procédure est répétée si nécessaire.

Il y a aussi la fonction OnTimer(), je n'ai pas travaillé avec elle moi-même, mais peut-être pouvez-vous l'adapter à votre tâche.