[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 5. - 페이지 29

 
hoz :

지그재그 표시기에서 값을 가져오는 방법을 알려주세요. 일반적으로 어떻게 구현됩니까? 저것들. 마지막 극값이 아니라 특정 극한값을 잡고 싶다면.

예를 들어 지금 이 지그재그를 내 Expert Advisor에 연결하고 싶습니다.

커스텀 칠면조에 접근하기 위해 보통 하는 것처럼 iCustom 기능을 사용해야 하는 것은 이해하지만, 어떻게 상단에 집착을 하느냐가 문제입니다...

버퍼는 원칙에 따라 NON-EMPTY( EMPTY_VALUE ) 값을 검색합니다.

 //+-------------------------------------------------------------------------------------+
//| Поиск последнего элемента ZZBuf с непустым значением                                |
//+-------------------------------------------------------------------------------------+
int GetLastIndexNoEmptyValue( int index)
{
   while (ZZBuf[index] == EMPTY_VALUE && index < Bars ) // Поиск по графику справа налево
      index++;                                     // Пока не будет найден экстремум или
                                                   // ..пока не достигнем конца истории
   return (index);                                   // Индекс бара с непустым значением..
                                                   // ..зиг-зага
}
iCustom()을 통해 표시기 버퍼에 액세스합니다.
 
TarasBY :

버퍼는 원칙에 따라 NON-EMPTY(EMPTY_VALUE) 값을 검색합니다.

 //+-------------------------------------------------------------------------------------+
//| Поиск последнего элемента ZZBuf с непустым значением                                |
//+-------------------------------------------------------------------------------------+
int GetLastIndexNoEmptyValue( int index)
{
   while (ZZBuf[index] == EMPTY_VALUE && index < Bars ) // Поиск по графику справа налево
      index++;                                     // Пока не будет найден экстремум или
                                                   // ..пока не достигнем конца истории
   return (index);                                   // Индекс бара с непустым значением..
                                                   // ..зиг-зага
}

iCustom()을 통해 표시기 버퍼에 액세스합니다.


논리적으로. 그러나 이런 식으로 비어 있지 않은 값 을 찾을 때까지 검색이 수행됩니다. 그리고 예를 들어, I, 그리고 실제로 비어 있지 않은 마지막 값이 필요하지 않은 경우, 즉 마지막 극값이 아니라 또 다른.. 예를 들어, 여기 화면에서:

 
hoz :


논리적으로. 그러나 이런 식으로 비어 있지 않은 값 을 찾을 때까지 검색이 수행됩니다. 그리고 예를 들어, I, 그리고 실제로 비어 있지 않은 마지막 값이 필요하지 않은 경우, 즉 마지막 극값이 아니라 또 다른.. 예를 들어, 여기 화면에서:

루프에 극한 카운터를 입력하고 극한 값(행의 비어 있지 않은 값)으로 루프를 끊습니다.
 
TarasBY :
루프에 극한 카운터를 입력하고 극한 값(행의 비어 있지 않은 값)으로 루프를 끊습니다.

이해했다. 덕분에. 이제 모든 것을 실천에 옮겨야 합니다. 본질은 이해했지만, 뇌가 끓어오르는 필터의 배수구에...
 
hoz :

이해했다. 덕분에. 이제 모든 것을 실천에 옮겨야 합니다. 본질은 이해했지만, 뇌가 끓어오르는 필터의 배수구에...

double get_extrem(int n) {

   for(int i=1;;i++) {

      double ind=iCustom(Symbol(),0,"indicator_name",0,i);

      if(n>1)  

         if(ind!=0) n--;

         else

         if(ind!=0) return(ind);

      }

   }


이와 같이. 함수에 n(피크 번호)을 지정하면 해당 값이 반환됩니다. 피크 막대 번호가 필요한 경우 함수 유형을 int로 변경하고 return(ind) 대신; return(i) 쓰기;

또한 코드, 특히 반복(교과서에서와 같이)에서 i를 사용하는 경우 이 함수에서 i를 다른 변수(예: k)로 변경합니다.

표시기의 기능 내에서 iCustom을 설정해야 합니다.

 
keep87 :

double get_extrem(int n) {

   for(int i=1;;i++) {

      double ind=iCustom(Symbol(),0,"indicator_name",0,i);

      if(n>1)  

         if(ind!=0) n--;

         else

         if(ind!=0) return(ind);

      }

   }


이와 같이. 함수에 n(피크 번호)을 지정하면 해당 값이 반환됩니다. 피크 막대 번호가 필요한 경우 함수 유형을 int로 변경하고 return(ind) 대신; return(i) 쓰기;

또한 코드, 특히 반복(교과서에서와 같이)에서 i를 사용하는 경우 이 함수에서 i를 다른 변수(예: k)로 변경합니다.

표시기의 기능 내에서 iCustom을 설정해야 합니다.

Nikolai , 흥미롭습니다. 물론, 당신은 조건을 작성했습니다. 보고 생각하고...

 if (ind!= 0 ) n--;

else

if (ind!= 0 ) return (ind);

사용자 지정 표시기 버퍼가 값 0을 반환하면 n-- 이고 사용자 지정 표시기 버퍼가 값 0 을 반환하면 ... 표시기 버퍼의 값을 반환합니다.

그러나 조건은 동일합니다. 그리고 0이 아닌 경우 ..

 
hoz :

Nikolai , 흥미롭습니다. 물론, 당신은 조건을 작성했습니다. 보고 생각하고...

사용자 지정 표시기 버퍼가 값 0을 반환하면 n-- 이고 사용자 지정 표시기 버퍼가 값 0 을 반환하면 ... 표시기 버퍼의 값을 반환합니다.

그러나 조건은 동일합니다. 그리고 0이 아닌 경우 ..

코드를 정상적으로 삽입하려고 하는 동안 중괄호가 어딘가에 빠졌습니다.

double get_extrem(int n) {

   for(int i=1;;i++) {

      double ind=iCustom(Symbol(),0,"indicator_name",0,i);

      if(n>1) {

         if(ind!=0) n--;

         }else{

         if(ind!=0) return(ind);

         } 

      }

   }

n>1인 경우 {

버퍼가 비어 있지 않으면 n에서 1을 뺍니다.

}반대의 경우{

버퍼가 비어 있지 않은 경우 - 값을 반환

}

 

double get_extrem(int n) {

   for(int i=1;;i++) {

      double ind=iCustom(Symbol(),0,"indicator_name",0,i);

      if(ind!=0) {

         if(n>1) n--; else return(ind);

         }

      }

   }


또는 이와 같이 더 간결합니다. 나는 코드의 속도와 아름다움에 집착한다, 주의를 기울이지 마라)
 
keep87 :

double get_extrem(int n) {

   for(int i=1;;i++) {

      double ind=iCustom(Symbol(),0,"indicator_name",0,i);

      if(ind!=0) {

         if(n>1) n--; else return(ind);

         }

      }

   }


또는 이와 같이 더 간결합니다. 나는 코드의 속도와 아름다움에 집착한다, 주의를 기울이지 마라)


일반적으로 모든 것이 정상입니다. 단지 내가 약간 다르게 코드를 작성하는 데 익숙해져서 읽기가 더 쉽지만 여러분에게는 다릅니다. 귀하의 브래킷은 첫 번째 모든 사람이 전송되지 않습니다. 나는 그것을 Editor에 배치했고 모든 것이 다음과 같은 형식으로 자리를 잡았습니다.

 double get_extrem( int n)
{
   for ( int i= 1 ;;i++)
   {
     double ind= iCustom ( Symbol (), 0 , "indicator_name" , 0 ,i);
       if (n> 1 )
        {
           if (ind!= 0 ) n--;
        }
         else
        {
           if (ind!= 0 ) return (ind);
        } 
   }
}
 
hoz :


일반적으로 모든 것이 정상입니다. 단지 내가 약간 다르게 코드를 작성하는 데 익숙해져서 읽기가 더 쉽지만 여러분에게는 다릅니다. 귀하의 브래킷은 첫 번째 모든 사람이 전송되지 않습니다. 나는 그것을 Editor에 배치했고 모든 것이 다음과 같은 형식으로 자리를 잡았습니다.


코드가 1000줄 이상 넘어가면 간결하게 쓰기 시작)

또한 MT4에서는 특히 테스트를 실행할 때 성능이 저하됩니다. 간결한 버전이 더 빠릅니다.