Fonctions utiles de KimIV - page 115

 

Bonjour Andrey !

  1. Il existe déjà trois fonctions pour le prix d'ouverture :
  2. Il existe également des fonctions pour les billets. Il y en a deux :
Andrey, ces fonctions ont tout ce dont vous avez besoin, sauf la sélection par taille de lot. Je ferai dans un futur proche d'autres fonctions dans lesquelles le prix ouvert et le ticket peuvent être obtenus par taille de lot.

 
KimIV:

Bonjour Andrey !

  1. Il existe déjà trois fonctions pour le prix d'ouverture :
  2. Il existe également des fonctions pour les billets. Il y en a deux :
Andrey, ces fonctions ont tout ce dont vous avez besoin, sauf la sélection par taille de lot. Je ferai dans un futur proche d'autres fonctions dans lesquelles le prix ouvert et le ticket peuvent être obtenus par taille de lot.
Peut-être sont-elles redondantes pour moi et je dois me débarrasser de conditions inutiles, telles que : le prix de la prochaine position ouverte, la dernière position ouverte, la position la plus proche du marché. Et ça ne s'avère pas toujours correct. En outre, la compréhension de toutes ces subtilités sera plus rapide si nous les comparons correctement. Merci, je l'attends avec impatience.
 

La fonction GetOpenPriceByLot().

Cette fonction renvoie le prix d'ouverture d'une position ou d'un ordre par taille de lot. La sélection des positions à prendre en compte est spécifiée par des paramètres externes :

  • sy- Nom de l'instrument de marché. Si ce paramètre est défini, la fonction ne prendra en compte que les positions de l'instrument spécifié. La valeur par défaut"" signifie tout instrument de marché. La valeurNULL signifie l'instrument actuel.
  • op- Opération commerciale, position ou type d'ordre. Valeurs valides :OP_BUY,OP_SELL, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP ou-1. La valeur par défaut de-1 signifie toute opération commerciale.
  • mn- Identifiant d'une position ou d'un ordre, MagicNumber. La valeur par défaut de-1 signifie n'importe quel identifiant.
  • lo- Lot. La valeur par défaut0 signifie un lot quelconque.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 29.03.2013                                                     |
//|  Описание : Возвращает цену открытия позиции или ордера по размеру лота.   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          ( -1  - любая операция)                 |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//|    lo - лот                        (  0  - любой лот)                      |
//+----------------------------------------------------------------------------+
double GetOpenPriceByLot(string sy="", int op=-1, int mn=-1, double lo=0) {
  double p=0;
  int    i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if ((op<0 || OrderType()==op) && OrderType()<6) {
          if (lo==0 || lo==NormalizeLot(OrderLots())) p=OrderOpenPrice();
        }
      }
    }
  }
  return(p);
}
ZS. Vous trouverez ci-joint un script pour tester la fonctionGetOpenPriceByLot().
Dossiers :
 

La fonction GetTicketByLot().

Cette fonction renvoie le ticket d'une position ou d'un ordre par taille de lot. La sélection des positions à prendre en compte est spécifiée par des paramètres externes :

  • sy- Nom de l'instrument de marché. Si ce paramètre est défini, la fonction ne prendra en compte que les positions du symbole spécifié. La valeur par défaut"" signifie tout instrument de marché. La valeurNULL signifie l'instrument actuel.
  • op- Opération commerciale, position ou type d'ordre. Valeurs valides :OP_BUY,OP_SELL, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP ou-1. La valeur par défaut de-1 signifie toute opération commerciale.
  • mn- Identifiant d'une position ou d'un ordre, MagicNumber. La valeur par défaut de-1 signifie n'importe quel identifiant.
  • lo - Lot. La valeur par défaut 0 signifie un lot quelconque.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 29.03.2013                                                     |
//|  Описание : Возвращает тикет позиции или ордера по размеру лота.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          ( -1  - любая операция)                 |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//|    lo - лот                        (  0  - любой лот)                      |
//+----------------------------------------------------------------------------+
int GetTicketByLot(string sy="", int op=-1, int mn=-1, double lo=0) {
  int i, k=OrdersTotal(), t;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if ((op<0 || OrderType()==op) && OrderType()<6) {
          if (lo==0 || lo==NormalizeLot(OrderLots())) t=OrderTicket();
        }
      }
    }
  }
  return(t);
}

ZS. Vous trouverez ci-joint un script pour tester la fonction GetTicketByLot().


Dossiers :
 

Bonjour Igor !

Merci beaucoup pour les nouvelles fonctionnalités et pour avoir été si rapide. Tout est très bien. La fonction renvoie, par exemple, un ordre des billets par conditions, qui peuvent être définies par des variables externes ou vous ne pouvez pas les utiliser. Je ne suis pas très clair sur cette ligne là :

si ((op<0 || OrderType()==op) && (OrderType()>1 && OrderType()<6))

Nous vérifions ici la condition de l'instruction if, c'est-à-dire que si la variable externe <0, n'importe quel type de commande est disponible OU si nous écrivons, par exemple, OP_BUY dans l'appel de fonction, la sélection se fera parmi les commandes OP_BUY. Cette condition est claire, mais nous avons en outre une condition équivalente écrite par le biais de&& qui stipule queOrderType() doit être dans la plage des ordres en attente, c'est-à-dire de 1 à 5. Notre type OP_BUY n'est pas inclus dans cette gamme et, par conséquent, la condition de l'opérateur doit être fausse et le contrôle doit passer à l'opérateur qui suit l'opérateur if-else, c'est-à-dire qu'il m'est difficile de dire où, quelque part derrière la flèche du corps bouclé. Il me semble que nous devrions spécifier ici la condition des ordres au marché et une fonction distincte des ordres en attente du même type. C'est-à-dire que si je veux faire une sélection parmi les ordres de marché et que je ne connais pas son type exact, je prends la variable externe <0 mais j'adresse la fonction où les conditions de 0 à 1 sont spécifiées. Le même processus est appliqué aux ordres en attente. J'en suis donc venu à la conclusion que nous devrions utiliser une fonction différente pour chaque catégorie de types d'ordres lorsque nous utilisons cette condition utile.

J'ai également un problème de connexion à la bibliothèque. J'ai cherché et lu, mais la connexion donne une erreur lors de la compilation de l'EA que j'écris. Je n'ai pas encore le temps de m'en occuper, je veux écrire un Expert Advisor rentable plus rapidement, donc j'ai copié les trois bibliothèques nécessaires et les ai attachées après la fonction spéciale start(), et j'ai placé leurs variables globales dans les variables globales de l'EA et commenté les références à celles-ci. Ce n'est pas très pratique, mais ça marche.
 
00007:

Je ne suis pas très clair sur cette ligne là :

si ((op<0 || OrderType()==op) && (OrderType()>1 && OrderType()<6))

Merci ! Corrigé... Il s'agit d'une conséquence de la copie, c'est-à-dire de l'utilisation d'une préforme d'une autre fonction destinée à fonctionner uniquement avec des ordres à cours limité et des ordres stop.

00007:

J'ai également un problème avec la connexion des bibliothèques. J'ai cherché et lu, mais la connexion me donne une erreur lors de la compilation du conseiller expert que j'écris. Je n'ai pas le temps de le découvrir, et je veux écrire un Expert Advisor rentable plus rapidement, donc j'ai copié les trois bibliothèques nécessaires et les ai attachées après la fonction spéciale start(), et j'ai placé leurs variables globales dans les variables globales de l'EA et commenté les références à celles-ci. Ce n'est pas très pratique, mais ça marche.

À propos, je n'utilise pas mes propres bibliothèques sous forme de fichiers MQH. Je copie généralement les fonctions dont j'ai besoin dans mon EA, c'est-à-dire que mon EA standard prêt à l'emploi est un seul fichier MQ4. Tout ce dont j'ai besoin est dans ce fichier. Oui, il y a une certaine répétitivité dans le code. Mais il n'y a aucun problème avec les versions des fonctions.

 

Au fait, j'ai aussi remarqué que vous avez des scripts de test pour chaque fonction et qu'ils contiennent toutes les fonctions supplémentaires dont vous avez besoin, que vous pouvez simplement ajouter à votre EA avec la fonction et tout sera dans un seul fichier sans rien de plus. Les fonctions sont simples et utiles, mais avec votre permission, j'en ferai quatre pour moi : deux pour les positions et deux pour les arrêts. Ils seront plus universels pour les exigences délicates de mon EA. Mais maintenant je vois à quel point c'est facile à faire. Merci beaucoup Igor.

Salutations Andrei.

 

La fonction TimeOpenFirstPos().

Cette fonction renvoie l'heure de la première position ouverte. La sélection des positions à prendre en compte est spécifiée par des paramètres externes :

  • sy- Nom de l'instrument de marché. Si vous définissez ce paramètre, la fonction ne prendra en compte que les positions de cet instrument. La valeur par défaut"" signifie tout instrument de marché. La valeurNULL signifie l'instrument actuel.
  • op- Opération commerciale, type de poste. Valeurs valides :OP_BUY,OP_SELL ou-1. La valeur par défaut-1 signifie une position quelconque.
  • mn- Identificateur de position, MagicNumber. La valeur par défaut de-1 signifie n'importe quel identifiant.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 25.01.2012                                                     |
//|  Описание : Возвращает время открытия первой открытой позиций.             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
datetime TimeOpenFirstPos(string sy="", int op=-1, int mn=-1) {
  datetime t=TimeCurrent();
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t>OrderOpenTime()) t=OrderOpenTime();
            }
          }
        }
      }
    }
  }
  return(t);
}
L'utilisation de la fonction est similaire à TimeOpenLastPos()
 

Bonjour

Comment ajouter un foeba à votre canal SetRegression()(https://www.mql5.com/ru/forum/107476/page35 ).

 
gince:

Bonjour

Comment ajouter un foeba à votre canal SetRegression()(https://www.mql5.com/ru/forum/107476/page35 ).

Duck, c'est facile :

  1. Vous fixez le premier point de la ligne de fibrage (calculez d'où vous voulez qu'elle vienne).
  2. Décidez sur quelle barre vous obtiendrez le deuxième point.
  3. Utilisez ensuiteEquationDirect() pour obtenir le prix.
  4. Ayant les coordonnées de deux points, tracez une ligne qui les traverse en utilisant la fonctionSetTLine().