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

 
KimIV писал (а) >> 를 썼습니다.

isLossLastPos() 함수.

이 함수는 마지막으로 마감된 포지션의 수익성 플래그를 반환합니다. 플래그 제기 - True - 마지막 위치가 손실로 마감되었습니다. 플래그가 생략됨 - False - 마지막 위치가 0 또는 이익으로 마감되었습니다. 이 기능은 스왑 및 커미션을 고려하지 않습니다. 위치 선택은 외부 매개변수에 의해 설정됩니다.

  • sy - 시장 상품의 이름. 이 매개변수를 설정하면 이 기능은 지정된 도구의 위치만 고려합니다. 기본값은 "" 는 모든 시장 상품을 의미합니다. NULL 은 현재 기기를 의미합니다.
  • op - 거래 작업, 위치 유형. 유효한 값: OP_BUY , OP_SELL 또는 -1 . 기본값 -1 은 임의의 위치를 의미합니다.
  • mn - 위치 ID, MagicNumber. 기본값 -1 은 모든 식별자를 의미합니다.
PS Attached는 isLossLastPos() 함수를 테스트하기 위한 스크립트입니다.

마지막 마감 포지션과 관련된 수많은 기능을 생성하지 않기 위해 다음 옵션을 제안합니다.

 int LastClosePos ( string sy = "" , int op =- 1 , int mn =- 1 ) {
   datetime t ;
   int        i , j =- 1 , k = OrdersHistoryTotal () ;

   if ( sy == " 0 " ) sy = Symbol () ;
   for ( i = 0 ; i < k ; i ++ ) {
     if ( OrderSelect ( i , SELECT_BY_POS , MODE_HISTORY )) {
       if ( OrderSymbol () == sy || sy == "" ) {
         if ( OrderType () == OP_BUY || OrderType () == OP_SELL ) {
           if ( op < 0 || OrderType () == op ) {
             if ( mn < 0 || OrderMagicNumber () == mn ) {
               if ( t < OrderCloseTime ()) {
                 t = OrderCloseTime () ;
                 j = OrderTicket();                }
               else
                 return ( j ) ;
             }
           }
         }
       }
     }
   }
   return ( - 1 ) ;
}

이 기능은 마지막으로 마감된 포지션의 티켓 번호를 결정하고...

티켓 번호에 대한 추가 작업은 해결 중인 작업에 따라 프로그래머의 재량입니다...

 

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

FindNearFractal() 함수 사용의 예.

  • 현재 차트에서 가장 가까운 하위 프랙탈의 가격입니다.
     Message ( FindNearFractal ()) ;
  • 현재 기호의 H4 차트에서 가장 가까운 위쪽 프랙탈의 가격입니다.
     Message ( FindNearFractal ( NULL , PERIOD_H4 , MODE_UPPER )) ;
  • GBPUSD M30 차트 에서 가장 가까운 낮은 프랙탈의 가격.
     Message ( FindNearFractal ( " GBPUSD " , PERIOD_M30 , MODE_LOWER )) ;
    

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

파일:
 
KimIV 는 (a) >> 를 썼습니다.

SetVLine() 함수 사용의 예.

  1. 현재 막대의 파란색 실선 수직선.
  2. 여덟 번째 마디에 라일락 굵은 선.
  3. 막대의 점선 그리드 14:00.

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

KimIV는 (a) >> 를 썼습니다.

SetVLine() 함수 사용의 예.

  1. 현재 막대의 파란색 실선 수직선.
  2. 여덟 번째 마디에 라일락 굵은 선.
  3. 막대의 점선 그리드 14:00.

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

좋은 오후 이고르,
표시기에서 그러한 기능을 어떻게 사용할 수 있는지 예를 들어 보여 주시겠습니까?
PreviousiHighsvAndhLows0 표시기를 마무리하고 타임스탬프를 추가하려고 합니다.

SetVLine() 예제를 사용하여 특정 시간의 막대가 열릴 때 레이블을 그립니다.
지금까지 내 버전은 일종의 넌센스를 그립니다.
여기 포럼에서 이미 도움을 요청했지만 초보자는 여기에서별로 응석을받지 않는 것 같습니다 ..

그렇군요 감사합니다 여러분의 기능은 단계별 학습에 매우 유용하지만 물론 더 많은 팁이나 다른 예제가 있으면 좋을 것입니다

 
obabuev писал (а) >> 를 썼습니다.
표시기에서 그러한 기능을 어떻게 사용할 수 있는지 예를 들어 보여 주시겠습니까?
PreviousiHighsvAndhLows0 표시기를 마무리하고 타임스탬프를 추가하려고 합니다.
SetVLine() 예제를 사용하여 특정 시간의 막대가 열릴 때 레이블을 그립니다.

그리고 싶은 표시를 그림에 표시하십시오.

 

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

GetExtremumZZBar() 함수 사용 예.

  • 현재 차트의 최신 지그재그 극한값이 있는 막대 번호입니다.
     Message ( GetExtremumZZBar ()) ;
  • 현재 기호의 H4 차트에서 끝에서 두 번째 지그재그 극한값이 있는 막대 번호입니다.
     Message ( GetExtremumZZBar ( NULL , PERIOD_H4 , 1 )) ;
  • 현재 차트에서 마지막 지그재그 브레이크를 찾아 수직선을 그립니다.
     int n = GetExtremumZZBar ( NULL , 0 , 1 ) ;
    SetVLine ( Magenta , "" , Time [ n ]) ; 

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

파일:
 
KimIV писал (а) >> 를 썼습니다.

그리고 싶은 표시를 그림에 표시하십시오.

Igor님의 답변에 감사드립니다.
나는 이틀 동안 앉아 있었지만 나는 표를 만들었다.
이제 다른 일을 하려고 해요
테스트용으로 필요합니다
i-AnyRange 표시기를 사용하여 다음과 같이 하고 싶습니다.
임의 편차가 있는 표시기 처리 시간.
예를 들어-
표시기에서
시간1=10:05;
시간2=15:35;
지표 자체가 사용하는 동안
T1=시간1(+/-무작위)
T2=시간2(+/-무작위)
그러나 최대 편차 한계도 설정해야 합니다. 예를 들어
최대 무작위 = 5분;
캐치는 어떻게 무작위성이 5분으로 제한될 수 있습니까?
당신은 아마 비슷한 예가 있습니다

파일:
 
obabuev писал (а) >> 를 썼습니다.

그러나 최대 편차 한계도 설정해야 합니다. 예를 들어
최대 무작위 = 5분;
캐치는 무작위성을 5분으로 제한하는 방법입니다.
비슷한 예가 있을 것입니다.

5분은 300초입니다.

 void init () {
   MathSrand ( TimeLocal ()) ;
}

void start () {
   double a = MathRand () / 32767.0 * 300 ;
   int b = MathFloor ( a ) ;
   Comment ( b ) ;
}
 
KimIV писал (а) >> 를 썼습니다.

5분은 300초입니다.

물론 감사합니다만 질문에 대한 답은 아닙니다.
이제 문자열 Time2분에 int b를 추가하는 방법 또는 플러스 마이너스를 무작위로 만드는 방법

물론 이해는 하겠지만 어렵다.