"KimIV의 유용한 기능"만. - 페이지 6

 

ArrayMin() 함수.

이 함수는 배열의 최소 요소 값을 반환합니다.

  • x - 값으로 최소 요소 검색이 수행되는 double 유형의 요소 배열입니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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() 함수.

이 함수는 배열 요소의 산술 평균을 반환합니다.

  • x - 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);
}

ArrayAvGeom() 함수.

이 함수는 배열 요소의 기하 평균을 반환합니다.

  • x - 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);
}
 

SetHL() 함수.

이 함수는 OBJ_HLINE 객체를 현재 차트의 수평선으로 설정합니다.

  • cl - OBJ_HLINE 수평선 개체의 색상입니다. 필수 매개변수입니다.
  • nm - 개체의 이름입니다. 기본값 "" 을 전달할 때 현재 막대의 여는 시간이 이름으로 사용됩니다.
  • p1 - 객체 설정을 위한 가격 수준. 기본값은 0 - 현재 입찰 가격입니다.
  • st - 선 스타일. 유효한 값은 STYLE_SOLID (기본값) - 실선, STYLE_DASH - 파선, STYLE_DOT - 파선, STYLE_DASHDOT - 대시-도트 라인, STYLE_DASHDOTDOT - 이중 점이 있는 대시-도트 라인입니다.
  • wd - 선 두께. 기본값은 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);
}

SetVLine() 함수.

이 함수는 OBJ_VLINE 객체를 현재 차트의 수직선으로 설정합니다.

  • cl - VERTICAL LINE 객체의 색상. 필수 매개변수입니다.
  • nm - 개체의 이름입니다. 기본값을 전달할 때 - "" 현재 막대의 여는 시간이 이름으로 사용됩니다.
  • t1 - 개체의 설치 시간입니다. 기본값은 0 - 현재 막대의 여는 시간입니다.
  • st - 선 스타일. 유효한 값은 STYLE_SOLID (기본값), STYLE_DASH , STYLE_DOT , STYLE_DASHDOT , STYLE_DASHDOTDOT 입니다.
  • wd - 선 두께. 기본값은 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);
}
 

SetTline() 함수.

이 함수는 OBJ_TREND 개체를 현재 차트의 추세선으로 설정합니다.

  • cl - TREND LINE 개체의 색상입니다. 필수 매개변수입니다.
  • nm - 개체의 이름입니다. 기본값을 전달할 때 - "" 현재 막대의 여는 시간이 이름으로 사용됩니다.
  • t1 - 개체 설치 시간의 첫 번째 좌표입니다. 기본값은 0 - 열 번째 막대 여는 시간입니다.
  • p1 - 객체 설치 가격의 첫 번째 좌표. 기본값은 0 - 낮은 10번째 막대입니다.
  • t2 - 개체 설치 시간의 두 번째 좌표입니다. 기본값은 0 - 현재 막대의 여는 시간입니다.
  • p2 - 물체의 설치 가격의 두 번째 좌표. 기본값은 0 - 현재 막대의 최저값입니다.
  • ry - 플래그 속성 RAY. 기본값은 False 입니다.
  • st - 선 스타일. 유효한 값은 STYLE_SOLID (기본값), STYLE_DASH , STYLE_DOT , STYLE_DASHDOT , STYLE_DASHDOTDOT 입니다.
  • wd - 선 두께. 기본값은 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);
}

SetTLineByAngle() 함수.

이 함수는 현재 차트의 기울기에 따라 추세선의 OBJ_TRENDBYANGLE 객체를 설정합니다.

  • cl - TREND LINE 개체의 색상입니다. 필수 매개변수입니다.
  • nm - 개체의 이름입니다. 기본값을 전달할 때 - "" 현재 막대의 여는 시간이 이름으로 사용됩니다.
  • t1 - 개체 설치 시간의 첫 번째 좌표입니다. 기본값은 0 - 열 번째 막대 여는 시간입니다.
  • p1 - 객체 설치 가격의 첫 번째 좌표. 기본값은 0 - 낮은 10번째 막대입니다.
  • t2 - 개체 설치 시간의 두 번째 좌표입니다. 기본값은 0 - 현재 막대의 여는 시간입니다.
  • p2 - 물체의 설치 가격의 두 번째 좌표. 이 매개변수는 일종의 스위치입니다. 0이 아닌 값은 이 함수를 SetTLine() 함수와 동일시합니다. 즉, 추세선은 시간/가격 좌표 쌍을 사용하여 그려지고 추세선 기울기 값은 무시됩니다. 기본값은 0 입니다. 기울기를 기반으로 추세선을 만듭니다.
  • - 경사각(도). 기본값 - 0 - 수평선.
  • ry - 플래그 속성 RAY. 기본값은 False 입니다.
  • st - 선 스타일. 유효한 값은 STYLE_SOLID (기본값), STYLE_DASH , STYLE_DOT , STYLE_DASHDOT , STYLE_DASHDOTDOT 입니다.
  • wd - 선 두께. 기본값은 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);
}
 

SetArrow() 함수.

이 함수는 개체 의 OBJ_ARROW 아이콘을 현재 차트로 설정합니다.

  • cd - 아이콘 코드. 필수 매개변수입니다.
  • cl - 아이콘 색상. 필수 매개변수입니다.
  • nm - 개체의 이름입니다. 기본값을 전달할 때 - "" 현재 막대의 여는 시간이 이름으로 사용됩니다.
  • t1 - 개체 설치 시간의 첫 번째 좌표입니다. 기본값은 0 - 현재 막대의 여는 시간입니다.
  • p1 - 객체 설치 가격의 첫 번째 좌표. 기본값은 0 - 현재 입찰 가격입니다.
  • sz - 아이콘 크기. 기본값은 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() 함수.

이 함수는 OBJ_LABEL 개체를 현재 차트의 텍스트 레이블로 설정합니다.

  • nm - 개체의 이름입니다. 필수 매개변수입니다.
  • tx - 텍스트. 필수 매개변수입니다.
  • cl - 레이블 색상. 필수 매개변수입니다.
  • xd - 앵커 각도를 기준으로 한 픽셀 단위의 X 좌표입니다. 필수 매개변수입니다.
  • yd - 앵커 각도를 기준으로 한 픽셀 단위의 Y 좌표입니다. 필수 매개변수입니다.
  • cr - 앵커 각도 번호. 유효한 값: 0 - 왼쪽 상단, 1 - 오른쪽 상단, 2 - 왼쪽 하단, 3 - 오른쪽 하단. 기본값은 0 입니다.
  • fs - 글꼴 크기. 기본값은 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);
}
 

CrossPointOfLines() 함수.

이 함수는 두 선이 교차하는 지점의 좌표를 계산합니다. 각 선은 점의 좌표 쌍으로 정의됩니다. 세 개의 배열이 매개변수로 함수에 전달됩니다.

  • x - 가로 좌표의 배열. x[0] , x[1] - 첫 번째 줄의 가로 좌표, x[2] , x[3] - 두 번째 줄의 가로 좌표의 네 가지 요소를 포함해야 합니다.
  • y - 좌표 배열. 4개의 요소를 포함해야 합니다. y[0] , y[1] - 첫 번째 라인의 좌표, y[0] , y[1] - 두 번째 라인의 좌표.
  • t - 두 선의 필요한 교차점의 좌표 배열입니다. 함수가 정상적으로 실행된 후 이 배열에는 두 개의 요소가 포함됩니다. t[0] - 두 선의 원하는 교차점의 가로 좌표 및 t[1] - 동일한 점의 세로 좌표.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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() 함수.

이 함수는 OBJ_REGRESSION 개체를 현재 차트의 선형 회귀 채널로 설정합니다.

  • cl - 개체의 색상입니다. 필수 매개변수입니다.
  • nm - 개체의 이름입니다. 기본값을 전달할 때 - "" 현재 막대의 여는 시간이 이름으로 사용됩니다.
  • t1 - 개체 설치 시간의 첫 번째 좌표입니다. 기본값은 0 - 열 번째 막대가 열리는 시간입니다.
  • t2 - 개체 설치 시간의 두 번째 좌표입니다. 기본값은 0 - 현재 막대의 여는 시간입니다.
  • ry - RAY 속성의 플래그입니다. 기본값은 False 입니다.
  • st - 선 스타일. 유효한 값은 STYLE_SOLID (기본값), STYLE_DASH , STYLE_DOT , STYLE_DASHDOT , STYLE_DASHDOTDOT 입니다.
  • wd - 선 두께. 기본값은 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);
}
 

EquationDirect() 함수.

직선의 방정식. 이 함수는 그래프의 임의의 두 점을 통해 그린 직선과의 교차점에서 X 의 가로 좌표에 대한 Y- 좌표 값을 계산합니다. 이 함수는 다음 필수 매개변수를 허용합니다.

  • x1 , y1 - 첫 번째 점의 좌표입니다.
  • x2 , y2 - 두 번째 점의 좌표입니다.
  • x - 가로 좌표가 Y 세로 좌표를 계산하는 값입니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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() 함수.

신호 표시기, 즉 출력에서 명확한 매수 또는 매도 신호를 제공하는 지표 개발의 편의성을 개선하기 위해 이 함수를 작성했습니다. 나는 일반적으로 해당 막대 의 고점 위의 아래쪽 화살표 형태 또는 해당 막대의 저점 아래의 위쪽 화살표 형태로 이러한 표시기의 신호를 만듭니다. 화살표가 막대에 "달리지 않도록" 여러 점을 일반적으로 "아래" 및 "위" 값으로 사용했습니다. 예를 들어 몇 시간 동안만 의도된 단일 기간 표시기의 경우에는 특별한 문제가 없었습니다. 각 기간에 대해 저만의 "아래" 및 "위" 값이 있었습니다. 그러나 다중 프레임 표시기의 경우 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 );
}
 

FindNearFractal() 함수.

이 함수는 가장 가까운 프랙탈을 검색하고 해당 가격 수준을 반환합니다. 이 함수는 다음과 같은 선택적 매개변수를 허용합니다.

  • sy - 도구 이름. "" 또는 NULL 은 현재 문자입니다. 기본값은 NULL 입니다.
  • tf - 기간. 기본값 0 은 현재 문자입니다.
  • 모드 - 프랙탈 유형입니다. 유효한 값은 MODE_LOWERMODE_UPPER 입니다. 기본값은 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() 함수.

이 함수는 표준 사용자 지정 ZigZag 표시기 의 극한값을 검색하고 막대 번호를 반환합니다. 이 함수는 다음과 같은 선택적 매개변수를 허용합니다.

  • sy - 도구 이름. "" 또는 NULL 은 현재 문자입니다. 기본값은 NULL 입니다.
  • tf - 기간. 기본값 0 - 현재 기간.
  • ne - 극한 포인트 번호. 0 - 마지막, 1 - 이전, 2 - 이전 등
  • dp , dv , bs - 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                                                        |
//+----------------------------------------------------------------------------+
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() 함수.

이 함수는 표준 사용자 지정 ZigZag 표시기 의 극한값을 검색하고 해당 가격 수준을 반환합니다. 이 함수는 다음과 같은 선택적 매개변수를 허용합니다.

  • sy - 도구 이름. "" 또는 NULL 은 현재 문자입니다. 기본값은 NULL 입니다.
  • tf - 기간. 기본값 0 은 현재 문자입니다.
  • ne - 극한 포인트 번호. 0 - 마지막, 1 - 이전, 2 - 이전 등
  • dp , dv , bs - 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 );
}
 

GetNearestDownFractal() 함수.

이 함수는 가장 가까운 다운 프랙탈을 검색하고 해당 가격 수준을 반환합니다. 이 함수의 특징은 임의의 프랙탈 공식을 설정하는 기능입니다. 일반적으로 허용되는 표준 프랙탈 공식은 다음과 같습니다. 2-2. 즉, 왼쪽에 2개의 막대와 오른쪽에 2개의 막대가 있습니다. 그리고 이 기능을 사용하면 8-2(왼쪽에 8개, 오른쪽에 2개), 5-3(왼쪽에 5개, 오른쪽에 3개) 등과 같은 매우 이국적인 프랙탈을 설정할 수도 있습니다. . 이 함수는 다음과 같은 선택적 매개변수를 허용합니다.

  • sy - 도구 이름. "" 또는 NULL 은 현재 문자입니다. 기본값은 NULL 입니다.
  • tf - 기간. 기본값 0 은 현재 문자입니다.
  • nl - 왼쪽에 있는 막대의 수입니다 . 기본값은 2 입니다.
  • nr - 오른쪽에 있는 막대의 수입니다. 기본값은 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() 함수.

이 함수는 가장 가까운 상향 프랙탈을 검색하고 해당 가격 수준을 반환합니다. 이 함수의 특징은 임의의 프랙탈 공식을 설정하는 기능입니다. 일반적으로 허용되는 표준 프랙탈 공식은 다음과 같습니다. 2-2. 즉, 왼쪽에 2개의 막대와 오른쪽에 2개의 막대가 있습니다. 그리고 이 기능을 사용하면 8-2(왼쪽에 8개, 오른쪽에 2개), 5-3(왼쪽에 5개, 오른쪽에 3개) 등과 같은 매우 이국적인 프랙탈을 설정할 수도 있습니다. . 이 함수는 다음과 같은 선택적 매개변수를 허용합니다.

  • sy - 도구 이름. "" 또는 NULL 은 현재 문자입니다. 기본값은 NULL 입니다.
  • tf - 기간. 기본값 0 은 현재 문자입니다.
  • nl - 왼쪽에 있는 막대의 수입니다. 기본값은 2 입니다.
  • nr - 오른쪽에 있는 막대의 수입니다. 기본값은 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));
}