Fonctions utiles de KimIV - page 10

 

Merci KimIV!

 

Fonction DeleteOrders(). Version pour testeurs.

La fonction DeleteOrders() est destinée à supprimer les ordres en attente BuyLimit, BuyStop, SellLimit et SellStop. La fonction DeleteOrders() est universelle, c'est-à-dire qu'elle peut être utilisée pour supprimer tous les ordres en attente déjà passés, ainsi que les ordres spécifiques qui répondent aux conditions de sélection définies à l'aide des paramètres de la fonction :

sy - Nom de l'instrument. Étant donné que seul le symbole actuel peut être négocié dans le testeur, ce paramètre n'est pas pertinent pour la version du testeur et est uniquement nécessaire pour la compatibilité avec la version en ligne de cette fonction. Il est préférable d'utiliser les valeurs "" ou NULL dans le testeur. La valeur par défaut "" signifie tout symbole.
op
- Type d'opération commerciale, type d'ordre en attente. L'une des cinq valeurs suivantes est possible : -1, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT ou OP_SELLSTOP. La valeur par défaut de -1 indique un ordre quelconque.
mn
- MagicNumber, numéro d'identification de l'ordre en attente. Valeur par défaut -1 - signifie n'importe quel magik.

//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 13.06.2007                                                      |
//| Описание : Удаление ордеров. Версия функции для тестов на истории.         |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
 
  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket(), clDelete);
          }
        }
      }
    }
  }
}
 

Fonction DeleteOrders(). Version en ligne.


//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 28.11.2006                                                      |
//| Описание : Удаление ордеров                                                |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//|   sy - наименование инструмента   ( ""  - любой символ,                    |
//|                                    NULL - текущий символ)                  |
//|   op - операция                   (  -1 - любой ордер)                     |
//|   mn - MagicNumber                (  -1 - любой магик)                     |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  bool fd;
  int err, i, it, k=OrdersTotal(), ot;
  
  if (sy=="0") sy=Symbol();
  for (i=k-1; i>=0; 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) {
            for (it=1; it<=NumberOfTry; it++) {
              if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
              while (!IsTradeAllowed()) Sleep(5000);
              fd=OrderDelete(OrderTicket(), clDelete);
              if (fd) {
                if (UseSound) PlaySound(NameFileSound); break;
              } else {
                err=GetLastError();
                Print("Error(",err,") delete order ",GetNameOP(ot),
                      ": ",ErrorDescription(err),", try ",it);
                Sleep(1000*5);
              }
            }
          }
        }
      }
    }
  }
}
 

Exemples d'utilisation de la fonction DeleteOrders().


1. Supprimer toutes les commandes :

DeleteOrders();
2. Supprimer tous les ordres BuyStop :
DeleteOrders(NULL, OP_BUYSTOP);

3. Supprimer toutes les commandes avec la magie 123456 :

DeleteOrders(NULL, -1, 123456);

ZY. Dans la remorque se trouve un scénario de travail avec les mêmes exemples.

Dossiers :
 
KimIV:

Exemples d'utilisation de la fonction DeleteOrders().

A ce rythme, on n'arrivera jamais à la bibliothèque. Je vais devoir aller à la bibliothèque après tout. Si vous m'invitez. Je n'y vais pas sans invitation.
 
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 quelques difficultés à détecter les niveaux de prix des fractales. 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 du type spécifié au symbole spécifié, à l'horizon temporel donné, et renvoie son niveau de prix. Connaissant le niveau de prix de l'emplacement de la fractale, il est déjà facile de placer un ordre à ce niveau.
 
KimIV:
  int d=MarketInfo(sy, MODE_DIGITS), s;
  if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2;
Question... Qu'est-ce que d a à voir avec 0 ? ??
 
kharko:
KimIV:
  int d=MarketInfo(sy, MODE_DIGITS), s;
  if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2;
Question... Qu'est-ce que d a à voir avec 0 ? ??
Je ne sais pas... J'ai eu un cas dans ma pratique où c'était d=0. J'ai dû effectuer un contrôle pour qu'il soit égal à zéro. Depuis lors, j'ai traîné ce code partout où je pouvais. C'est peut-être inutile, mais je pense qu'il vaut mieux être trop que pas assez.
 
Vinin:
KimIV:

Exemples d'utilisation de DeleteOrders().

A ce rythme, on n'arrivera jamais à la bibliothèque. Nous devrons aller à la bibliothèque. Si vous m'invitez. Je n'y vais pas sans invitation.

Vitek, quel est le problème ? Bien sûr, viens creuser le jardin bientôt... vous pouvez aider...

 
KimIV:
Vinin:
KimIV:

Exemples d'utilisation de DeleteOrders().

À ce rythme, on n'arrivera jamais à la bibliothèque. Nous devrons aller à la bibliothèque après tout. Si vous m'invitez. Je n'y vais pas sans invitation.

Vitek, quel est le problème ? Bien sûr, viens creuser le jardin bientôt... vous pouvez aider...

Pas de problème avec le jardin, bien que je n'aie pas l'âge requis. On pourrait peut-être trouver quelqu'un de plus jeune pour ce travail. Nous irons aux bains et prendrons du kvass (tu es allergique, je l'étais aussi). Nous verrons comment les jeunes travaillent. Ce ne serait pas grave.