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

 

GetNearestDownFractal() 함수 사용의 예.

  • 현재 차트에서 가장 가까운 상위 프랙탈의 가격 수준입니다. 프랙탈 공식 2-2(표준).
     Message ( GetNearestUpFractal ()) ;
  • USDJPY H1 차트에서 가장 가까운 상위 프랙탈의 가격 수준입니다. 프랙탈 공식은 5-2입니다.
     Message ( GetNearestUpFractal ( " USDJPY " , PERIOD_H1 , 5 )) ;
  • 현재 차트에서 가장 가까운 4-3 업 프랙탈의 가격 수준을 가로질러 수평선 을 그립니다.
     double p = GetNearestUpFractal ( NULL , 0 , 4 , 3 ) ;
    SetHLine ( Red , "" , p ) ; 

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

 

올바른TF() 함수.

나는 때때로 인디케이터나 어드바이저의 입력 매개변수에 잘못된 시간 프레임을 쉽게 지정할 수 있다는 것을 발견한 후 이 함수를 작성했습니다. 이는 정수 분과 같습니다. 예를 들어, 나는 60시간 대신에 50시간을 입력했습니다. 음... 일종의 놓쳤습니다. 따라서 iRSI() 함수는 잘못된 시간 프레임에 대해 0을 반환합니다. 다른 기능에 대해서는 확인하지 않았기 때문에 아무 말도 하지 않겠습니다. 그리고 부주의로 인한 내 자신의 실수로 인한 성가신 오해를 피하기 위해이 기능을 "바보"에 대한 기본 보호 기능으로 작성했습니다. 올바른 시간 프레임과 일치하는 "가장 가까운" 입력 매개변수를 조정하고 해당 값을 반환합니다.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 02.03.2008                                                     |
//|  Описание : Корректирует таймфрейм под ближайший поддерживаемый МТ4.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    TimeFrame - таймфрейм (количество секунд)      (0 - текущий ТФ)         |
//+----------------------------------------------------------------------------+
int CorrectTF ( int TimeFrame = 0 ) {
   if ( TimeFrame == 0 ) TimeFrame = Period () ;
   if ( TimeFrame < PERIOD_M5                          ) return ( PERIOD_M1 ) ;
   if ( TimeFrame >= PERIOD_M5   && TimeFrame < PERIOD_M15 ) return ( PERIOD_M5 ) ;
   if ( TimeFrame >= PERIOD_M15 && TimeFrame < PERIOD_M30 ) return ( PERIOD_M15 ) ;
   if ( TimeFrame >= PERIOD_M30 && TimeFrame < PERIOD_H1 ) return ( PERIOD_M30 ) ;
   if ( TimeFrame >= PERIOD_H1   && TimeFrame < PERIOD_H4 ) return ( PERIOD_H1 ) ;
   if ( TimeFrame >= PERIOD_H4   && TimeFrame < PERIOD_D1 ) return ( PERIOD_H4 ) ;
   if ( TimeFrame >= PERIOD_D1   && TimeFrame < PERIOD_W1 ) return ( PERIOD_D1 ) ;
   if ( TimeFrame >= PERIOD_W1   && TimeFrame < PERIOD_MN1 ) return ( PERIOD_W1 ) ;
   if ( TimeFrame >= PERIOD_MN1                          ) return ( PERIOD_MN1 ) ;
}
추신. 첨부된 것은 CorrectTF() 함수를 테스트하기 위한 스크립트입니다.
파일:
 

DateBeginQuarter() 함수.

이 함수는 숫자로 분기의 시작 날짜를 반환합니다. 예를 들어, 지금이 2008년 8월 27일이면 현재 분기의 시작 날짜는 2008년 7월 1일입니다. 이 함수는 현재 매개변수를 기준으로 한 분기의 수인 하나의 매개변수만 사용합니다. 예를 들어, 0 은 현재 분기, 1 은 다음 분기, -1 은 이전 분기입니다. 즉, 분기의 양수는 미래의 날짜를 요청하고 0과 음수는 과거의 날짜를 요청합니다. 반환 값은 1970년 1월 1일 00:00 이후 경과된 시간(초)입니다.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.05.2008                                                     |
//|  Описание : Возвращает дату начала квартала                                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|                                    (-2 - позапрошлый)                      |
//|                                    (-1 - прошлый)                          |
//|    nq - номер квартала             ( 0 - текущий)                          |
//|                                    ( 1 - следующий)                        |
//|                                    ( 2 - последующий)                      |
//+----------------------------------------------------------------------------+
datetime DateBeginQuarter ( int nq = 0 ) {
   int ye = Year () - MathFloor ( nq / 4 ) ;
   nq = MathMod ( nq , 4 ) ;
   int mo = Month () - MathMod ( Month () + 2 , 3 ) + 3 * nq ;
   if ( mo < 1 ) {
     mo += 12 ;
     ye --;
   }
   if ( mo > 12 ) {
     mo -= 12 ;
     ye ++;
   }

   return ( StrToTime ( ye + " . " + mo + " .01 " )) ;
}

PS Attached는 DateBeginQuarter() 함수를 테스트하기 위한 스크립트입니다.

파일:
 

DateOfMonday() 함수.

이 함수는 해당 주의 시작 날짜(월요일 날짜)를 숫자로 반환합니다. 예를 들어 지금이 2008년 8월 29일이면 현재 주의 시작 날짜는 2008년 8월 25일이 됩니다. 이 함수는 현재 매개변수에 상대적인 주의 수인 하나의 매개변수만 사용합니다. 예를 들어, 0 은 현재 주, 1 은 다음 주, -1 은 이전 주입니다. 즉, 양수 주 번호는 미래의 날짜를 요청하고 과거의 0 및 음수 날짜를 요청합니다. 반환 값은 1970년 1월 1일 00:00 이후 경과된 시간(초)입니다.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 13.05.2008                                                     |
//|  Описание : Возвращает дату понедельника по номеру недели                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|                                    (-2 - предпредыдущая неделя)            |
//|                                    (-1 - предыдущая неделя)                |
//|    nn - номер недели               ( 0 - текущая неделя)                   |
//|                                    ( 1 - следующая неделя)                 |
//|                                    ( 2 - последующая неделя)               |
//+----------------------------------------------------------------------------+
datetime DateOfMonday ( int nn = 0 ) {
   datetime dt = StrToTime ( TimeToStr ( TimeCurrent () , TIME_DATE )) ;

   while ( TimeDayOfWeek ( dt ) != 1 ) dt -= 24 * 60 * 60 ;
   dt += nn * 7 * 24 * 60 * 60 ;

   return ( dt ) ;
}

PS Attached는 DateOfMonday() 함수를 테스트하기 위한 스크립트입니다.

파일:
 

피보나치() 함수.

이 함수는 일련 번호로 피보나치 수열의 요소를 반환합니다.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 07.08.2008                                                     |
//|  Описание : Возвращает элемент ряда Фибоначчи по его порядковому номеру.   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    n - номер элемента ряда                                                 |
//+----------------------------------------------------------------------------+
int Fibonacci ( int n ) {
   int a = 0 , b = 0 , i = 1 , s = 0 ;

   if ( n == 1 ) s = 1 ;
   if ( n > 1 ) {
     s = 1 ;
     while ( i < n ) {
       i ++;
       a = b ;
       b = s ;
       s = a + b ;
     }
   }
   return ( s ) ;
}

PS Attached는 Fibonacci() 함수를 테스트하기 위한 스크립트입니다.

파일:
 

GetNameMA() 함수.

이 함수는 식별자로 MA 방법(이동 평균)의 이름을 반환합니다. 이 기능은 댓글, 지표의 메시지, 조언자에서 사용하기 편리합니다.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает наименование метода МА.                             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    mm - идентификатор метода МА                                            |
//+----------------------------------------------------------------------------+
string GetNameMA ( int mm ) {
   switch ( mm ) {
     case MODE_SMA : return ( " SMA " ) ;
     case MODE_EMA : return ( " EMA " ) ;
     case MODE_SMMA : return ( " SMMA " ) ;
     case MODE_LWMA : return ( " LWMA " ) ;
     default        : return ( " Unknown Method " ) ;
   }
}
 
KimIV писал (а) >> 를 썼습니다.

GetNameMA() 함수.

이 함수는 식별자로 MA 방법(이동 평균)의 이름을 반환합니다. 이 기능은 댓글, 지표의 메시지, 조언자에서 사용하기 편리합니다.

쪼꼬미라고 하지마세요....

 default        : return ( " Unknown Method " ) ;

꾸준하기만 하면 끝까지...
 
TheXpert писал (а) >>

쪼꼬미로 받아들이지 마세요....

안 돼요... 감사합니다! 결정된!

 
KimIV

안녕하세요 !

특급이 조금 수송하는 데 도움이됩니다.

그것은 주문의 감염을 열고 조건에 따라이 팩을 닫지 않습니다.

저것들. 거래가 하나뿐이면 그는 포즈에서 나올 것이고, 거래가 2개라면 그는 실속할 것입니다.

파일:
panzer.mq4  5 kb
 

GetPriceDiffInPoint() 함수.

이 함수는 숫자로 주어진 두 막대 사이의 가격 차이를 반환합니다. 이 기능을 개발한 목적은 코스 이동의 크기와 방향을 결정하는 것이었습니다. GetPriceDiffInPoint() 함수는 고려할 막대의 피벗 포인트(Open 또는 High 또는 Low 또는 Close)를 독립적으로 결정합니다. 이 함수는 다음과 같은 선택적 매개변수를 허용합니다.

  • sy - 도구 이름. "" 또는 NULL 은 현재 문자입니다. 기본값은 NULL 입니다.
  • tf - 기간. 기본값 0 은 현재 문자입니다.
  • n2 - 왼쪽 막대의 번호입니다. 기본값은 2 입니다.
  • n1 - 오른쪽 막대의 번호입니다. 기본값은 1 입니다.

반환 값:

  • 양수 - 막대 N2와 N1 사이에 비율이 증가했습니다.
  • 음수 - 막대 N2와 N1 사이에 비율이 감소했습니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает ценовую разницу в пунктах между двумя барами.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий таймфрейм)  |
//|    n2 - номер левого бара               (    2       - второй бар)         |
//|    n1 - номер правого бара              (    1       - первый бар)         |
//|  Возвращаемое значение:                                                    |
//|    положительное - между барами N2 и N1 был рост курса                     |
//|    отрицательное - между барами N2 и N1 было снижение курса                |
//+----------------------------------------------------------------------------+
int GetPriceDiffInPoint ( string sy = " 0 " , int tf = 0 , int n2 = 2 , int n1 = 1 ) {
   if ( sy == "" || sy == " 0 " ) sy = Symbol () ;
   double p = MarketInfo ( sy , MODE_POINT ) ;
   int      d = MarketInfo ( sy , MODE_DIGITS ) ;
   int      dd = 0 , k = iBars ( sy , tf ) ;

   if ( n1 > k || n2 > k )
     Print ( " GetPriceDiffInPoint(): Недостаточно баров для " , sy , " " , GetNameTF ( tf )) ;
   else {
     if ( n1 > 0 && n2 > 0 ) {
       int d1 = NormalizeDouble (( iHigh ( sy , tf , n1 ) - iLow ( sy , tf , n2 )) / p , d ) ;
       int d2 = NormalizeDouble (( iLow ( sy , tf , n1 ) - iHigh ( sy , tf , n2 )) / p , d ) ;

       if ( MathAbs ( d1 ) > MathAbs ( d2 )) dd = d1 ;
       if ( MathAbs ( d1 ) < MathAbs ( d2 )) dd = d2 ;
       if ( MathAbs ( d1 ) == MathAbs ( d2 )) {
         if ( iOpen ( sy , tf , n2 ) > iClose ( sy , tf , n1 )) dd = d2 ; else dd = d1 ;
       }
     }
   }

   return ( dd ) ;
}