KimIV의 유용한 기능 - 페이지 33

 

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

SetVLine() 함수 사용의 예.

  1. 현재 막대의 파란색 실선 수직선 .
     SetVLine ( Aqua ) ;
  2. 여덟 번째 마디의 라일락 굵은 선.
     SetVLine ( Magenta , "" , Time [ 8 ] , STYLE_SOLID , 3 ) ;
  3. 막대의 점선 그리드 14:00.
     for ( int i = 0 ; i < 7 ; i ++ ) {
       datetime dt = StrToTime (( TimeToStr ( TimeCurrent () - i * 1440 * 60 , TIME_DATE )) + " 14:00 " ) ;
       int nb = iBarShift ( NULL , 0 , dt , True ) ;
       SetVLine ( Coral , " VLine " + i , Time [ nb ] , STYLE_DOT ) ;
    }

추신. SetVLine() 함수를 테스트하기 위한 스크립트가 첨부되어 있습니다.

파일:
 
Geronimo писал (а) >>

철저하게. 다쿠유.

그림으로 보여주고 시도해 봅시다.

 
TheXpert писал (а) >>

그림으로 보여주고 시도해 봅시다.

예를 들어, RSI 및 중간선과 같이 지표가 설명하는 영역을 계산하는 사용자 정의 기능입니다.

정중선 아래의 곡선으로 둘러싸인 공간과 정중선 자체는 면적 -S1이고 정중선 위의 공간은 +S2입니다.

방해가 되지 않도록 https://www.mql5.com/ru/forum/109590 지점으로 이동했습니다.

 

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

SetTLine() 함수 사용의 예.

  1. 15 및 현재 막대의 저점을 통해 주황색 실선.
     SetTLine ( Orange , "" , Time [ 15 ] , Low [ 15 ] , 0 , Low [ 0 ] , True ) ;
  2. 35번째 및 10번째 막대의 고점을 통과하는 빨간색 추세선 .
     SetTLine ( Red , "" , Time [ 35 ] , High [ 35 ] , Time [ 10 ] , High [ 10 ]) ;
  3. 이전 이틀의 최고를 통해 라일락 두꺼운 빔.
     datetime d0 = StrToTime ( TimeToStr ( TimeCurrent () , TIME_DATE )) ;
    datetime d1 = TimeCurrent () - 24 * 60 * 60 ;
    while ( TimeDayOfWeek ( d1 ) == 0 || TimeDayOfWeek ( d1 ) == 6 ) d1 -= 24 * 60 * 60 ;
    d1 = StrToTime ( TimeToStr ( d1 , TIME_DATE )) ;
    datetime d2 = d1 - 24 * 60 * 60 ;
    while ( TimeDayOfWeek ( d2 ) == 0 || TimeDayOfWeek ( d2 ) == 6 ) d2 -= 24 * 60 * 60 ;
    d2 = StrToTime ( TimeToStr ( d2 , TIME_DATE )) ;
    int b2 = iBarShift ( NULL , 0 , d2 ) ;     // номер бара начала второго дня
    int b1 = iBarShift ( NULL , 0 , d1 ) ;     // номер бара начала первого дня
    int b0 = iBarShift ( NULL , 0 , d0 ) ;     // номер бара начала текущего дня
    int n2 = iHighest ( NULL , 0 , MODE_HIGH , b2 - b1 - 1 , b1 ) ;
    int n1 = iHighest ( NULL , 0 , MODE_HIGH , b1 - b0 - 1 , b0 ) ;
    datetime t1 = Time [ n2 ] ;
    double    p1 = High [ n2 ] ;
    datetime t2 = Time [ n1 ] ;
    double    p2 = High [ n1 ] ;
    SetTLine ( Magenta , "" , t1 , p1 , t2 , p2 , True , STYLE_SOLID , 3 ) ;

추신. SetTLine() 함수를 테스트하기 위한 스크립트가 첨부되어 있습니다.

파일:
 

Igor, 나는 당신을 더 경험이 풍부한 MQL4 코더로 말하고 있습니다.

나는 Kohonen의 네트워크에 대한 라이브러리를 작성하기 위해 앉았습니다.

가장 유연하고 편리한 방법으로 하고 싶지만 아직 극복하지 못하는 순간에 봉착했습니다.

예 1:

 int & value ; // так нельзя, интересует аналог на MQL4, если он есть
 
void AssignValue ( int & newValue )
{
   value = newValue ;
}
 
void SetValue ( int newValue )
{
   value = newValue ;
}
 
int init ()
{
   int someValue = 5 ;
   AssignValue ( someValue ) ;
   SetValue ( 10 ) ;
   Print ( someValue ) ; // очень хочется, чтобы вывелось 10
}

MQL4를 사용하여 이 작업을 수행할 수 있습니까? 그렇다면 어떻게 해야 합니까?



예2:

 void SetSize ( double & matrix [][] , int inSize , int outSize )
{
     // требуется установить размеры матрицы, не осилил
}
 
void Init ( double & matrix [][])
{
     // допустим, требуется проиниализировать всю матрицу значением 1, также не осилил
}

다시 말하지만, 이 작업을 수행할 수 있으면 코드를 제공하십시오. 이 예는 실현 가능한 것 같습니다.



미리 감사드립니다.

 
TheXpert писал (а) >>
가장 유연하고 편리한 방법으로 하고 싶지만 아직 극복하지 못하는 순간에 봉착했습니다.
예 1:
MQL4를 사용하여 이 작업을 수행할 수 있습니까? 그렇다면 어떻게 해야 합니까?

나는 당신이 포인터로 작업을 구성하고 싶다는 것을 이해했습니다. 한 변수가 다른 변수를 가리키게 하려면... 아니면 제가 잘못 이해한 걸까요? 필요한 것을 말로 설명하십시오.

엑스퍼트 작성 >>
예2:
다시 말하지만, 이 작업을 수행할 수 있으면 코드를 제공하십시오. 이 예는 실현 가능한 것 같습니다.
 void start ()
{
   double arr [ 3 ][ 2 ] ;
   Init ( arr ) ;
   for ( int i = 0 ; i < 3 ; i ++ )
   {
     for ( int j = 0 ; j < 2 ; j ++ )
     {
       Print ( " arr[ " , i , " ][ " , j , " ]= " , arr [ i ][ j ]) ;
     }
   }
}
void Init ( double & matrix [][])
{
   ArrayInitialize ( matrix , 1 ) ;
}
 
KimIV писал (а) >> 를 썼습니다.

나는 당신이 포인터로 작업을 구성하고 싶다는 것을 이해했습니다. 한 변수가 다른 변수를 가리키게 하려면... 아니면 제가 잘못 이해한 걸까요? 필요한 것을 말로 설명하십시오.

예, 그렇게.


두 번째 경우 - 임의의 값으로 초기화하는 것은 어떻습니까?

예, 여전히 동적 배열이 필요합니다.

 
TheXpert писал (а) >>
예, 그렇게.

MQL4의 포인터로는 어렵습니다. 직접적인 지원은 없습니다. 여기 포럼에서 누군가 배열을 사용하여 이 작업을 시도한 것 같습니다. 정확히 말할 수는 없습니다. 자신을 찾아라...

엑스퍼트 작성 >>
두 번째 경우 - 임의의 값으로 초기화하는 것은 어떻습니까?

MathRand()

엑스퍼트 작성 >>
예, 여전히 동적 배열이 필요합니다.
프로그래밍 방식으로 배열의 첫 번째 차원만 변경할 수 있습니다. ArrayResize() 함수. 두 번째, 세 번째 및 네 번째 차원은 하드코딩되어야 합니다.