Uniquement "Fonctionnalités utiles de KimIV". - page 6

 

La fonction ArrayMin().

Cette fonction renvoie la valeur de l'élément minimum du tableau.

  • x - Un tableau d'éléments de type double, dans lequel la valeur minimale de l'élément est recherchée.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 17.05.2008                                                     |
//|  Описание : Возвращает значение минимального элемента массива.             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив значений числового ряда                                      |
//+----------------------------------------------------------------------------+
double ArrayMin(double& x[]) {
  if (ArraySize(x)>0) return(x[ArrayMinimum(x)]);
  else {
    Print("ArrayMin(): Массив пуст!");
    return(0);
  }
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 07.10.2006                                                     |
//|  Описание : Возвращает номер бара экстремума ЗигЗага по его номеру.        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    tf - таймфрейм                  (      0     - текущий ТФ)              |
//|    ne - номер экстремума           (      0     - последний)               |
//|    dp - ExtDepth                                                           |
//|    dv - ExtDeviation                                                       |
//|    bs - ExtBackstep                                                        |
//+----------------------------------------------------------------------------+
int GetExtremumZZBar(string sy="", int tf=0, int ne=0, int dp=12, int dv=5, int bc=3) {
  if (sy=="" || sy=="0") sy=Symbol();
  double zz;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=0; i<k; i++) {
    zz=iCustom(sy, tf, "ZigZag", dp, dv, bc, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(i);
    }
  }
  Print("GetExtremumZZBar(): Экстремум ЗигЗага номер ",ne," не найден");
  return(-1);
}
 

La fonction ArrayAvg().

Cette fonction renvoie la moyenne arithmétique des éléments du tableau.

  • x - Un tableau d'éléments de type double.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.05.2008                                                     |
//|  Описание : Возвращает среднее аримфетическое элементов массива.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив значений числового ряда                                      |
//+----------------------------------------------------------------------------+
double ArrayAvg(double& x[]) {
  double s=0;
  int    i, k=ArraySize(x);

  for (i=0; i<k; i++) s+=x[i];
  if (k>0) s/=k; else Print("ArrayAvg(): Массив пуст!");

  return(s);
}

La fonction ArrayAvGeom().

Cette fonction renvoie la moyenne géométrique des éléments du tableau.

  • x - Un tableau d'éléments de type double.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.06.2008                                                     |
//|  Описание : Возвращает среднее геометрическое элементов массива.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив значений числового ряда                                      |
//+----------------------------------------------------------------------------+
double ArrayAvGeom(double& x[]) {
  double s=1, k=ArraySize(x);
  int    i;

  for (i=0; i<k; i++) s*=x[i];
  if (k>0) s=MathPow(s, 1/k); else Print("ArrayAvGeom(): Массив пуст!");

  return(s);
}
 

La fonction SetHLine().

Cette fonction définit l'objet OBJ_HLINE ligne horizontale sur le graphique courant.

  • cl - Couleur de l'objet OBJ_HLINE ligne horizontale. Paramètre requis.
  • nm - nom de l'objet. Si la valeur par défaut "" est passée, l'heure d'ouverture de la barre actuelle est utilisée comme nom d'objet.
  • p1 - niveau de prix de l'objet. Valeur par défaut - 0 - prix d'offre actuel.
  • st - Style de ligne. Les valeurs admissibles sont STYLE_SOLID (par défaut) - ligne pleine, STYLE_DASH - ligne pointillée, STYLE_DOT - ligne pointillée, STYLE_DASHDOT - ligne pointillée, STYLE_DASHDOT - ligne pointillée avec doubles points.
  • wd - Épaisseur de la ligne. La valeur par défaut est 0.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 30.03.2008                                                     |
//|  Описание : Установка объекта OBJ_HLINE горизонтальная линия               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    p1 - ценовой уровень            (0  - Bid)                              |
//|    st - стиль линии                (0  - простая линия)                    |
//|    wd - ширина линии               (0  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetHLine(color cl, string nm="", double p1=0, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (p1<=0) p1=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_HLINE, 0, 0,0);
  ObjectSet(nm, OBJPROP_PRICE1, p1);
  ObjectSet(nm, OBJPROP_COLOR , cl);
  ObjectSet(nm, OBJPROP_STYLE , st);
  ObjectSet(nm, OBJPROP_WIDTH , wd);
}

La fonction SetVLine().

Cette fonction définit la ligne verticale de l'objet OBJ_VLINE sur le graphique courant.

  • cl - Couleur de l'objet VERTICAL LINE. Paramètre obligatoire.
  • nm - nom de l'objet. Lorsque la valeur par défaut est passée - "", l'heure d'ouverture de la barre actuelle est utilisée comme nom d'objet.
  • t1 - Temps de réglage de l'objet. Valeur par défaut - 0 - temps d'ouverture de la barre actuelle.
  • st - Style de ligne. Les valeurs valides sont STYLE_SOLID (par défaut), STYLE_DASH, STYLE_DOT, STYLE_DASHDOT.
  • wd - Largeur de la ligne. La valeur par défaut est 1.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 02.07.2008                                                     |
//|  Описание : Установка объекта OBJ_VLINE вертикальная линия                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время                      (0  - время открытия текущего бара)     |
//|    st - стиль линии                (0  - простая линия)                    |
//|    wd - ширина линии               (1  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetVLine(color cl, string nm="", datetime t1=0, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[0];
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_VLINE, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1, t1);
  ObjectSet(nm, OBJPROP_COLOR, cl);
  ObjectSet(nm, OBJPROP_STYLE, st);
  ObjectSet(nm, OBJPROP_WIDTH, wd);
}
 

La fonction SetTLine().

Cette fonction définit l'objet ligne de tendance OBJ_TREND sur le graphique en cours.

  • cl - Couleur de l'objet TREND LINE. Il s'agit d'un paramètre obligatoire.
  • nm - Nom de l'objet. Lorsque la valeur par défaut est passée - "", l'heure d'ouverture de la barre actuelle est utilisée comme nom.
  • t1 - Première coordonnée du temps de réglage de l'objet. Valeur par défaut - 0 - temps d'ouverture de la dixième mesure.
  • p1 - Première coordonnée de l'objet fixant le prix. Valeur par défaut - 0 - minimum de la dixième barre.
  • t2 - Deuxième coordonnée du temps de réglage de l'objet. Valeur par défaut - 0 - temps d'ouverture de la barre actuelle.
  • p2 - Deuxième coordonnée du prix de l'objet. Valeur par défaut - 0 - barre actuelle basse.
  • ry - Indicateur de la propriété BLEU. La valeur par défaut est False.
  • st - Style de ligne. Les valeurs valides sont STYLE_SOLID (par défaut), STYLE_DASH, STYLE_DOT, STYLE_DASHDOT.
  • wd - Largeur de la ligne. La valeur par défaut est 1.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка объекта OBJ_TREND трендовая линия                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               (  ""  - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10]                       |
//|    p1 - ценовой уровень            (  0   - Low[10])                       |
//|    t2 - время открытия бара        (  0   - текущий бар)                   |
//|    p2 - ценовой уровень            (  0   - Bid)                           |
//|    ry - луч                        (False - по умолчанию)                  |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetTLine(color cl, string nm="",
              datetime t1=0, double p1=0, datetime t2=0, double p2=0,
              bool ry=False, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[10];
  if (p1<=0) p1=Low[10];
  if (t2<=0) t2=Time[0];
  if (p2<=0) p2=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TREND, 0, 0,0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1 , t1);
  ObjectSet(nm, OBJPROP_PRICE1, p1);
  ObjectSet(nm, OBJPROP_TIME2 , t2);
  ObjectSet(nm, OBJPROP_PRICE2, p2);
  ObjectSet(nm, OBJPROP_COLOR , cl);
  ObjectSet(nm, OBJPROP_RAY   , ry);
  ObjectSet(nm, OBJPROP_STYLE , st);
  ObjectSet(nm, OBJPROP_WIDTH , wd);
}

Fonction SetTLineByAngle().

Cette fonction définit l'objet OBJ_TRENDBYANGLE par l'angle de pente dans le graphique courant.

  • cl - Couleur de l'objet TRENDBYANGLE. Paramètre requis.
  • nm - Nom de l'objet. Lorsque la valeur par défaut est passée - "", l'heure d'ouverture de la barre actuelle est utilisée comme nom.
  • t1 - Première coordonnée du temps de réglage de l'objet. Valeur par défaut - 0 - temps d'ouverture de la dixième mesure.
  • p1 - Première coordonnée de l'objet fixant le prix. Valeur par défaut - 0 - minimum de la dixième barre.
  • t2 - Deuxième coordonnée du temps de réglage de l'objet. Valeur par défaut - 0 - temps d'ouverture de la barre actuelle.
  • p2 - Deuxième coordonnée du prix de réglage de l'objet. Ce paramètre est une sorte de commutateur. Sa valeur non nulle assimile cette fonction à SetTLine(), c'est-à-dire qu'une ligne de tendance sera dessinée en utilisant le couple de coordonnées temps/prix, tandis que la valeur de l'angle de pente de la ligne de tendance sera ignorée. La valeur par défaut est 0 - construction de la ligne de tendance par angle de pente.
  • an - Angle de pente en degrés. Valeur par défaut - 0 - Ligne horizontale.
  • ry - Indicateur de la propriété BOW. La valeur par défaut est False.
  • st - Style de ligne. Les valeurs valides sont STYLE_SOLID (par défaut), STYLE_DASH, STYLE_DOT, STYLE_DASHDOT.
  • wd - Largeur de la ligne. La valeur par défaut est 1.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка объекта OBJ_TRENDBYANGLE трендовая линия по углу     |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               (  ""  - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10]                       |
//|    p1 - ценовой уровень            (  0   - Low[10])                       |
//|    t2 - время открытия бара        (  0   - время открытия текущего бара)  |
//|    p2 - ценовой уровень            (  0   - по углу)                       |
//|    an - угол                       (  0   - по умолчанию)                  |
//|    ry - луч                        (False - не луч)                        |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetTLineByAngle(color cl, string nm="",
              datetime t1=0, double p1=0, datetime t2=0, double p2=0,
              double an=0, bool ry=False, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[10];
  if (p1<=0) p1=Low[10];
  if (t2<=0) t2=Time[0];
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TRENDBYANGLE, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1 , t1);
  ObjectSet(nm, OBJPROP_PRICE1, p1);
  ObjectSet(nm, OBJPROP_TIME2 , t2);
  if (p2>0) ObjectSet(nm, OBJPROP_PRICE2, p2);
  else ObjectSet(nm, OBJPROP_ANGLE, an);
  ObjectSet(nm, OBJPROP_COLOR, cl);
  ObjectSet(nm, OBJPROP_RAY  , ry);
  ObjectSet(nm, OBJPROP_STYLE, st);
  ObjectSet(nm, OBJPROP_WIDTH, wd);
}
 

La fonction SetArrow().

Cette fonction définit l'icône de l'objet OBJ_ARROW sur le graphique actuel.

  • cd - code de l'icône. Paramètre requis.
  • cl - Couleur de l'icône. Paramètre requis.
  • nm - Nom de l'objet. Si la valeur par défaut est transférée - "", l'heure d'ouverture de la barre actuelle est utilisée comme nom.
  • t1 - Première coordonnée du temps de réglage de l'objet. Valeur par défaut - 0 - temps d'ouverture de la barre actuelle.
  • p1 - Première coordonnée de l'objet fixant le prix. Valeur par défaut - 0 - prix d'offre actuel.
  • sz - Taille de l'icône. Valeur par défaut - 0.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка значка на графике, объекта OBJ_ARROW.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cd - код значка                                                         |
//|    cl - цвет значка                                                        |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время открытия бара        (0  - текущий бар)                      |
//|    p1 - ценовой уровень            (0  - Bid)                              |
//|    sz - размер значка              (0  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetArrow(int cd, color cl,
              string nm="", datetime t1=0, double p1=0, int sz=0) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[0];
  if (p1<=0) p1=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_ARROW, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1    , t1);
  ObjectSet(nm, OBJPROP_PRICE1   , p1);
  ObjectSet(nm, OBJPROP_ARROWCODE, cd);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_WIDTH    , sz);
}

Fonction SetLabel().

Cette fonction définit l'objet OBJ_LABEL ( étiquette de texte) dans le graphique courant.

  • nm - nom de l'objet. Paramètre requis.
  • tx - Texte. Paramètre requis.
  • cl - Couleur du marqueur. Paramètre requis.
  • xd - Coordonnée X en pixels par rapport à l'angle de référence. Paramètre requis.
  • yd - Coordonnée Y en pixels par rapport à l'angle du point de référence. Paramètre obligatoire.
  • cr - Numéro de l'angle de référence. Valeurs valides : 0 haut-gauche, 1 haut-droit, 2 bas-gauche, 3 bas-droit. La valeur par défaut est 0.
  • fs - Taille de la police. La valeur par défaut est 9.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка текстовой метки, объект OBJ_LABEL.                   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    nm - наименование объекта                                               |
//|    tx - текст                                                              |
//|    cl - цвет метки                                                         |
//|    xd - координата X в пикселах                                            |
//|    yd - координата Y в пикселах                                            |
//|    cr - номер угла привязки        (0 - левый верхний,                     |
//|                                     1 - правый верхний,                    |
//|                                     2 - левый нижний,                      |
//|                                     3 - правый нижний )                    |
//|    fs - размер шрифта              (9 - по умолчанию  )                    |
//+----------------------------------------------------------------------------+
void SetLabel(string nm, string tx, color cl, int xd, int yd, int cr=0, int fs=9) {
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_LABEL, 0, 0,0);
  ObjectSetText(nm, tx, fs);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_XDISTANCE, xd);
  ObjectSet(nm, OBJPROP_YDISTANCE, yd);
  ObjectSet(nm, OBJPROP_CORNER   , cr);
  ObjectSet(nm, OBJPROP_FONTSIZE , fs);
}
 

La fonction CrossPointOfLines().

Cette fonction calcule les coordonnées du point d'intersection de deux lignes. Chaque ligne est définie par une paire de coordonnées de ses points. Trois tableaux sont passés à la fonction comme paramètres :

  • x - Tableau d'abscisses. Il doit contenir quatre éléments : x[0], x[1] - l'abscisse de la première ligne, x[2], x[3] - l'abscisse de la deuxième ligne.
  • y - Tableau d'ordonnées. Doit contenir quatre éléments : y[0], y[1] - les ordonnées de la première ligne, y[0], y[1] - les ordonnées de la deuxième ligne.
  • t - Tableau de coordonnées du point d'intersection des deux lignes. Après l'exécution normale de la fonction, ce tableau contiendra deux éléments : t[0] est l'abscisse du point d'intersection des deux lignes et t[1] est l'ordonnée du même point.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Вычисляет координаты точки пересечения двух прямых.            |
//|             Каждая прямая задаётся парой координат своих точек.            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив абсцисс              x[0], x[1] - первая прямая              |
//|                                    x[2], x[3] - вторая прямая              |
//|    y - массив ординат              y[0], y[1] - первая прямая              |
//|                                    y[0], y[1] - вторая прямая              |
//|    t - массив искомых координат    t[0]       - абсцисса                   |
//|                                    t[1]       - ордината                   |
//+----------------------------------------------------------------------------+
void CrossPointOfLines(double& x[], double& y[], double& t[]) {
  double z=(y[3]-y[2])*(x[1]-x[0])-(y[1]-y[0])*(x[3]-x[2]);
  ArrayResize(t, 2);
  ArrayInitialize(t, 0.0);

  if (z==0) Print("CrossPointOfLines(): Не удалось найти точку пересечения!");
  else {
    double xy1=x[1]*y[0]-x[0]*y[1];
    double xy2=x[3]*y[2]-x[2]*y[3];
    t[0]=NormalizeDouble((xy1*(x[3]-x[2])-xy2*(x[1]-x[0]))/z, 0);
    t[1]=(xy1*(y[3]-y[2])-xy2*(y[1]-y[0]))/z;
  }
}

Fonction SetRegression().

Cette fonction définit l'objet OBJ_REGRESSION du canal de régression linéaire sur le graphique actuel.

  • cl - Couleur de l'objet. Paramètre requis.
  • nm - Nom de l'objet. Lorsque la valeur par défaut est passée - "", l'heure d'ouverture de la barre actuelle est utilisée comme nom.
  • t1 - Première coordonnée du temps de réglage de l'objet. Valeur par défaut - 0 - temps d'ouverture de la dixième mesure.
  • t2 - Deuxième coordonnée du temps de réglage de l'objet. La valeur par défaut est 0 - le temps d'ouverture de la barre actuelle.
  • ry - Indicateur de la propriété BOW. La valeur par défaut est False.
  • st - Style de ligne. Les valeurs valides sont STYLE_SOLID (par défaut), STYLE_DASH, STYLE_DOT, STYLE_DASHDOT.
  • wd - Largeur de la ligne. La valeur par défaut est 1.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка объекта OBJ_REGRESSION канал линейной регрессии.     |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               ( ""   - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10])                      |
//|    t2 - время открытия бара        (  0   - Time[0])                       |
//|    ry - луч                        (False - по умолчанию)                  |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetRegression(color cl, string nm="", datetime t1=0, datetime t2=0,
                    bool ry=False, int st=STYLE_SOLID, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[10];
  if (t2<=0) t2=Time[0];
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_REGRESSION, 0, 0,0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1, t1);
  ObjectSet(nm, OBJPROP_TIME2, t2);
  ObjectSet(nm, OBJPROP_COLOR, cl);
  ObjectSet(nm, OBJPROP_RAY  , ry);
  ObjectSet(nm, OBJPROP_STYLE, st);
  ObjectSet(nm, OBJPROP_WIDTH, wd);
}
 

La fonction EquationDirect().

L'équation d'une ligne droite. Cette fonction calcule la valeur de l'ordonnée Y pour l'abscisse X à l'intersection avec une ligne tracée par deux points arbitraires du graphique. La fonction prend les paramètres obligatoires suivants :

  • x1, y1 - Coordonnées du premier point.
  • x2, y2 - Coordonnées du deuxième point.
  • x - Valeur, l'abscisse pour laquelle l'ordonnée Y doit être calculée.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Уравнение прямой.                                              |
//|             Вычисляет значение Y для X в точке пересечения с прямой.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x1,y1 - координаты первой точки,                                        |
//|    x2,y2 - координаты второй точки,                                        |
//|    x     - значение, для которого вычислить Y                              |
//+----------------------------------------------------------------------------+
double EquationDirect(double x1, double y1, double x2, double y2, double x) {
  if (x2==x1) return(y1);
  return((y2-y1)/(x2-x1)*(x-x1)+y1);
}

Fonction GetArrowInterval().

J'ai écrit cette fonction pour faciliter le développement des indicateurs de signaux, c'est-à-dire les indicateurs qui donnent des signaux clairs d'achat ou de vente. Le signal d'un tel indicateur se présente généralement sous la forme d'une flèche vers le bas au-dessus du Khai d'une barre ou d'une flèche vers le haut en dessous du bas de la barre correspondante. La valeur de "moins" et "plus" était généralement de quelques points, afin que la flèche ne "dépasse" pas la barre. Ce n'était pas un gros problème dans le cas d'un indicateur à un seul horizon temporel conçu pour les barres d'une heure seulement, par exemple. Pour chaque période de temps, j'avais différentes valeurs "under" et "over". Cependant, pour les indicateurs multi-trames, j'ai dû utiliser la fonction GetArrowInterval() :

//+------------------------------------------------------------------+
//| Возвращает интервал установки сигнальных указателей              |
//+------------------------------------------------------------------+
int GetArrowInterval() {
  int p = Period();

  switch (p) {
    case 1:     return(4);
    case 5:     return(5);
    case 15:    return(6);
    case 30:    return(8);
    case 60:    return(10);
    case 240:   return(20);
    case 1440:  return(40);
    case 10080: return(80);
    case 43200: return(150);
  }
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//+----------------------------------------------------------------------------+
//|  Описание : Возвращает интервал установки сигнальных указателей            |
//|  Параметры:                                                                |
//|    pr - процент относительно ценового размера окна                         |
//+----------------------------------------------------------------------------+
int GetArrowInterval(int pr=7) {
  if (pr<=0) pr=7;
  return((WindowPriceMax()-WindowPriceMin())/100*pr/Point);
}
 

Fonction FindNearFractal().

Cette fonction recherche la fractale la plus proche et renvoie son niveau de prix. La fonction accepte les paramètres facultatifs suivants :

  • sy - Nom de l'instrument. "" ou NULL - symbole actuel. La valeur par défaut est NULL.
  • tf - Période de temps. Valeur par défaut 0 - symbole actuel.
  • mode - Type de fractale. MODE_LOWER et MODE_UPPER sont autorisés. La valeur par défaut est MODE_BAS.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}

Fonction GetExtremumZZBar().

Cette fonction recherche un extremum de l'indicateur ZigZag standard personnalisé et renvoie le numéro de la barre. La fonction accepte les paramètres facultatifs suivants :

  • sy - Nom de l'instrument. "" ou NULL - le symbole actuel. La valeur par défaut est NULL.
  • tf - Période de temps. La valeur par défaut est 0 - l'horizon temporel actuel.
  • ne - Nombre extrême. 0 - dernier, 1 - précédent, 2 - précédent, etc.
  • dp, dv, bs - paramètres de ZigZaga : respectivement ExtDepth, ExtDeviation, ExtBackstep.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 07.10.2006                                                     |
//|  Описание : Возвращает номер бара экстремума ЗигЗага по его номеру.        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    tf - таймфрейм                  (      0     - текущий ТФ)              |
//|    ne - номер экстремума           (      0     - последний)               |
//|    dp - ExtDepth                                                           |
//|    dv - ExtDeviation                                                       |
//|    bs - ExtBackstep                                                        |
//+----------------------------------------------------------------------------+
int GetExtremumZZBar(string sy="", int tf=0, int ne=0, int dp=12, int dv=5, int bc=3) {
  if (sy=="" || sy=="0") sy=Symbol();
  double zz;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=0; i<k; i++) {
    zz=iCustom(sy, tf, "ZigZag", dp, dv, bc, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(i);
    }
  }
  Print("GetExtremumZZBar(): Экстремум ЗигЗага номер ",ne," не найден");
  return(-1);
}
 

Fonction GetExtremumZZZPrice().

Cette fonction recherche un extremum de l'indicateur ZigZag standard personnalisé et renvoie son niveau de prix. La fonction accepte les paramètres facultatifs suivants :

  • sy - Nom de l'instrument. "" ou NULL - symbole actuel. La valeur par défaut est NULL.
  • tf - Période de temps. Valeur par défaut 0 - symbole actuel.
  • ne - Nombre extrême. 0 - dernier, 1 - précédent, 2 - précédent, etc.
  • dp, dv, bs - paramètres de ZigZaga : ExtDepth, ExtDeviation, ExtBackstep.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 07.10.2006                                                     |
//|  Описание : Возвращает экстремум ЗигЗага по его номеру.                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    tf - таймфрейм                  (      0     - текущий ТФ)              |
//|    ne - номер экстремума           (      0     - последний)               |
//|    dp - ExtDepth                                                           |
//|    dv - ExtDeviation                                                       |
//|    bs - ExtBackstep                                                        |
//+----------------------------------------------------------------------------+
double GetExtremumZZPrice(string sy="", int tf=0, int ne=0, int dp=12, int dv=5, int bs=3) {
  if (sy=="" || sy=="0") sy=Symbol();
  double zz;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=1; i<k; i++) {
    zz=iCustom(sy, tf, "ZigZag", dp, dv, bs, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(zz);
    }
  }
  Print("GetExtremumZZPrice(): Экстремум ЗигЗага номер ",ne," не найден");
  return(0);
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 13.08.2008                                                     |
//|  Описание : Возвращает номер бара фрактала по его номеру.                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий ТФ)         |
//|    nf - номер фрактала                  (    0       - последний)          |
//+----------------------------------------------------------------------------+
int GetFractalBar(string sy="0", int tf=0, int nf=0) {
  if (sy=="" || sy=="0") sy=Symbol();
  double f=0;
  int    i, k=iBars(sy, tf), kf;

  for (i=2; i<k; i++) {
    f=iFractals(sy, tf, MODE_LOWER, i);
    if (f!=0) {
      kf++;
      if (kf>nf) return(i);
    }
    f=iFractals(sy, tf, MODE_UPPER, i);
    if (f!=0) {
      kf++;
      if (kf>nf) return(i);
    }
  }
  Print("GetFractalBar(): Фрактал не найден");
  return(-1);
}
 

Fonction GetNearestDownFractal().

Cette fonction recherche la fractale de fond la plus proche et renvoie son niveau de prix. La particularité de cette fonction est la possibilité de définir une formule arbitraire pour la fractale. La formule fractale standard, généralement acceptée, est 2-2. Cela signifie 2 barres à gauche et 2 barres à droite. Grâce à cette fonction, vous pouvez même réaliser des fractales très exotiques, comme 8-2 (8 barres à gauche et 2 barres à droite) ou 5-3 (5 barres à gauche et 3 barres à droite), etc. La fonction accepte les paramètres facultatifs suivants :

  • sy - Nom de l'instrument. "" ou NULL - symbole actuel. La valeur par défaut est NULL.
  • tf - Période de temps. Valeur par défaut 0 - symbole actuel.
  • nl - Nombre de barres à gauche. La valeur par défaut est 2.
  • nr - Nombre de barres à droite. Valeur par défaut - 2.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 07.10.2006                                                     |
//|  Описание : Возвращает ценовой уровень ближайшего нижнего фрактала         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    nl - количество баров слева                                             |
//|    nr - количество баров справа                                            |
//+----------------------------------------------------------------------------+
double GetNearestDownFractal(string sy="0", int tf=0, int nl=2, int nr=2) {
  bool f;
  int  fb, i, nb=-1;

  if (sy=="" || sy=="0") sy=Symbol();
  if (nl<1) nl=1;
  if (nr<1) nr=1;

  fb=nr;
  while (nb<0) {
    fb++;
    f=True;
    for (i=fb; i>fb-nr; i--) {
      if (iLow(sy, tf, i)>iLow(sy, tf, i-1)) { f=False; break; }
    }
    if (f) {
      for (i=fb; i<fb+nl; i++) {
        if (iLow(sy, tf, i)>iLow(sy, tf, i+1)) { f=False; break; }
      }
      if (f) { nb=fb; break; }
    }
  }

  return(iLow(sy, tf, nb));
}

Fonction GetNearestUpFractal().

Cette fonction recherche la fractale ascendante la plus proche et renvoie son niveau de prix. La particularité de cette fonction est la possibilité de définir une formule arbitraire pour la fractale. La formule fractale standard, généralement acceptée, est 2-2. Cela signifie 2 barres à gauche et 2 barres à droite. Grâce à cette fonction, vous pouvez même réaliser des fractales très exotiques, comme 8-2 (8 barres à gauche et 2 barres à droite) ou 5-3 (5 barres à gauche et 3 barres à droite), etc. La fonction accepte les paramètres facultatifs suivants :

  • sy - Nom de l'instrument. "" ou NULL - symbole actuel. La valeur par défaut est NULL.
  • tf - Période de temps. Valeur par défaut 0 - symbole actuel.
  • nl - Nombre de barres à gauche. La valeur par défaut est 2.
  • nr - Nombre de barres à droite. Valeur par défaut - 2.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 07.10.2006                                                     |
//|  Описание : Возвращает ближайший верхний фрактал                           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL - текущий символ)                 |
//|    tf - таймфрейм                  ( 0 - текущий таймфрейм)                |
//|    nl - количество баров слева                                             |
//|    nr - количество баров справа                                            |
//+----------------------------------------------------------------------------+
double GetNearestUpFractal(string sy="0", int tf=0, int nl=2, int nr=2) {
  bool f;
  int  fb, i, nb=-1;

  if (sy=="" || sy=="0") sy=Symbol();
  if (nl<1) nl=1;
  if (nr<1) nr=1;

  fb=nr;
  while (nb<0) {
    fb++;
    f=True;
    for (i=fb; i>fb-nr; i--) {
      if (iHigh(sy, tf, i)<iHigh(sy, tf, i-1)) { f=False; break; }
    }
    if (f) {
      for (i=fb; i<fb+nl; i++) {
        if (iHigh(sy, tf, i)<iHigh(sy, tf, i+1)) { f=False; break; }
      }
      if (f) { nb=fb; break; }
    }
  }

  return(iHigh(sy, tf, nb));
}
Raison: