Fonctions utiles de KimIV - page 25

 

La fonction TimeOpenLastPos().

Cette fonction renvoie l'heure de la dernière position ouverte. La sélection des positions à prendre en compte est définie 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é. Une valeur de 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                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает время открытия последней открытой позиций.          |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
datetime TimeOpenLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  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);
}
ZS. Vous trouverez ci-joint un script pour tester la fonction TimeOpenLastPos().
Dossiers :
 
Prival:
Y a-t-il une fonction de tri à bulles dans l'arrière-boutique ?

Non disponible, mais il m'a fallu 10 minutes pour le faire.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 10.06.2008                                                     |
//|  Описание : Выполняет пузырьковую сортировку элементов массива.            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    a - массив элементов                                                    |
//+----------------------------------------------------------------------------+
void BubbleSort(double& a[]) {
  double t;
  int    i, j, n=ArraySize(a);

  for (i=n-1; i>0; i--) {
    for (j=0; j<i; j++) {
      if (a[j]>a[j+1]) {
        t=a[j];
        a[j]=a[j+1];
        a[j+1]=t;
      }
    }
  }
}
ZS. Vous trouverez ci-joint un script pour tester la fonction BubbleSort().
Dossiers :
 

La fonction BarsBetweenLastFractals().

Cette fonction renvoie le nombre de barres entre les deux dernières fractales ou -1. L'instrument de marché et l'horizon temporel à partir desquels les fractales doivent être prises sont définis par des paramètres :

  • sy - Nom de l'instrument de marché. La valeur par défaut est "" ou NULL pour l'instrument de marché actuel.
  • tf - Cadre temporel (nombre de minutes par barre). La valeur par défaut 0 signifie la période actuelle.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 10.06.2008                                                     |
//|  Описание : Возвращает количество баров между двумя последними фракталами. |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий ТФ)         |
//+----------------------------------------------------------------------------+
int BarsBetweenLastFractals(string sy="", int tf=0) {
  double fu=0, fd=0;
  int    i, nu=0, nd=0;

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=2; i<100; i++) {
    fu=iFractals(sy, tf, MODE_UPPER, i);
    if (fu!=0) {
      if (nu==0) nu=i;
    }
    fd=iFractals(sy, tf, MODE_LOWER, i);
    if (fd!=0) {
      if (nd==0) nd=i;
    }
    if (nu>0 && nd>0) return(MathAbs(nu-nd));
  }
  Print("BarsBetweenLastFractals(): Фракталы не найдены");
  return(-1);
}
ZS. Vous trouverez ci-joint un script pour tester la fonction BarsBetweenLastFractals().
 

Fonction SecondsAfterCloseLastPos().

Cette fonction renvoie le nombre de secondes après la fermeture de la dernière position. La sélection des positions à prendre en compte est spécifiée par les paramètres :

  • 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 de -1 signifie n'importe quel identifiant.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает количество секунд после закрытия последней позиций. |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
datetime SecondsAfterCloseLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  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 (t<OrderCloseTime()) t=OrderCloseTime();
            }
          }
        }
      }
    }
  }
  return(TimeCurrent()-t);
}
P.S. Vous trouverez ci-joint un script pour tester la fonction SecondsAfterCloseLastPos().
 

Bonjour

Quelques conseils.

J'ai un EA qui passe des ordres des deux côtés à un certain moment.

Veuillez expliquer sur vos doigts comment faire pour que la deuxième commande soit automatiquement supprimée lorsque la première se déclenche.

Ou le modifier

Merci.

 
aceventura:

Bonjour

Quelques conseils.

J'ai un EA qui passe des ordres des deux côtés à un certain moment.

Veuillez expliquer sur vos doigts comment faire pour que la deuxième commande soit automatiquement supprimée lorsque la première se déclenche.

Ou le modifier

Merci.

KimIV

Igor. Avez-vous assez de doigts ?

 
aceventura:

Bonjour

Quelques conseils.

J'ai un EA qui passe des ordres des deux côtés à un certain moment.

Veuillez expliquer sur vos doigts comment faire pour que la deuxième commande soit automatiquement supprimée lorsque la première se déclenche.

Ou le modifier

Merci.

Prenez d'abord la fonction nombre d'ordres dans cette branche et si elle renvoie "== 1", "< 2" ou "== nombre impair", alors appelez la fonction de cette branche "fermer les ordres".

 
Vinin:

KimIV

Igor. Avez-vous assez de doigts ?

Probablement pas... Je n'en ai que deux : index et poignée... hee

 
SergNF:

Prenez d'abord la fonction "nombre d'ordres" dans cette branche, puis si elle renvoie "== 1", "< 2" ou "== nombre impair", appelez alors la fonction "fermer les ordres" de cette branche.

La fonction de la quantité d'ordres ne fonctionnera pas, car l'EA est réglé différemment pour chaque paire. Et il passe des ordres sur différentes paires en même temps. Ensuite, si quatre ordres sont placés pour deux paires et un déclenché, trois d'entre eux sont supprimés et l'ordre opposé pour chacun est supprimé.

Raison: