지그재그 표시기 문제

 

여보세요,

내 주요 전문가에게 사용할 과거 데이터(피크 및 바텀)를 파헤치는 전문가를 개발하려고 합니다. 지그재그 인디케이터는 심플하고 고/저를 쉽게 찾을 수 있어서 사용하기로 했습니다.

내 문제는 iCustom() 함수를 사용하여 ZigZag.ex4를 호출할 때 올바른 높은 값과 낮은 값을 얻을 수 없다는 것입니다. 다시 칠하는 것을 방지하기 위해 iCustom() 표시기의 인덱스 20을 repanting에 대한 기본 보호로 사용했습니다.

ZigZag 코드에는 두 개의 버퍼가 있습니다(메타따옴표 버전 https://www.mql5.com/en/code/7796 사용). 높은 값과 낮은 값을 반대로 취할 수도 있지만 현재로서는 그다지 중요하지 않습니다.

일부 값은 일부 일치하지 않는 코드와 일치하고 저널에서는 가능하지 않은 동일한 열에서 높은 값과 낮은 값을 모두 볼 수 있습니다.

지그재그

내 코드는 다음과 같습니다.

 //+------------------------------------------------------------------+
//|                                                 ZigZagDigger_02  |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
/* 

*/

#include <stderror.mqh>
#include <stdlib.mqh>
    
int cnt= 0 ;
double Zig_high[ 1000 ];
double Zig_low[ 1000 ];

int init()
  {
   ArrayInitialize (Zig_high, 0 );
   ArrayInitialize (Zig_low, 0 );
   return ( 0 );
 } 
   
int deinit()
{ 
   return ( 0 );
}

void start()
  {
  
   static datetime tmp;
  

   //  On every tick
   if (tmp!= Time [ 0 ]) 
  
   {  tmp =   Time [ 0 ];
   
       double zh= iCustom ( Symbol (), 0 , "ZigZag.ex4" , 6 , 5 , 3 , 1 , 20 );
       double zl= iCustom ( Symbol (), 0 , "ZigZag.ex4" , 6 , 5 , 3 , 0 , 20 );

      Zig_high[cnt]=zh;
      Zig_low[cnt]=zl;
      cnt=cnt+ 1 ;
   
       Alert ( " Zig   zh=" ,zh, "  zl=" ,zl, "  cnt=" ,cnt- 1 );
   
  } // Every tick loop
         
   
  }

지그재그 표시기를 잘못 사용하고 있는지 아니면 코드에 실수를 한 것인지 궁금합니다. 문제를 찾을 수 없으므로 문제를 식별하는 데 도움을 요청합니다.

감사해요

 
aed71 :

여보세요,

내 주요 전문가에게 사용할 과거 데이터(피크 및 바텀)를 파헤치는 전문가를 개발하려고 합니다. 지그재그 인디케이터는 심플하고 고/저를 쉽게 찾을 수 있어서 사용하기로 했습니다.

내 문제는 iCustom() 함수를 사용하여 ZigZag.ex4를 호출할 때 올바른 높은 값과 낮은 값을 얻을 수 없다는 것입니다. 다시 칠하는 것을 방지하기 위해 iCustom() 표시기의 인덱스 20을 repanting에 대한 기본 보호로 사용했습니다.

ZigZag 코드에는 두 개의 버퍼가 있습니다(메타따옴표 버전 https://www.mql5.com/en/code/7796 사용). 높은 값과 낮은 값을 반대로 취할 수도 있지만 현재로서는 그다지 중요하지 않습니다.

일부 값은 일부 일치하지 않는 코드와 일치하고 저널에서는 가능하지 않은 동일한 열에서 높은 값과 낮은 값을 모두 볼 수 있습니다.

내 코드는 다음과 같습니다.

지그재그 표시기를 잘못 사용하고 있는지 아니면 코드에 실수를 한 것인지 궁금합니다. 문제를 찾을 수 없으므로 문제를 식별하는 데 도움을 요청합니다.

감사해요

MACD 샘플 코드를 읽으면 EA가 어떻게 작동하는지 알 수 있습니까?

당신이 시도한 적이없는 것 같습니다 ....

당신이 쓴 것은 내가 뭔가를 하는 것과 같습니다 ..... 무슨 일이 일어나는지 모르겠습니다 내가 한 일을 말해줄 수 있습니까 ??

모든 틱 루프 모든 틱 루프는 무엇입니까 ??

이것 ??

   if (tmp!= Time [ 0 ]) 
  
   {  tmp =   Time [ 0 ];
   
       double zh= iCustom ( Symbol (), 0 , "ZigZag.ex4" , 6 , 5 , 3 , 1 , 20 );
       double zl= iCustom ( Symbol (), 0 , "ZigZag.ex4" , 6 , 5 , 3 , 0 , 20 );

      Zig_high[cnt]=zh;
      Zig_low[cnt]=zl;
      cnt=cnt+ 1 ;
   
       Alert ( " Zig   zh=" ,zh, "  zl=" ,zl, "  cnt=" ,cnt- 1 );
   
  } // Every tick loop

네 그럼 루프는 어디에 있습니까 ??

아니요, 코드가 의미하는 바를 한 줄씩 설명하십시오 ...

 
aed71 : 지그재그 인디케이터를 잘못 사용하고 있는 건지, 아니면 코드에 실수를 한 건지 궁금합니다.
  1. 포럼을 검색 했다면 답을 찾았을 것입니다.
  2.   double zl= iCustom ( Symbol (), 0 , "ZigZag.ex4" , 6 , 5 , 3 , 0 , 20 );
    
    ZigZag 는 모든 버퍼 요소를 채우지 않습니다( DRAW_SECTION 사용). 0이 아닌 값을 가진 시프트를 찾을 때까지 루프에서 호출하십시오.
 
WHRoeder :
  1. 포럼을 검색 했다면 답을 찾았을 것입니다.
  2. ZigZag 는 모든 버퍼 요소를 채우지 않습니다( DRAW_SECTION 사용). 0이 아닌 값을 가진 시프트를 찾을 때까지 루프에서 호출하십시오.


예, 모든 버퍼 요소를 채우지 않는다는 것을 알고 있습니다. 0(높은 값과 낮은 값이 없는 경우)과 높은 값과 낮은 값을 포함하여 모든 데이터를 배열에 넣고 싶습니다. 그 이유는 배열을 사용하여 높고 낮음 사이의 눈금 차이를 계산하기 위해 deinit() 내부에 다른 프로세스를 갖고 싶습니다. 내 말은 예를 들어. 2개의 최고점과 최고점과 최저점의 차이 사이에 통과된 틱 수입니다. 그러나 나는 아직 그 단계에 도달할 수 없다.

왜 그것은 내가 그림에서 생각한 것과 같이 동시에 높고 낮음을 반환합니다(옆에 ??? 표시가 있는 저널 부분?) 그리고 이 값은 높거나 낮은 값에 해당하지 않습니다... 이것이 저의 주요 문제입니다. ..

감사해요

 
deVries :

MACD 샘플 코드를 읽으면 EA가 어떻게 작동하는지 알 수 있습니까?

당신이 시도한 적이없는 것 같습니다 ....

당신이 쓴 것은 내가 뭔가를 하는 것과 같습니다 ..... 무슨 일이 일어나는지 모르겠습니다 내가 한 일을 말해줄 수 있습니까 ??

모든 틱 루프 모든 틱 루프는 무엇입니까 ??

이것 ??

예 그럼 루프는 어디에 있습니까 ??

아니요, 코드가 의미하는 바를 한 줄씩 설명하십시오 ...

루프에 대해 문제가 있다고 생각하지 않고 루프가 작동하고 결과를 인쇄합니다. 기간(제 경우에는 15M)을 확인하고 지그재그 값을 계산하여 인쇄합니다. 15분마다 작동하는 녹색 사각형을 확인하십시오. Start() 함수 자체가 루프죠?

15M마다

 
aed71 :

루프에 대해 문제가 있다고 생각하지 않고 루프가 작동하고 결과를 인쇄합니다. 기간(제 경우에는 15M)을 확인하고 지그재그 값을 계산하여 인쇄합니다. 15분마다 작동하는 녹색 사각형을 확인하십시오. Start() 함수 자체가 루프죠?



Start() 함수 자체가 루프라는 말이 맞습니다.

그러나 해당 루프는 어디에서 시작하고 Start() 함수는 어디에서 종료됩니까?

그것은 다른 곳에 있습니다 ...

당신이 인쇄한 메시지는 매 틱마다 반복되지 않습니다 ....

그래서 뭐하는거야........?

가능한 한 많은 코드 라인을 설명하십시오.

 
deVries :


Start() 함수 자체가 루프라는 말이 맞습니다.

그러나 해당 루프는 어디에서 시작하고 어디에서 Start() 함수가 종료됩니까?

그것은 다른 곳에 있습니다 ...

당신이 인쇄한 메시지는 매 틱마다 반복되지 않습니다 ....

그래서 뭐하는거야........?

가능한 한 많은 코드 라인을 설명하십시오.


제대로 설명하지 못했다면 죄송합니다.

이 전문가는 백테스트 에 사용되며 제 목표는 15M 차트에서 역사적 고점과 저점을 찾는 것입니다. 그래프의 위상과 진폭을 계산하기 위해 높은 데이터와 낮은 데이터를 다시 처리하겠습니다.

내가 한 일; 나는 두 개의 배열을 사용하여 높은 값과 낮은 값을 저장하고 하나의 카운터를 사용하여 틱을 계산했습니다. 배열 크기 1000은 최대 2일 동안 실행하기 때문에 충분합니다(1440/15=1일 96틱).

 int cnt= 0 ;
double Zig_high[ 1000 ];
double Zig_low[ 1000 ];

init() 함수에서 배열을 0으로 채우고 있습니다.

start() 함수에서 아래 코드로 새 틱이 트리거되었는지 확인하고 있습니다.

 if (tmp!= Time [ 0 ]) 
  
   {  tmp =   Time [ 0 ];

   // the code here runs every 15M.

   }

따라서 start() 함수에는 백테스트(2일)가 완료될 때까지 연속 루프가 있습니다.

내 주요 문제는 내가 생각하는 지그재그를 호출하는 것입니다. 아래에서는 지그재그 표시기를 호출합니다. 일반적으로 높거나 낮으면 0이 아닌 값으로 반환해야 합니다. 그러나 제 경우에는 불가능한 동일한 값으로 낮음과 높음을 모두 반환하는 경우가 있습니다.


   double zh= iCustom ( Symbol (), 0 , "ZigZag.ex4" , 6 , 5 , 3 , 1 , 20 );
   double zl= iCustom ( Symbol (), 0 , "ZigZag.ex4" , 6 , 5 , 3 , 0 , 20 );

  Zig_high[cnt]=zh;
  Zig_low[cnt]=zl;
  cnt=cnt+ 1 ;

원래 Metaquotes 지그재그 표시기에 사용된 배열을 이해하지 못했을 수 있습니다(아래 참조). 내 이해는 이것들이 높고 낮은 값을 저장하는 데 사용된다는 것입니다.

 //---- indicator buffers
double ExtMapBuffer[];
double ExtMapBuffer2[];

감사해요

 

읽고 배우는 시간을 가져라

이것은 당신에게도 약간의 도움이 될 수 있습니다

iCustom에 대한 자세한 설명

 
제 코드도 첨부합니다...
파일:
 
데이터 창은 무엇을 표시합니까 ??
 
deVries :
데이터 창은 무엇을 표시하고 있습니까 ??

아래 그래프는 최소값을 나타냅니다(커서 포인트 값, 데이터 창 값 및 출력 모두 동일).

1위

아래는 6틱 후 그래프의 가장 높은 부분입니다. 데이터 창과 커서 포인트는 모두 동일하지만 출력이 동일하지 않고 낮은 값과 높은 값을 모두 반환합니다.

2위 2위

iCustom()이 표시기를 올바르게 로드하는지 확인했습니다. 낮은 값은 동일하지만 높은 값은 그렇지 않습니다. ZigZag 표시기와 관련이 있습니까?

내가 뭘 잘못하고 있는지 정말 이해할 수 없었습니다.