Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 159

 
hoz:

Il existe une fonction. Voici ses débuts :

Voici l'essentiel. Le deuxième paramètre formel de la fonction a une valeur par défaut de 0. Ainsi, d'après la documentation, je peux appeler cette fonction sans le deuxième paramètre, car il aura la valeur 0 par défaut.

Je l'appelle comme ça :

Le compilateur fronce les sourcils :

Pourquoi ?

Déplacez-le de la bibliothèque vers le code "que faites-vous ?". Si l'erreur disparaît, cela signifie qu'il y a un problème avec la connexion correcte de la bibliothèque dans le code wha-tam-do. Tout d'abord.

S'il ne disparaît pas, regardez quels paramètres sont passés à la fonction. Dans l'idée, il devrait y avoir un paramètre de type chaîne avec le nom de la paire de devises. Passez simplement Symbol()

 
artmedia70:

Déplacez-le de la bibliothèque au code wha-tam-do. Si l'erreur disparaît, cela signifie qu'il y a un problème avec la connexion correcte de la bibliothèque dans le code wha-tam-do. Tout d'abord.

S'il ne disparaît pas, regardez quels paramètres sont passés à la fonction. Dans l'idée, il devrait y avoir un paramètre de type chaîne avec le nom de la paire de devises. Passez simplement Symbol().



Ça aide vraiment. Je vais y réfléchir.

C'est trop bizarre. Pourquoi devrais-je chercher dans la bibliothèque si le passage des paramètres est correct ? L'erreur est clairement écrite. Ou n'y a-t-il rien de spécifique ? J'aurais juste aimé savoir ce qu'il fallait.

Cette fonction est empruntée, je la poste donc avec les contacts de l'auteur :

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Получаем торговую информацию по символу                                    |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
void fGet_MarketInfo (string fs_Symbol, int fi_Ticket = 0)
{
//----
         if (fs_Symbol != bs_Symbol || fi_Ticket < 0)
         {
                  if (fi_Ticket > 0)
                  {
                     bs_Symbol = OrderSymbol();
                  }
                  else
                  {
                     bs_Symbol = fs_Symbol;
                  }
                  if (bs_Symbol == Symbol())
                  {
                      bi_SymDigits = Digits;
                      bd_SymPoint = Point;
                  }
                  else
                  {
                      bi_SymDigits = MarketInfo (fs_Symbol, MODE_DIGITS);
                      bd_SymPoint = MarketInfo (fs_Symbol, MODE_POINT);
                  }
        if (bd_SymPoint == 0.0)
        {
           bd_SymPoint = fGet_Point (fs_Symbol);
        }
                  bd_ProfitMIN = NDP (ProfitMIN_Pips);
         }
         if (fi_Ticket > 0)
         {
            fGet_OrderDetails (fi_Ticket);
         }
    //---- Получаем текущие цены по инструменту
    RefreshRates();
    bda_Price[0] = NDD (fGet_TradePrice (0, bb_RealTrade, bs_Symbol));
    bda_Price[1] = NDD (fGet_TradePrice (1, bb_RealTrade, bs_Symbol));
    bd_Spread = NDD (bda_Price[1] - bda_Price[0]);
//----
}

C'est ainsi que je l'ai importé :

#import "hoz_Base@Library.ex4"
    double ND (double v);
    string DToS (double v);
    string DToSByLots (double v);
    void fGet_MarketInfo (string fs_Symbol, int fi_Ticket = 0);
#import

L'appel est maintenant comme ceci :

fGet_MarketInfo (fs_Symbol);

Comment résoudre de tels problèmes ?

 
hoz: Comment ces problèmes sont-ils résolus ?

Étudiez la documentation. Les bibliothèques compilées ne passent pas de paramètres par défaut - vous devez passer TOUS les paramètres lorsque vous appelez une fonction. Lisez-le attentivement. Extrait :

Comme les fonctions importées sont en dehors du module en cours de compilation, le compilateur ne peut pas vérifier que les paramètres passés sont corrects. Par conséquent, la composition et l'ordre des paramètres transmis aux fonctions importées doivent être décrits avec précision pour éviter les erreurs d'exécution. Les paramètres passés aux fonctions importées (à la fois des modules EX4 et DLL) ne peuvent pas avoir de valeurs par défaut.
 
TarasBY:

Aucun paramètre par défaut n'est transmis aux bibliothèques compilées - vous devez transmettre TOUS les paramètres lorsque vous appelez une fonction. Lisez-le attentivement. Extrait :

Comme les fonctions importées sont en dehors du module en cours de compilation, le compilateur ne peut pas vérifier que les paramètres passés sont corrects. Par conséquent, la composition et l'ordre des paramètres transmis aux fonctions importées doivent être décrits avec précision pour éviter les erreurs d'exécution. Les paramètres passés aux fonctions importées (à la fois des modules EX4 et DLL) ne peuvent pas avoir de valeurs par défaut.

Ah, c'est ça. Vivre et apprendre ! Merci, je vais garder ça en tête.
 

Lors de l'exécution de l'optimisation dans MT4, nous avons besoin de recevoir des informations sur une passe dans l'onglet "Résultats de l'optimisation" similaires à celles générées par une seule passe dans l'onglet "Rapport".

Comment cela peut-il être mis en œuvre ?

 

J'ai décidé de me familiariser avec la bibliothèque. J'ai pris une partie du code de mon indicateur et je l'ai mise dans la fonction, et j'ai multiplié cette fonction et l'ai collée dans deux fichiers de bibliothèque.

J'ai nommé le premier "indi.mqh" et le second simplement "djo.mq4".

int countbars(int& hist, int obrax, bool tikk)
{ 
 int z=0;
 static int PreBars=0; 
 static datetime BarTime=0;
 if (Bars == PreBars && tikk==false)return(-1);
 if (Bars < hist+obrax)  
 {
  if (Bars-obrax<=1) {Alert (" Недостатьньо історії");return(-1);}
  hist=Bars-obrax;
 }
 
 if (Bars-PreBars == 0 && BarTime==Time[0] && tikk==true) return(0);
 else  
 {
  if (Bars-PreBars == 1 && BarTime==Time[1]) z=1;
  else  z=hist;
 }
 PreBars = Bars;  
 BarTime=Time[0];
 return (z);
}

Pour ce qui est de la première, tout fonctionne comme prévu ;

 include <indi.mqh>

en remplaçant le premier par le second et en accédant au second par une méthode :

#import "djo.ex4"  int countbars(int& hist, int obrax, bool tikk);  #import

Mais rien ne fonctionne du tout, pas même les alertes - nulle part après le démarrage. Et à l'instant, le terminal s'est fermé tout seul ;))

Comme je suppose que toutes les constantes sont réinitialisées à chaque fois que j'accède à la fonction importée?

Où puis-je trouver des informations détaillées sur l'importation de mql4, les bogues qui ont été corrigés ou non, etc.

Merci, je vais dormir. ............

 
ALXIMIKS:

J'ai décidé de me familiariser avec la bibliothèque. J'ai pris une partie du code de mon indicateur et je l'ai mise dans la fonction, et j'ai multiplié cette fonction et l'ai collée dans deux fichiers de bibliothèque.

J'ai nommé le premier "indi.mqh" et le second simplement "djo.mq4".

Pour ce qui est de la première, tout fonctionne comme prévu ;

en remplaçant le premier par le second et en accédant au second par une méthode :

Mais rien ne fonctionne du tout, pas même les alertes - nulle part après le démarrage. Et à l'instant, le terminal s'est fermé tout seul ;))

Comme je suppose que toutes les constantes sont réinitialisées à chaque fois que j'accède à la fonction importée ?

Où puis-je trouver des informations détaillées sur l'importation de mql4, les bogues qui ont été corrigés ou non, etc.

Merci, je vais dormir. ............

Il est possible de passer des paramètres par référence. Dans ce cas, la modification de ces paramètres affectera les variables correspondantes dans la fonction appelée passée par référence. Vous ne pouvez pas transmettre des éléments de tableaux par référence. Les paramètres peuvent être passés par référence uniquement dans les limites d'un seul module, cette possibilité n'est pas offerte aux fonctions de bibliothèque. Pour spécifier que le paramètre est transmis par référence, le modificateur & doit être placé après le type de données. Et voici d'autres expériences.
 
Dites-moi. Je reçois un message sonore lorsque je franchis deux moyennes mobiles. Lorsqu'il est ouvert, ce message sonore est répété autant de fois qu'il y a eu de traversées dans l'histoire. Question. Comment puis-je faire en sorte qu'il produise un message uniquement pour les signaux qui ont été générés dans le temps présent. C'est-à-dire, seulement au moment et le signal qui a été reçu littéralement au moment...
 
Zolotai:
Dites-moi. Je reçois un message sonore lorsque je franchis deux moyennes mobiles. Lorsqu'il est ouvert, ce message sonore est répété autant de fois qu'il y a eu de traversées dans l'histoire. Question. Comment puis-je faire en sorte qu'il produise un message uniquement pour les signaux qui ont été générés dans le temps présent. C'est-à-dire, seulement au moment et le signal qui a été reçu littéralement au moment...
A l'ouverture de quoi ? C'est comme un indicateur. Il existe de nombreuses solutions. Tout dépend du code.
 
artmedia70:
En ouvrant quoi ? C'est comme un indicateur. Il existe de nombreuses solutions. Tout dépend du code.


Ça n'a rien à voir avec le code. J'ai juste besoin de la bonne condition. La question est de savoir si nous pouvons connaître l'heure de la barre actuelle. Comment puis-je connaître l'heure de la barre ?
Raison: