Fonctions utiles de KimIV - page 27

 
SamMan писал (а) >>

Exactement. Et plus le code est petit, plus il est facile à comprendre. Je ne supporte pas les polices de caractères "étalées" sur 2-3 écrans. Une fonction doit être tout entière sur l'écran, sans retournement. C'est pourquoi je suis en faveur de la compacité.


Je ne les supporte pas non plus :) . Ma fonction tient dans l'écran.


Et est-il normal que vous ayez beaucoup de continuums facultatifs qui, d'ailleurs, détournent à nouveau l'attention du lecteur de vous ?


La réduction de la complexité des fonctions est l'une des conditions de base pour écrire du BON code.

Si vous aimez cette façon de faire, vous avez deux options :

1. Vous êtes habitué à un mauvais style de code et vous l'utilisez vous-même, rien de bon ne peut en sortir, quand vous devrez écrire un code vraiment fondamental vous comprendrez ma justesse. Au moins lorsque vous passez à MQL5.

2 Et je pense que cela ne concerne que vous - vous utilisez ce code, parce que vous êtes incapable d'écrire votre propre code correctement, en tant que programmeur vous ne représentez rien, et alors vous n'avez aucun droit de juger et de discuter de mon post à l'auteur de ce fil. D'autant plus que je m'adressais à l'auteur.

Je m'excuse pour mon post à l'auteur, j'ai écrit en vain, car je n'utiliserai pas ce code de toute façon, puisque j'ai ma propre libc avec tout ce dont j'ai besoin. Et comme pendant si longtemps il n'y a pas eu de retour négatif sans équivoque, cela signifie que le code de l'auteur est satisfaisant. Je ne pouvais pas le supporter :), désolé.

 
TheXpert писал (а) >>

Je m'excuse pour mon post à l'auteur, j'ai écrit en vain, car je n'utiliserai pas ce code de toute façon, puisque j'ai ma propre libc avec tout ce dont j'ai besoin. Et comme pendant si longtemps il n'y a pas eu de retour clairement négatif, cela signifie que le code de l'auteur est satisfaisant. Je ne pouvais pas le supporter :), désolé.

Je m'excuse d'avoir écrit, mais je ne pouvais pas le supporter. Vous serez en vain si vous quittez la branche à cause de l'opinion de quelqu'un. L'auteur a surtout dit merci.

Je pense qu'il serait bien qu'une même tâche puisse être résolue par 2 (ou plus) codes. Vous pouvez partager vos codes résolvant la même tâche si vous pensez qu'ils sont meilleurs.

Souvent, voir comment quelqu'un d'autre a codé la même chose, mais dans un style différent. Vous pouvez apprendre beaucoup de choses.

P.S. Igor, merci pour votre travail.

 
En effet, Andrei, tu ne devrais pas le prendre comme ça. Restez simple ! Et n'ayez pas peur de me pousser vers le bas. Je ne verrai pas d'inconvénient à ce que vous contribuiez à mon travail ou à ce que vous publiiez le vôtre.
 

La fonction ArraySearchDouble().

Cette fonction recherche un élément de tableau en utilisant une valeur de type double et renvoie l'index de l'élément trouvé ou -1. La fonction ne trouve qu'un seul élément et arrête la recherche si le résultat est positif.

  • m - Le tableau dans lequel l'élément est recherché.
  • e - Valeur de type double, qui se trouve dans le tableau m.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Выполняет поиск элемента массива по значению                   |
//|             и возвращает индекс найденного элемента или -1.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - массив элементов                                                    |
//|    e - значение элемента                                                   |
//+----------------------------------------------------------------------------+
int ArraySearchDouble(double& m[], double e) {
  for (int i=0; i<ArraySize(m); i++) {
    if (m[i]==e) return(i);
  }
  return(-1);
}
ZS. Vous trouverez ci-joint un script pour tester la fonction ArraySearchDouble().
Dossiers :
 

La fonction ArraySearchInt().

Cette fonction recherche un élément de tableau par une valeur de type int et retourne l'index de l'élément trouvé ou -1. La fonction ne trouve qu'un seul élément et arrête la recherche si le résultat est positif.

  • m - Le tableau d'éléments de type int, dans lequel la recherche est effectuée.
  • e - Valeur de type int, qui se trouve dans le tableau m.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Выполняет поиск элемента массива по значению                   |
//|             и возвращает индекс найденного элемента или -1.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - массив элементов                                                    |
//|    e - значение элемента                                                   |
//+----------------------------------------------------------------------------+
int ArraySearchInt(int& m[], int e) {
  for (int i=0; i<ArraySize(m); i++) {
    if (m[i]==e) return(i);
  }
  return(-1);
}
ZS. Vous trouverez ci-joint un script pour tester la fonction ArraySearchInt().
Dossiers :
 

La fonction ArraySearchString().

Cette fonction recherche dans un élément du tableau une valeur de type chaîne de caractères et renvoie l'index de l'élément trouvé ou -1. La fonction ne trouve qu'un seul élément et arrête la recherche si le résultat est positif.

  • m - Le tableau d'éléments de type chaîne de caractères, dans lequel la recherche est effectuée.
  • e - La valeur de type chaîne de caractères, qui doit être trouvée dans le tableau m.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 04.03.2008                                                     |
//|  Описание : Выполняет поиск элемента массива по значению                   |
//|             и возвращает индекс найденного элемента или -1.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - массив элементов                                                    |
//|    e - значение элемента                                                   |
//+----------------------------------------------------------------------------+
int ArraySearchString(string& m[], string e) {
  for (int i=0; i<ArraySize(m); i++) {
    if (m[i]==e) return(i);
  }
  return(-1);
}
ZS. Vous trouverez ci-joint un script pour tester la fonction ArraySearchString().
Dossiers :
 
KimIV писал (а) >>
En effet, Andrey, vous n'auriez pas dû le prendre comme ça. >> Soyez simple ! Et n'ayez pas peur de me pousser vers le bas. Je ne vois pas d'inconvénient à ce que vous apportiez votre contribution en corrigeant un de mes articles ou en publiant le vôtre.

OK, j'ai un point de vue légèrement différent sur les choses, comme je l'ai déjà écrit, je considère que l'universalité globale est un mal, c'est-à-dire que le code devrait être au moins un peu personnalisé pour ce que vous écrivez, afin d'obtenir un maximum de simplicité et de commodité. C'est pourquoi je ne vois pas l'intérêt de publier mon propre code ici.


Je peux agir en tant que réviseur de votre code, si cela ne vous dérange pas bien sûr, et proposer votre propre version de celui-ci ou simplement faire des commentaires.



SZZH : Merci pour votre soutien, pour être honnête je ne m'attendais pas à ce genre de retour de votre part.

 
KimIV писал (а) >>

La fonction ArraySearchDouble().

Cette fonction recherche un élément de tableau en utilisant une valeur de type double et renvoie l'index de l'élément trouvé ou -1. La fonction ne trouve qu'un seul élément et arrête la recherche si le résultat est positif.

  • m - Le tableau dans lequel l'élément est recherché.
  • e - La valeur de type double, qui se trouve dans le tableau m.
ZS. Vous trouverez ci-joint un script pour tester la fonction ArraySearchDouble().

Le double est une chose délicate, et votre code peut fonctionner de manière incorrecte dans certaines situations.

Voici une solution de contournement possible

int ArraySearchDouble(double& array[], double value, double precision = 0.00000000001) 
{ // на то, что я перемещаю скобки не обращайте внимания, мне так читабельней
  for (int i = 0; i < ArraySize(array); i++) 
  {
    if (array[i] > value - precision && array[i] < value + precision) return(i);
  }
  return(-1);
}

Et si vous voulez faire la même chose mais depuis la fin.

int ArrayRevertSearchDouble(double& array[], double value, double precision = 0.00000000001) 
{ 
  for (int i = ArraySize(array) - 1; i >= 0; i--) 
  {
    if (array[i] > value - precision && array[i] < value + precision) return(i);
  }
  return(-1);
}
 
TheXpert писал (а)
Je peux agir en tant que réviseur de votre code, si vous n'y voyez pas d'inconvénient, bien sûr, et proposer ma propre version de celui-ci ou simplement faire des commentaires.
Super ! Il est bon pour tout le monde d'avoir une vision polyvalente des choses. Moi, tout d'abord :-)
 

L'autre jour, j'écrivais un EA dans lequel je devais modifier la taille du lot en fonction du résultat d'une transaction précédente et de la taille du lot de la même transaction. Et il s'est avéré que je n'avais pas de fonction qui renvoie la taille du lot de la dernière position fermée. Voici une correction...

La fonction GetLotLastClosePos().

Cette fonction renvoie la taille du lot de la dernière position fermée, ou -1. La sélection des positions à prendre en compte est définie 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 valeur NULL 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 -1 signifie n'importe quel identifiant.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.06.2008                                                     |
//|  Описание : Возвращает размер лота последней закрытой позиции или -1       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetLotLastClosePos(string sy="", int op=-1, int mn=-1) {
  datetime o;
  double   l=-1;
  int      i, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (o<OrderCloseTime()) {
                o=OrderCloseTime();
                l=OrderLots();
              }
            }
          }
        }
      }
    }
  }
  return(l);
}
ZS. Vous trouverez ci-joint un script pour tester la fonction GetLastClosePos().
Dossiers :
Raison: