Yalnızca "KimIV'ten Faydalı özellikler". - sayfa 6

 

ArrayMin() işlevi.

Bu işlev , bir dizinin minimum öğesinin değerini döndürür.

  • x - Minimum öğenin değere göre arandığı, double türünde bir öğe dizisi.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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 );
}
 

ArrayAvg() işlevi.

Bu işlev , bir dizinin öğelerinin aritmetik ortalamasını döndürür.

  • x - double türünde bir dizi öğe.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}

ArrayAvGeom() işlevi.

Bu işlev, dizi öğelerinin geometrik ortalamasını döndürür.

  • x - double türünde bir dizi öğe.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}
 

SetHL() işlevi.

Bu işlev, OBJ_HLINE nesnesini geçerli çizelgede yatay bir çizgiye ayarlar.

  • cl - OBJ_HLINE yatay çizgi nesnesinin rengi. Gerekli parametre.
  • nm - Nesnenin adı. Varsayılan değeri "" geçerken ad olarak mevcut çubuğun açılış zamanı kullanılır.
  • p1 - Nesneyi ayarlamak için fiyat seviyesi. Varsayılan değer 0'dır - mevcut Teklif fiyatı.
  • st - Çizgi stili. Geçerli değerler STYLE_SOLID (varsayılan) - düz çizgi, STYLE_DASH - kesikli çizgi, STYLE_DOT - kesikli çizgi, STYLE_DASHDOT - çizgi-nokta çizgi, STYLE_DASHDOTDOT - çift noktalı çizgi-nokta çizgisidir.
  • wd - Çizgi kalınlığı. Varsayılan değer 0'dır .
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}

SetVLine() işlevi.

Bu işlev, OBJ_VLINE nesnesini geçerli çizelgede dikey bir çizgiye ayarlar.

  • cl - DİKEY HATTI nesnesinin rengi. Gerekli parametre.
  • nm - Nesnenin adı. Varsayılan değeri - "" geçerken ad olarak mevcut çubuğun açılış zamanı kullanılır.
  • t1 - Nesnenin kurulum süresi. Varsayılan değer 0'dır - mevcut çubuğun açılma zamanı.
  • st - Çizgi stili. Geçerli değerler STYLE_SOLID (varsayılan), STYLE_DASH , STYLE_DOT , STYLE_DASHDOT , STYLE_DASHDOTDOT .
  • wd - Çizgi kalınlığı. Varsayılan değer 1'dir .
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}
 

SetTline() işlevi.

Bu işlev, OBJ_TREND nesnesini geçerli grafikteki eğilim çizgisine ayarlar.

  • cl - TREND LINE nesnesinin rengi. Gerekli parametre.
  • nm - Nesnenin adı. Varsayılan değeri - "" geçerken ad olarak mevcut çubuğun açılış zamanı kullanılır.
  • t1 - Nesnenin kurulum süresinin ilk koordinatı. Varsayılan değer 0 - onuncu çubuğun açılma zamanı.
  • p1 - Nesnenin kurulum fiyatının ilk koordinatı. Varsayılan değer 0 - onuncu çubuk düşük.
  • t2 - Nesnenin kurulum süresinin ikinci koordinatı. Varsayılan değer 0'dır - mevcut çubuğun açılma zamanı.
  • p2 - Nesnenin kurulum fiyatının ikinci koordinatı. Varsayılan değer 0 - mevcut çubuğun en düşük değeridir.
  • ry - RAY özelliğini işaretler. Varsayılan değer False'dır .
  • st - Çizgi stili. Geçerli değerler STYLE_SOLID (varsayılan), STYLE_DASH , STYLE_DOT , STYLE_DASHDOT , STYLE_DASHDOTDOT .
  • wd - Çizgi kalınlığı. Varsayılan değer 1'dir .
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}

SetTLineByAngle() işlevi.

Bu fonksiyon, trend çizgisinin OBJ_TRENDBYANGLE nesnesini mevcut grafiğin eğimine göre ayarlar.

  • cl - TREND LINE nesnesinin rengi. Gerekli parametre.
  • nm - Nesnenin adı. Varsayılan değeri - "" geçerken ad olarak mevcut çubuğun açılış zamanı kullanılır.
  • t1 - Nesnenin kurulum süresinin ilk koordinatı. Varsayılan değer 0 - onuncu çubuğun açılma zamanı.
  • p1 - Nesnenin kurulum fiyatının ilk koordinatı. Varsayılan değer 0 - onuncu çubuk düşük.
  • t2 - Nesnenin kurulum süresinin ikinci koordinatı. Varsayılan değer 0'dır - mevcut çubuğun açılma zamanı.
  • p2 - Nesnenin kurulum fiyatının ikinci koordinatı. Bu parametre bir çeşit anahtardır. Sıfır olmayan değeri, bu işlevi SetTLine() işlevine eşitler, yani eğilim çizgisi zaman/fiyat koordinat çifti kullanılarak çizilir ve eğilim çizgisi eğiminin değeri yok sayılır. Varsayılan değer 0'dır - eğime dayalı bir trend çizgisi oluşturma.
  • an - Derece cinsinden eğim açısı. Varsayılan değer - 0 - yatay çizgi.
  • ry - RAY özelliğini işaretler. Varsayılan değer False'dır .
  • st - Çizgi stili. Geçerli değerler STYLE_SOLID (varsayılan), STYLE_DASH , STYLE_DOT , STYLE_DASHDOT , STYLE_DASHDOTDOT .
  • wd - Çizgi kalınlığı. Varsayılan değer 1'dir .
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}
 

SetArrow() işlevi.

Bu işlev, nesnenin OBJ_ARROW simgesini geçerli grafiğe ayarlar.

  • cd - Simge kodu. Gerekli parametre.
  • cl - Simge rengi. Gerekli parametre.
  • nm - Nesnenin adı. Varsayılan değeri - "" geçerken ad olarak mevcut çubuğun açılış zamanı kullanılır.
  • t1 - Nesnenin kurulum süresinin ilk koordinatı. Varsayılan değer 0'dır - mevcut çubuğun açılma zamanı.
  • p1 - Nesnenin kurulum fiyatının ilk koordinatı. Varsayılan değer 0'dır - mevcut Teklif fiyatı.
  • sz - Simge boyutu. Varsayılan değer 0'dır .
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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() işlevi.

Bu işlev, OBJ_LABEL nesnesini geçerli grafikte bir metin etiketine ayarlar.

  • nm - Nesnenin adı. Gerekli parametre.
  • tx - Metin. Gerekli parametre.
  • cl - Etiket rengi. Gerekli parametre.
  • xd - Bağlantı açısına göre piksel cinsinden X koordinatı. Gerekli parametre.
  • yd - Bağlantı açısına göre piksel cinsinden Y koordinatı. Gerekli parametre.
  • cr - Ankraj açısı numarası. Geçerli değerler: 0 - sol üst, 1 - sağ üst, 2 - sol alt, 3 - sağ alt. Varsayılan değer 0'dır .
  • fs - Yazı tipi boyutu. Varsayılan değer 9'dur .
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}
 

CrossPointOfLines() işlevi.

Bu fonksiyon iki doğrunun kesiştiği noktanın koordinatlarını hesaplar. Her çizgi, noktalarının bir çift koordinatıyla tanımlanır. İşleve parametre olarak üç dizi iletilir:

  • x - Bir dizi apsis. Dört öğe içermelidir: x[0] , x[1] - ilk satırın apsisi, x[2] , x[3] - ikinci satırın apsisi.
  • y - Bir dizi koordinat. Dört öğe içermelidir: y[0] , y[1] - ilk satırın koordinatları, y[0] , y[1] - ikinci satırın koordinatları.
  • t - İki çizginin gerekli kesişme noktasının bir koordinat dizisi. İşlevin normal yürütülmesinden sonra, bu dizi iki öğe içerecektir: t[0] - iki çizginin istenen kesişme noktasının apsisi ve t[1] - aynı noktanın ordinatı.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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;
  }
}

SetRegression() işlevi.

Bu işlev, OBJ_REGRESSION nesnesini geçerli çizelgede doğrusal regresyon kanalına ayarlar.

  • cl - Nesnenin rengi. Gerekli parametre.
  • nm - Nesnenin adı. Varsayılan değeri - "" geçerken ad olarak mevcut çubuğun açılış zamanı kullanılır.
  • t1 - Nesnenin kurulum süresinin ilk koordinatı. Varsayılan değer 0 - onuncu çubuğun açılma zamanı.
  • t2 - Nesnenin kurulum süresinin ikinci koordinatı. Varsayılan değer 0'dır - mevcut çubuğun açılma zamanı.
  • ry - RAY özelliğinin bayrağı. Varsayılan değer False'dır .
  • st - Çizgi stili. Geçerli değerler STYLE_SOLID (varsayılan), STYLE_DASH , STYLE_DOT , STYLE_DASHDOT , STYLE_DASHDOTDOT .
  • wd - Çizgi kalınlığı. Varsayılan değer 1'dir .
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}
 

EquationDirect() işlevi.

Düz bir çizginin denklemi. Bu fonksiyon, grafikte rastgele iki noktadan çizilen düz bir çizgi ile kesişme noktasında X'in apsisi için Y koordinatının değerini hesaplar. İşlev, aşağıdaki gerekli parametreleri kabul eder:

  • x1 , y1 - İlk noktanın koordinatları.
  • x2 , y2 - İkinci noktanın koordinatları.
  • x - Apsisi Y koordinatını hesaplayacak değer.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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() işlevi.

Bu işlevi, sinyal göstergeleri, yani çıktıda net bir alım veya satım sinyali veren göstergeler geliştirmenin kolaylığını artırmak için yazdım. Genellikle böyle bir göstergenin sinyalini, ilgili çubuğun üst kısmının üzerinde bir aşağı ok şeklinde veya ilgili çubuğun alt kısmının altında bir yukarı ok şeklinde yaparım. Okun çubuğa "girmemesi" için genellikle "altında" ve "yukarıda" değerler olarak birkaç nokta alındı. Örneğin, yalnızca saatlerce amaçlanan tek bir zaman dilimi göstergesi durumunda özel bir sorun yoktu. Her zaman dilimi için kendi "altında" ve "üstünde" değerlerim vardı. Ancak çoklu çerçeve göstergeleri için GetArrowInterval() işlevinin hizmetlerini kullanmak zorunda kaldım:

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

FindNearFractal() işlevi.

Bu fonksiyon en yakın fraktalı arar ve fiyat seviyesini döndürür. İşlev, aşağıdaki isteğe bağlı parametreleri kabul eder:

  • sy - Araç adı. "" veya NULL geçerli karakterdir. Varsayılan değer NULL'dur .
  • tf - Zaman çerçevesi. Varsayılan değer 0 , geçerli karakterdir.
  • mod - Fraktal türü. Geçerli değerler MODE_LOWER ve MODE_UPPER'dir . Varsayılan değer MODE_LOWER'dır .
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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() işlevi.

Bu işlev, standart özel ZigZag göstergesinin uç noktasını arar ve çubuk numarasını döndürür. İşlev, aşağıdaki isteğe bağlı parametreleri kabul eder:

  • sy - Araç adı. "" veya NULL geçerli karakterdir. Varsayılan değer NULL'dur .
  • tf - Zaman çerçevesi. Varsayılan değer 0 - mevcut zaman dilimi.
  • ne - Uç nokta numarası. 0 - son, 1 - önceki, 2 - önceki vb.
  • dp , dv , bs - ZigZaga parametreleri: Sırasıyla 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 );
}
 

GetExtremumZZPrice() işlevi.

Bu işlev, standart özel ZigZag göstergesinin uç noktasını arar ve fiyat seviyesini döndürür. İşlev, aşağıdaki isteğe bağlı parametreleri kabul eder:

  • sy - Araç adı. "" veya NULL geçerli karakterdir. Varsayılan değer NULL'dur .
  • tf - Zaman çerçevesi. Varsayılan değer 0 , geçerli karakterdir.
  • ne - Aşırı sayı. 0 - son, 1 - önceki, 2 - önceki vb.
  • dp , dv , bs - ZigZaga parametreleri: 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() işlevi.

Bu fonksiyon en yakın aşağı fraktalını arar ve fiyat seviyesini döndürür. Bu işlevin bir özelliği, keyfi bir fraktal formül ayarlama yeteneğidir. Standart, genel olarak kabul edilen fraktal formül bu 2-2'ye benziyor. Bu, solda 2 çubuk ve sağda 2 çubuk anlamına gelir. Ve bu işlevi kullanarak, 8-2 (solda 8 çubuk ve sağda 2 çubuk), 5-3 (solda 5 çubuk ve sağda 3 çubuk), vb. gibi çok egzotik fraktallar bile ayarlayabilirsiniz. . İşlev, aşağıdaki isteğe bağlı parametreleri kabul eder:

  • sy - Araç adı. "" veya NULL geçerli karakterdir. Varsayılan değer NULL'dur .
  • tf - Zaman çerçevesi. 0'ın varsayılan değeri geçerli karakterdir.
  • nl - Soldaki çubuk sayısı . Varsayılan değer 2'dir .
  • nr - Sağdaki çubuk sayısı. Varsayılan değer 2'dir .
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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() işlevi.

Bu fonksiyon en yakın yukarı fraktal arar ve fiyat seviyesini döndürür. Bu işlevin bir özelliği, keyfi bir fraktal formül ayarlama yeteneğidir. Standart, genel olarak kabul edilen fraktal formül bu 2-2'ye benziyor. Bu, solda 2 çubuk ve sağda 2 çubuk anlamına gelir. Ve bu işlevi kullanarak, 8-2 (solda 8 çubuk ve sağda 2 çubuk), 5-3 (solda 5 çubuk ve sağda 3 çubuk), vb. gibi çok egzotik fraktallar bile ayarlayabilirsiniz. . İşlev, aşağıdaki isteğe bağlı parametreleri kabul eder:

  • sy - Araç adı. "" veya NULL geçerli karakterdir. Varsayılan değer NULL'dur .
  • tf - Zaman çerçevesi. 0'ın varsayılan değeri geçerli karakterdir.
  • nl - Soldaki çubuk sayısı. Varsayılan değer 2'dir .
  • nr - Sağdaki çubuk sayısı. Varsayılan değer 2'dir .
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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));
}
Neden: