Nur "Nützliche Funktionen von KimIV". - Seite 6

 

Die Funktion ArrayMin().

Diese Funktion gibt den Wert des kleinsten Elements des Arrays zurück.

  • x - Ein Array von Elementen des Typs double, in dem nach dem Mindestwert des Elements gesucht wird.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}
 

Die Funktion ArrayAvg().

Diese Funktion gibt den arithmetischen Durchschnitt der Arrayelemente zurück.

  • x - Ein Array von Elementen des Typs 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);
}

Die Funktion ArrayAvGeom().

Diese Funktion gibt das geometrische Mittel der Array-Elemente zurück.

  • x - Ein Array von Elementen des Typs 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);
}
 

Die Funktion SetHLine().

Diese Funktion setzt das horizontale Linienobjekt OBJ_HLINE auf dem aktuellen Diagramm.

  • cl - Farbe des Objekts OBJ_HLINE horizontale Linie. Erforderlicher Parameter.
  • nm - Objektname. Wenn der Standardwert "" übergeben wird, wird die Öffnungszeit des aktuellen Balkens als Objektname verwendet.
  • p1 - Preisniveau des Objekts. Standardwert - 0 - aktueller Geldkurs.
  • st - Linienstil. Zulässige Werte sind STYLE_SOLID (standardmäßig) - durchgezogene Linie, STYLE_DASH - gestrichelte Linie, STYLE_DOT - gestrichelte Linie, STYLE_DASHDOT - gestrichelte Linie, STYLE_DASHDOT - gestrichelte Linie mit Doppelpunkten.
  • wd - Linienstärke. Der Standardwert ist 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);
}

Die Funktion SetVLine().

Diese Funktion setzt die vertikale Linie des Objekts OBJ_VLINE im aktuellen Diagramm.

  • cl - Farbe des Objekts VERTICAL LINE. Obligatorischer Parameter.
  • nm - Objektname. Wenn der Standardwert - "" - übergeben wird , wird die Öffnungszeit des aktuellen Balkens als Objektname verwendet.
  • t1 - Objekt-Einstellzeit. Standardwert - 0 - aktuelle Öffnungszeit des Balkens.
  • st - Linienstil. Gültige Werte sind STYLE_SOLID (Standard), STYLE_DASH, STYLE_DOT, STYLE_DASHDOT.
  • wd - Linienbreite. Der Standardwert ist 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);
}
 

Die Funktion SetTLine().

Diese Funktion setzt das OBJ_TREND-Trendlinienobjekt auf dem aktuellen Chart.

  • cl - Farbe des TREND LINE Objekts. Dies ist ein obligatorischer Parameter.
  • nm - Objektname. Wenn der Standardwert - "" - übergeben wird , wird die Eröffnungszeit des aktuellen Balkens als Name verwendet.
  • t1 - Erste Koordinate der Objektsetzungszeit. Standardwert - 0 - Öffnungszeit des zehnten Taktes.
  • p1 - Erste Koordinate des Objekts, das den Preis festlegt. Standardwert - 0 - Minimum des zehnten Balkens.
  • t2 - Zweite Koordinate der Objektsetzungszeit. Standardwert - 0 - Öffnungszeit des aktuellen Taktes.
  • p2 - Zweite Koordinate des Objekts, das den Preis festlegt. Standardwert - 0 - aktueller Tiefstand.
  • ry - Flagge der Eigenschaft BLUE; der Standardwert ist False.
  • st - Linienstil. Gültige Werte sind STYLE_SOLID (Standard), STYLE_DASH, STYLE_DOT, STYLE_DASHDOT.
  • wd - Linienbreite. Der Standardwert ist 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);
}

Funktion SetTLineByAngle().

Diese Funktion setzt das Objekt OBJ_TRENDBYANGLE um den Neigungswinkel im aktuellen Diagramm.

  • cl - Farbe des TRENDBYANGLE-Objekts. Erforderlicher Parameter.
  • nm - Objektname. Wenn der Standardwert - "" - übergeben wird , wird die Eröffnungszeit des aktuellen Balkens als Name verwendet.
  • t1 - Erste Koordinate der Objektsetzungszeit. Standardwert - 0 - Öffnungszeit des zehnten Taktes.
  • p1 - Erste Koordinate des Objekts, das den Preis festlegt. Standardwert - 0 - Minimum des zehnten Balkens.
  • t2 - Zweite Koordinate der Objektsetzungszeit. Standardwert - 0 - Öffnungszeit des aktuellen Taktes.
  • p2 - Zweite Koordinate des Objekts, das den Preis festlegt. Dieser Parameter ist eine Art Schalter. Sein Wert ungleich Null setzt diese Funktion mit SetTLine() gleich, d. h. es wird eine Trendlinie unter Verwendung des Koordinatenpaars Zeit/Kurs gezeichnet, während der Wert des Neigungswinkels der Trendlinie ignoriert wird. Der Standardwert ist 0 - Trendlinienkonstruktion nach Steigungswinkel.
  • an - Neigungswinkel in Grad. Standardwert - 0 - Horizontale Linie.
  • ry - Kennzeichen der BOW-Eigenschaft; der Standardwert ist False.
  • st - Linienstil. Gültige Werte sind STYLE_SOLID (Standard), STYLE_DASH, STYLE_DOT, STYLE_DASHDOT.
  • wd - Linienbreite. Der Standardwert ist 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);
}
 

Die Funktion SetArrow().

Diese Funktion setzt das Objektsymbol OBJ_ARROW auf das aktuelle Diagramm.

  • cd - Icon-Code. Erforderlicher Parameter.
  • cl - Farbe des Symbols. Erforderlicher Parameter.
  • nm - Name des Objekts. Wenn der Standardwert - "" übertragen wird , wird die Eröffnungszeit des aktuellen Balkens als Name verwendet.
  • t1 - Erste Koordinate der Einstellzeit des Objekts. Standardwert - 0 - aktuelle Öffnungszeit des Balkens.
  • p1 - Erste Koordinate des Objekts, das den Preis festlegt. Standardwert - 0 - aktueller Geldkurs.
  • sz - Größe des Symbols. Standardwert - 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);
}

SetLabel() Funktion.

Diese Funktion setzt das OBJ_LABEL Textlabel-Objekt im aktuellen Diagramm.

  • nm - Name des Objekts. Erforderlicher Parameter.
  • tx - Text. Erforderlicher Parameter.
  • cl - Farbe der Markierung. Erforderlicher Parameter.
  • xd - X-Koordinate in Pixeln in Bezug auf den Referenzwinkel. Erforderlicher Parameter.
  • yd - Y-Koordinate in Pixeln, bezogen auf den Bezugswinkel. Obligatorischer Parameter.
  • cr - Nummer des Referenzwinkels. Gültige Werte: 0 oben-links, 1 oben-rechts, 2 unten-links, 3 unten-rechts. Der Standardwert ist 0.
  • fs - Schriftgröße. Der Standardwert ist 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);
}
 

Die Funktion CrossPointOfLines().

Diese Funktion berechnet die Koordinaten des Schnittpunkts zweier Linien, die jeweils durch ein Paar von Punktkoordinaten definiert sind. Drei Arrays werden als Parameter an die Funktion übergeben:

  • x - Feld der Abszisse. Sie sollte vier Elemente enthalten: x[0], x[1] - die Abszisse der ersten Zeile, x[2], x[3] - die Abszisse der zweiten Zeile.
  • y - Array von Ordinaten. Sollte vier Elemente enthalten: y[0], y[1] - die Ordinaten der ersten Zeile, y[0], y[1] - die Ordinaten der zweiten Zeile.
  • t - Array mit den Koordinaten des Schnittpunkts der beiden Linien. Nach der normalen Ausführung der Funktion enthält dieses Feld zwei Elemente: t[0] ist die Abszisse des Schnittpunkts der beiden Geraden und t[1] ist die Ordinate desselben Punkts.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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;
  }
}

Funktion SetRegression().

Diese Funktion setzt das OBJ_REGRESSION-Objekt des linearen Regressionskanals im aktuellen Diagramm.

  • cl - Farbe des Objekts. Erforderlicher Parameter.
  • nm - Name des Objekts. Wenn der Standardwert - "" - übergeben wird , wird die Eröffnungszeit des aktuellen Balkens als Name verwendet.
  • t1 - Erste Koordinate der Objektsetzungszeit. Standardwert - 0 - Öffnungszeit des zehnten Taktes.
  • t2 - Zweite Koordinate der Objektsetzungszeit. Der Standardwert ist 0 - die Öffnungszeit des aktuellen Balkens.
  • ry - Flagge der Eigenschaft BOW, Standardwert ist False.
  • st - Linienstil. Gültige Werte sind STYLE_SOLID (Standard), STYLE_DASH, STYLE_DOT, STYLE_DASHDOT.
  • wd - Linienbreite. Der Standardwert ist 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);
}
 

Die Funktion EquationDirect().

Die Gleichung einer Geraden. Diese Funktion berechnet den Wert der Ordinate Y für die Abszisse X im Schnittpunkt mit einer Linie, die durch zwei beliebige Punkte des Diagramms gezogen wird. Die Funktion benötigt die folgenden obligatorischen Parameter:

  • x1, y1 - Koordinaten des ersten Punktes.
  • x2, y2 - Koordinaten des zweiten Punktes.
  • x - Wert, die Abszisse, für die die Y-Ordinate berechnet werden soll.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}

GetArrowInterval() Funktion.

Ich habe diese Funktion geschrieben, um die Entwicklung von Signalindikatoren, d.h. von Indikatoren, die klare Kauf- oder Verkaufssignale geben, zu erleichtern. Das Signal eines solchen Indikators gebe ich in der Regel als Abwärtspfeil oberhalb des Khai eines Balkens oder als Aufwärtspfeil unterhalb des Tiefs des entsprechenden Balkens. Der Wert von "unter" und "über" war in der Regel ein paar Punkte, so dass der Pfeil nicht "über" den Balken laufen würde. Bei einem Indikator mit einem einzigen Zeitrahmen, der z. B. nur für eine Stunde ausgelegt ist, war das kein großes Problem. Für jeden Zeitrahmen hatte ich unterschiedliche Werte "unter" und "über". Für Multiframe-Indikatoren musste ich jedoch die Funktion GetArrowInterval() verwenden:

//+------------------------------------------------------------------+
//| Возвращает интервал установки сигнальных указателей              |
//+------------------------------------------------------------------+
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);
}
 

Funktion FindNearFractal().

Diese Funktion sucht nach dem nächstgelegenen Fraktal und gibt dessen Preisniveau zurück. Die Funktion akzeptiert die folgenden optionalen Parameter:

  • sy - Name des Instruments. "" oder NULL - aktuelles Symbol. Der Standardwert ist NULL.
  • tf - Zeitrahmen. Standardwert 0 - aktuelles Symbol.
  • mode - Fraktaler Typ. MODE_LOWER und MODE_UPPER sind erlaubt. Der Standardwert ist MODE_LOWER.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}

GetExtremumZZBar() Funktion.

Diese Funktion sucht nach einem Extremwert des standardmäßigen benutzerdefinierten ZigZag-Indikators und gibt die Taktnummer zurück. Die Funktion akzeptiert die folgenden optionalen Parameter:

  • sy - Name des Instruments. "" oder NULL - das aktuelle Symbol. Der Standardwert ist NULL.
  • tf - Zeitrahmen. Der Standardwert ist 0 - der aktuelle Zeitrahmen.
  • ne - Extreme Zahl. 0 - letzte, 1 - vorherige, 2 - vorherige, usw.
  • dp, dv, bs - ZigZaga-Parameter: ExtDepth, ExtDeviation bzw. 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);
}
 

GetExtremumZZZPrice() Funktion.

Diese Funktion sucht nach einem Extremum des standardmäßigen benutzerdefinierten ZigZag-Indikators und gibt dessen Kursniveau zurück. Die Funktion akzeptiert die folgenden optionalen Parameter:

  • sy - Name des Instruments. "" oder NULL - aktuelles Symbol. Der Standardwert ist NULL.
  • tf - Zeitrahmen. Standardwert 0 - aktuelles Symbol.
  • ne - Extreme Zahl. 0 - letzte, 1 - vorherige, 2 - vorherige, usw.
  • dp, dv, bs - ZigZaga-Parameter: 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);
}
 

GetNearestDownFractal() Funktion.

Diese Funktion sucht nach dem nächstgelegenen Bodenfraktal und gibt dessen Preisniveau zurück. Die Besonderheit dieser Funktion ist die Möglichkeit, eine beliebige Formel für das Fraktal festzulegen. Die allgemein anerkannte fraktale Standardformel lautet 2-2. Das bedeutet 2 Balken auf der linken Seite und 2 Balken auf der rechten Seite. Mit dieser Funktion können Sie auch sehr exotische Fraktale wie 8-2 (8 Takte auf der linken Seite und 2 Takte auf der rechten Seite) oder 5-3 (5 Takte auf der linken Seite und 3 Takte auf der rechten Seite) und so weiter erstellen. Die Funktion akzeptiert die folgenden optionalen Parameter:

  • sy - Name des Instruments. "" oder NULL - aktuelles Symbol. Der Standardwert ist NULL.
  • tf - Zeitrahmen. Standardwert 0 - aktuelles Symbol.
  • nl - Anzahl der Balken auf der linken Seite. Der Standardwert ist 2.
  • nr - Anzahl der Balken auf der rechten Seite. Standardwert - 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));
}

GetNearestUpFractal() Funktion.

Diese Funktion sucht nach dem nächstgelegenen aufsteigenden Fraktal und gibt dessen Preisniveau zurück. Die Besonderheit dieser Funktion ist die Möglichkeit, eine beliebige Formel für das Fraktal festzulegen. Die allgemein anerkannte fraktale Standardformel lautet 2-2. Das bedeutet 2 Balken auf der linken Seite und 2 Balken auf der rechten Seite. Mit dieser Funktion können Sie auch sehr exotische Fraktale wie 8-2 (8 Takte auf der linken Seite und 2 Takte auf der rechten Seite) oder 5-3 (5 Takte auf der linken Seite und 3 Takte auf der rechten Seite) und so weiter erstellen. Die Funktion akzeptiert die folgenden optionalen Parameter:

  • sy - Name des Instruments. "" oder NULL - aktuelles Symbol. Der Standardwert ist NULL.
  • tf - Zeitrahmen. Standardwert 0 - aktuelles Symbol.
  • nl - Anzahl der Balken auf der linken Seite. Der Standardwert ist 2.
  • nr - Anzahl der Balken auf der rechten Seite. Standardwert - 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));
}
Grund der Beschwerde: