Fonctions utiles de KimIV - page 11

 
KimIV:
Tout homme a le droit à la gauche... hee... Je vais m'amuser un peu avec ça.

Ilnar, dans le sujet Ordres en attente sur les fractales, a demandé, Comment faire des ordres en attente sur les fractales ?


Je suppose qu'Ilnar a eu des difficultés avec les niveaux de prix fractals. C'est pourquoi je suggère d'utiliser ma fonction :


//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 07.10.2006                                                      |
//| Описание : Поиск ближайшего фрактала.                                      |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//|   sy - наименование инструмента     (NULL - текущий символ)                |
//|   tf - таймфрейм                    (  0  - текущий ТФ)                    |
//|   mode - тип фрактала               (MODE_LOWER|MODE_UPPER)                |
//+----------------------------------------------------------------------------+
double FindNearFractal(string sy="0", int tf=0, int mode=MODE_LOWER) {
  if (sy=="" || sy=="0") sy=Symbol();
  double f=0;
  int d=MarketInfo(sy, MODE_DIGITS), s;
  if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2;
 
  for (s=2; s<100; s++) {
    f=iFractals(sy, tf, mode, s);
    if (f!=0) return(NormalizeDouble(f, d));
  }
  Print("FindNearFractal(): Фрактал не найден");
  return(0);
}
La fonction FindNearFractal() recherche la fractale la plus proche d'un type spécifié pour un symbole spécifié à une période donnée et renvoie son niveau de prix. En connaissant le niveau de prix de l'emplacement de la fractale, il est déjà facile de placer un ordre à ce niveau.
Est-il possible que la fonction renvoie deux valeurs, par exemple le numéro de la barre où se trouve la fractale, ou devons-nous en connecter une autre ?
 
xrust писал (а):
Est-il possible que la fonction renvoie deux valeurs, par exemple également le numéro de la barre où se trouve la fractale, ou dois-je en connecter une autre ?
Et pourquoi renvoyer deux valeurs quand une seule - le numéro de la barre - suffit ? À cette fin, dans la déclaration :
return(NormalizeDouble(f, d));
écrire la valeur du compteur de barres au lieu du niveau des prix. Sur la sortie, vous obtiendrez le numéro de barre de la fractale. Et vous obtiendrez le niveau de prix avec l'une des fonctions iHigh () ou iLow() selon le type de fractale.
 
Non, tout est clair ici, je demande simplement. Merci, vos articles sont très utiles.
 
xrust:
Non, c'est clair, je demande simplement.
ah... Eh bien, si en principe, vous pouvez utiliser un tableau passé par référence. Le nombre de paramètres renvoyés serait alors limité par la taille du tableau.
 

Fonction ExistOrdersByLot().

Renvoie un indicateur de l'existence d'un ordre avec la taille de lot spécifiée. Vrai - l'ordre existe (défini), Faux - l'ordre n'existe pas (non défini). Vous pouvez limiter la liste des ordres à vérifier à l'aide des paramètres de la fonction :

  • sy - Nom de l'instrument. Si vous définissez ce paramètre, la fonction ne vérifiera que les ordres de l'instrument spécifié. NULL signifie l'instrument actuel, et "" (par défaut) signifie n'importe quel instrument.
  • op - Opération, type d'ordre en attente. Valeurs valides : OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP ou -1. La valeur par défaut de -1 indique tout type de commande.
  • mn - Identifiant de l'ordre (MagicNumber). La valeur par défaut de -1 signifie n'importe quel MagicNumber.
  • lo - Taille d'un lot avec une précision de deux décimales. La valeur par défaut est 0 - toute taille de lot.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Возвращает флаг существования ордера по размеру лота.          |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любой ордер)                    |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    lo - лот                        ( 0   - любой лот)                      |
//+----------------------------------------------------------------------------+
bool ExistOrdersByLot(string sy="", int op=-1, int mn=-1, double lo=0) {
  int i, k=OrdersTotal(), ot;
  lo=NormalizeDouble(lo, 2);

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot>1 && ot<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (lo<=0 || NormalizeDouble(OrderLots(), 2)==lo) return(True);
          }
        }
      }
    }
  }
  return(False);
}
 

Exemples d'utilisation de la fonction ExistOrdersByLot().

  1. Vérifier tout ordre avec une taille de lot de 0.2
    ExistOrdersByLot("", -1, -1, 0.2);
  2. Vérifier tout ordre avec une taille de lot de 0,3 sur le symbole graphique actuel.
    ExistOrdersByLot(NULL, -1, -1, 0.3);
  3. Vérifier s'il existe un ordre BuyLimit avec une taille de lot de 0,5 pour un symbole quelconque.
    ExistOrdersByLot("", OP_BUYLIMIT, -1, 0.5);
  4. Vérifier la présence de l'ordre SellStop avec la taille de lot 0.1 et le numéro magique 123456 par EURUSD
    ExistOrdersByLot("EURUSD", OP_SELLSTOP, 123456, 0.1);
  5. Vérifier la présence d'un ordre avec le lot 0.4 avec le numéro magique 987 sur USDJPY
    ExistOrdersByLot("USDJPY", -1, 987, 0.4);

Vous trouverez ci-joint, comme d'habitude, un script fonctionnel avec les exemples ci-dessus.

Dossiers :
 

Fonction GetLotLastOrder().

Renvoie la taille du lot du dernier ordre passé ou -1. Vous pouvez limiter la liste des ordres à vérifier à l'aide des paramètres de la fonction :

  • sy - Nom de l'instrument. Si ce paramètre est donné, la fonction ne vérifiera que les ordres de l'instrument spécifié. NULL signifie l'instrument actuel, et "" (par défaut) signifie n'importe quel instrument.
  • op - Opération, type d'ordre en attente. Valeurs valides : OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP ou -1. La valeur par défaut de -1 signifie un ordre quelconque.
  • mn - Identifiant de l'ordre (MagicNumber). La valeur par défaut -1 signifie n'importe quel MagicNumber.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Возвращает размер лота последнего выставленного ордера или -1  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetLotLastOrder(string sy="", int op=-1, int mn=-1) {
  datetime o;
  double   l=-1;
  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()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (o<OrderOpenTime()) {
                o=OrderOpenTime();
                l=OrderLots();
              }
            }
          }
        }
      }
    }
  }
  return(l);
}
 

Exemples d'utilisation de GetLotLastOrder().

  1. Trouver la taille du lot de la dernière commande passée
    GetLotLastOrder();
  2. Trouvez la taille du lot du dernier ordre passé sur le symbole actuel.
    GetLotLastOrder(NULL);
  3. Trouver la taille du lot du dernier ordre BuyLimit sur n'importe quel symbole.
    GetLotLastOrder("", OP_BUYLIMIT);
  4. Trouver la taille du lot du dernier ordre SellStop avec le numéro magique 123456 sur EURUSD
    GetLotLastOrder("EURUSD", OP_SELLSTOP, 123456);
  5. Spécifiez la taille du lot de la dernière commande avec le numéro magique 2345 pour le symbole actuel.
    GetLotLastOrder(NULL, -1, 2345);

Vous trouverez ci-joint un script fonctionnant traditionnellement avec les exemples ci-dessus.

Dossiers :
 

Fonction GetOrderOpenPrice().

Renvoie le prix de fixation du dernier ordre ouvert ou 0. Vous pouvez limiter la liste des ordres à vérifier avec les paramètres de la fonction :

  • sy - Nom de l'instrument. Si ce paramètre est donné, la fonction ne vérifiera que les ordres de l'instrument spécifié. NULL signifie l'instrument actuel, et "" (par défaut) signifie n'importe quel instrument.
  • op - Opération, type d'ordre en attente. Valeurs valides : OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP ou -1. La valeur par défaut de -1 indique un ordre quelconque.
  • mn - Identifiant de l'ordre (MagicNumber). La valeur par défaut -1 signifie n'importe quel MagicNumber.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Возвращает цену установки последнего ордера или 0.             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetOrderOpenPrice(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   r=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=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
 

Exemples d'utilisation de GetOrderOpenPrice().

  1. Obtenez le prix d'ouverture de la dernière commande passée
    GetOrderOpenPrice();
  2. Obtenir le prix de la dernière commande passée sur le symbole actuel
    GetOrderOpenPrice(NULL);
  3. Trouver le prix de fixation du dernier ordre BuyLimit sur n'importe quel symbole.
    GetOrderOpenPrice("", OP_BUYLIMIT);
  4. Trouver le prix du dernier ordre SellStop placé avec la magie 123456 sur EURUSD
    GetOrderOpenPrice("EURUSD", OP_SELLSTOP, 123456);
  5. Spécifiez le prix du dernier ordre passé avec magic 2345 pour le symbole actuel
    GetOrderOpenPrice(NULL, -1, 2345);

Vous trouverez ci-joint un script qui fonctionne parfaitement avec les exemples ci-dessus.

Dossiers :