지그재그 표시기 문제 - 페이지 2

 
표시기 값을 강조 표시하는 것을 잊었습니다. 최소값은 일치하지만 최대값은 두 번째 그래프에 표시하려고 할 때 일치하지 않습니다...
 
aed71 :

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

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

2위

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

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


ZigZag 표시기에서 하나의 값만 표시됩니다.

이 값은 무엇입니까 ??

 
aed71 :

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

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

2위

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

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

iCustom 예제에서 ZigZag를 잘못 사용하고 있습니다. MetQuotes의 표준 ZigZag에는 3 개(2개가 아님) 버퍼가 있습니다(iCustom의 모드 또는 라인 인덱스).

  1. 모드 = 0: 높은 지그재그 포인트와 낮은 지그재그 포인트를 모두 유지합니다.
  2. 모드 = 1: 높은 포인트지만 반드시 지그재그 포인트만은 아닙니다(다시 칠하는 포인트도 보유하므로).
  3. 모드 = 2: 낮은 지점이지만 반드시 지그재그 지점만은 아닙니다(다시 칠하는 지점도 보유하므로).

High Point인지 Low Point인지 결정하기 위해 첫 번째 버퍼(Mode 0)를 다른 2개의 버퍼와 비교해야 합니다(예: 버퍼 1과 버퍼 3의 값이 같으면 Low ZigZag Buffer 1과 Buffer 2가 모두 같으면 High point).

또한 ZigZag가 작동하는 방식과 다시 그리는 방식을 더 잘 이해하기 위해 ZigZagZug 표시기 를 사용하는 것이 좋습니다. 그러나 더 빠르기 때문에 코드에서 MetaQuotes ZigZag를 사용하십시오. 내 버전은 추가 기능으로 인해 더 많은 처리를 수행하므로 더 느립니다.

추신! 버퍼 1(모드 = 0)의 값이 0.0이지만 다른 버퍼의 값이 0이 아닌 경우 지그재그 포인트가 아닌 오래된 다시 그리기 포인트입니다.

코드에서 모드 0 버퍼를 낮음으로, 모드 1 버퍼를 높음으로 사용하고 있습니다. 그것은 완전히 잘못된 것입니다.

 
FMIC :

iCustom 예제에서 ZigZag를 잘못 사용하고 있습니다. MetQuotes의 표준 ZigZag에는 3 개(2개가 아님) 버퍼가 있습니다(iCustom의 모드 또는 라인 인덱스).

  1. 모드 = 0: 높은 지그재그 포인트와 낮은 지그재그 포인트를 모두 유지합니다.
  2. 모드 = 1: 높은 포인트이지만 반드시 지그재그 포인트만은 아닙니다(다시 칠하는 포인트도 보유하므로).
  3. 모드 = 2: 낮은 지점이지만 반드시 지그재그 지점만은 아닙니다(다시 칠하는 지점도 보유하므로).

High Point인지 Low Point인지 결정하기 위해 첫 번째 버퍼(Mode 0)를 다른 2개의 버퍼와 비교해야 합니다(예: 버퍼 1과 버퍼 3의 값이 같으면 Low ZigZag Buffer 1과 Buffer 2가 모두 같으면 High point).

또한 ZigZag가 작동하는 방식과 다시 그리는 방식을 더 잘 이해하기 위해 ZigZagZug 표시기 를 사용하는 것이 좋습니다. 그러나 더 빠르기 때문에 코드에서 MetaQuotes ZigZag를 사용하십시오. 내 버전은 추가 기능으로 인해 더 많은 처리를 수행하므로 더 느립니다.

추신! 버퍼 1(모드 = 0)의 값이 0.0이지만 다른 버퍼의 값이 0이 아닌 경우 지그재그 포인트가 아닌 오래된 다시 그리기 포인트입니다.

코드에서 모드 0 버퍼를 낮음으로, 모드 1 버퍼를 높음으로 사용하고 있습니다. 그것은 완전히 잘못된 것입니다.


여기를 보세요 https://www.mql5.com/en/forum/149492/page2#912747 아웃사이드바는 기존 코딩 지그재그에 대한 문제입니다

노란색 선은 지그재그로 표시해야 하는 더 나은 방법을 제공합니다.

 
deVries :


여기를 보세요 https://www.mql5.com/en/forum/149492/page2#912747 아웃사이드바는 기존 코딩 지그재그에 대한 문제입니다

노란색 선은 지그재그로 표시해야 하는 더 나은 방법을 제공합니다.


외부 막대는 "aed71의" 현재 딜레마와 아무 관련이 없습니다. 그의 지그재그 사용은 올바르지 않습니다.

상황을 혼란스럽게 할 수 있으므로 현재 문제에서 벗어나지 마십시오.

게다가 그 문제가 없는 ZigZagZug 코드에 대한 링크도 제공했습니다.

 
FMIC :

iCustom 예제에서 ZigZag를 잘못 사용하고 있습니다. MetQuotes의 표준 ZigZag에는 3 개(2개가 아님) 버퍼가 있습니다(iCustom의 모드 또는 라인 인덱스).

  1. 모드 = 0: 높은 지그재그 포인트와 낮은 지그재그 포인트를 모두 유지합니다.
  2. 모드 = 1: 높은 포인트지만 반드시 지그재그 포인트만은 아닙니다(다시 칠하는 포인트도 보유하므로).
  3. 모드 = 2: 낮은 지점이지만 반드시 지그재그 지점만은 아닙니다(다시 칠하는 지점도 보유하므로).

High Point인지 Low Point인지 결정하기 위해 첫 번째 버퍼(Mode 0)를 다른 2개의 버퍼와 비교해야 합니다(예: 버퍼 1과 버퍼 3의 값이 같으면 Low ZigZag Buffer 1과 Buffer 2가 모두 같으면 High point).

또한 ZigZag가 작동하는 방식과 다시 그리는 방식을 더 잘 이해하기 위해 ZigZagZug 표시기 를 사용하는 것이 좋습니다. 그러나 더 빠르기 때문에 코드에서 MetaQuotes ZigZag를 사용하십시오. 내 버전은 추가 기능으로 인해 더 많은 처리를 수행하므로 더 느립니다.

추신! 버퍼 1(모드 = 0)의 값이 0이지만 다른 버퍼에 값이 있는 경우 오래된 다시 그리기 지점입니다.


좋아요, 중요한 힌트를 주셔서 감사합니다! 왜 안되는지 이제 알았습니다...

Metaquotes ZigZag의 원본 코드는 버퍼가 2 개뿐이므로 올바르지 않다고 생각합니다. 그래서 둘 중 하나는 높고 다른 하나는 낮아야 한다고 생각했는데...

사실 제목도 일치하지 않는데, 나는 최근에 보았다. 누군가 확인해야 합니다!

여기에서 코드를 참조하고 있습니다. https://www.mql5.com/en/code/7796

 //+------------------------------------------------------------------+
//|                                        Custom Moving Average.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link        "http://www.metaquotes.net/"

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- indicator parameters
extern int ExtDepth= 12 ;
extern int ExtDeviation= 5 ;
extern int ExtBackstep= 3 ;
//---- indicator buffers
double ExtMapBuffer[];
double ExtMapBuffer2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers ( 2 );
//---- drawing settings
   SetIndexStyle ( 0 , DRAW_SECTION );
//---- indicator buffers mapping
   SetIndexBuffer ( 0 ,ExtMapBuffer);
   SetIndexBuffer ( 1 ,ExtMapBuffer2);
   SetIndexEmptyValue ( 0 , 0.0 );
//---- indicator short name
   IndicatorShortName ( "ZigZag(" +ExtDepth+ "," +ExtDeviation+ "," +ExtBackstep+ ")" );
//---- initialization done
   return ( 0 );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int     shift, back,lasthighpos,lastlowpos;
   double val,res;
   double curlow,curhigh,lasthigh,lastlow;

   for (shift= Bars -ExtDepth; shift>= 0 ; shift--)
     {
      val= Low [ Lowest ( NULL , 0 , MODE_LOW ,ExtDepth,shift)];
       if (val==lastlow) val= 0.0 ;
       else 
        { 
         lastlow=val; 
         if (( Low [shift]-val)>(ExtDeviation* Point )) val= 0.0 ;
         else
           {
             for (back= 1 ; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer[shift+back];
               if ((res!= 0 )&&(res>val)) ExtMapBuffer[shift+back]= 0.0 ; 
              }
           }
        } 
      ExtMapBuffer[shift]=val;
       //--- high
      val= High [ Highest ( NULL , 0 , MODE_HIGH ,ExtDepth,shift)];
       if (val==lasthigh) val= 0.0 ;
       else 
        {
         lasthigh=val;
         if ((val- High [shift])>(ExtDeviation* Point )) val= 0.0 ;
         else
           {
             for (back= 1 ; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer2[shift+back];
               if ((res!= 0 )&&(res<val)) ExtMapBuffer2[shift+back]= 0.0 ; 
              } 
           }
        }
      ExtMapBuffer2[shift]=val;
     }

   // final cutting 
   lasthigh=- 1 ; lasthighpos=- 1 ;
   lastlow=- 1 ;  lastlowpos=- 1 ;

   for (shift= Bars -ExtDepth; shift>= 0 ; shift--)
     {
      curlow=ExtMapBuffer[shift];
      curhigh=ExtMapBuffer2[shift];
       if ((curlow== 0 )&&(curhigh== 0 )) continue ;
       //---
       if (curhigh!= 0 )
        {
         if (lasthigh> 0 ) 
           {
             if (lasthigh<curhigh) ExtMapBuffer2[lasthighpos]= 0 ;
             else ExtMapBuffer2[shift]= 0 ;
           }
         //---
         if (lasthigh<curhigh || lasthigh< 0 )
           {
            lasthigh=curhigh;
            lasthighpos=shift;
           }
         lastlow=- 1 ;
        }
       //----
       if (curlow!= 0 )
        {
         if (lastlow> 0 )
           {
             if (lastlow>curlow) ExtMapBuffer[lastlowpos]= 0 ;
             else ExtMapBuffer[shift]= 0 ;
           }
         //---
         if ((curlow<lastlow)||(lastlow< 0 ))
           {
            lastlow=curlow;
            lastlowpos=shift;
           } 
         lasthigh=- 1 ;
        }
     }
  
   for (shift= Bars - 1 ; shift>= 0 ; shift--)
     {
       if (shift>= Bars -ExtDepth) ExtMapBuffer[shift]= 0.0 ;
       else
        {
         res=ExtMapBuffer2[shift];
         if (res!= 0.0 ) ExtMapBuffer[shift]=res;
        }
     }
  }
 
aed71 :


좋아요, 중요한 힌트를 주셔서 감사합니다! 왜 안되는지 이제 알았습니다...

Metaquotes ZigZag의 원본 코드는 버퍼가 2 개뿐이므로 올바르지 않다고 생각합니다. 그래서 둘 중 하나는 높고 다른 하나는 낮아야 한다고 생각했는데...

사실 제목도 일치하지 않는데, 나는 최근에 보았다. 누군가 확인해야 합니다!

여기에서 코드를 참조하고 있습니다. https://www.mql5.com/en/code/7796


그 코드를 사용하지 마십시오! 그것은 고대입니다!

현재 LiveUpdate를 통해 푸시되고 있는 코드를 사용하십시오. 현재 600+ 버전 또는 최소한 509 버전을 사용하십시오.

추신! 주의! 또한 이름에 "ZigZag"만 사용하고 iCustom에서 "ZigZag.ex4"를 사용하지 마십시오.

 
FMIC :


그 코드를 사용하지 마십시오! 그것은 고대입니다!

현재 LiveUpdate를 통해 푸시되고 있는 코드를 사용하십시오. 현재 600+ 버전 또는 최소한 509 버전을 사용하십시오.

추신! 주의! 또한 이름에 "ZigZag"만 사용하고 iCustom에서 "ZigZag.ex4"를 사용하지 마십시오.


안녕하세요 FMIC입니다.

팁 주셔서 감사합니다. 컴파일하는 것을 잊지 않기 위해 파일 끝에 ex4를 추가했습니다. 불행히도 내 새 빌드 610 ZigZag가 이전 빌드로 대체되었습니다.

나는 시간이 문제가 아니기 때문에 당신을 사용하기로 결정했습니다. 여기에서도 몇 가지 문제에 직면해 있습니다. 안내해 주시면 감사하겠습니다.

위에서 언급한 것과 동일한 코드를 사용하여 버전의 파일 이름을 변경했습니다. 매개변수 6,5,3을 사용하고 있습니다. 이것이 기본 설정과의 유일한 차이점입니다.

내가 직면한 몇 가지 문제:

먼저 표시기는 매 틱마다 로드되어 zh,zl 값을 읽습니다. 그리고 마지막에 "2014.02.22 09:35:09.171 2013.11.01 22:55 커스텀 인디케이터 ZigZagZug EURUSD,M15: 제거". 제가 첨부한 로그 파일을 참고해주세요. 나중에 메모리 문제가 발생하나요?

두 번째로 저널에서 카운터 cnt가 cnt8에서 cnt84로 점프했는데 이상합니다. 로그에서는 점프하지 않습니다. 로그를 올바른 값으로 간주해야 한다고 생각합니다.

세 번째이자 가장 중요한 것은 결과적으로 두 가지 최저점을 발견해서는 안 된다는 것입니다. 그림에서 회색 지그재그 선의 높은 값과 낮은 값을 얻고 싶지만 로그에 모든 높은 값과 낮은 값을 기록하면 분홍색 및 시안 색 점과 정확히 동일합니다. 그러나 지그재그 값만 필요합니다. 다른 버퍼를 확인했지만 올바른 값을 가져오지 않았습니다. 어떤 제안? 아니면 클래식 지그재그로 가야합니까 (빌드 610의 경우?)

감사해요.

지그재그 저그

 
aed71 :


안녕하세요 FMIC입니다.

팁 주셔서 감사합니다. 컴파일하는 것을 잊지 않기 위해 파일 끝에 ex4를 추가했습니다. 불행히도 내 새 빌드 610 ZigZag가 이전 빌드로 대체되었습니다.

나는 시간이 문제가 아니기 때문에 당신을 사용하기로 결정했습니다. 여기에서도 몇 가지 문제에 직면해 있습니다. 안내해 주시면 감사하겠습니다.

위에서 언급한 것과 동일한 코드를 사용하여 버전으로 파일 이름을 변경했습니다. 매개변수 6,5,3을 사용하고 있습니다. 이것이 기본 설정과의 유일한 차이점입니다.

어떤 제안? 아니면 클래식 지그재그로 가야합니까 (빌드 610의 경우?)

감사해요.

새로운 610 ZigZag를 사용하는 데 아무런 문제가 없습니다. 사실 앞으로 빌드와 호환될 수 있도록 대신 사용하는 것이 좋습니다. 오래된 것을 사용하거나 심지어 내 것을 사용하지 마십시오.

내 ZigZagZug 표시기는 다른 순서와 유형으로 추가 매개변수를 사용하므로 현재 사용 중인 유사한 iCustom을 사용할 수 없습니다. 완전히 다릅니다.

또한 추가 기능을 위해 표시기에 7개의 버퍼를 사용합니다. 지그재그를 이해하기 위한 시각적 학습 도구로 사용되어야 하며 실제로 EA에서 사용하는 것은 아닙니다.

추신! iCustom을 사용하여 EA를 백 테스트하는 동안 표시기 로드 및 언로드가 여러 번 있는 것은 정상입니다. 그것은 모두 EA와 지표가 어떻게 코딩되는지에 달려 있습니다. 이를 방지하고 EA를 더 빠르게 만들기 위해 외부 지표에 의존하지 않도록 필수 코드만 EA 자체에 리코딩하지만, 그것은 귀하의 경우와 직접적으로 관련이 없는 또 다른 문제입니다. 미래의 EA를 위한 제안입니다.

 
aed71 :


안녕하세요 FMIC입니다.

... 회색 지그재그 선의 높은 값과 낮은 값을 얻고 싶지만 로그에 모든 높은 값과 낮은 값을 기록하면 분홍색 및 시안 색 점과 정확히 동일합니다. 그러나 지그재그 값만 필요합니다. ...

감사해요.


이전 게시물에서 이전에 설명한 것처럼 High 및 Low 버퍼를 사용하여 지그재그 점을 얻을 수는 없습니다. 여기에는 다시 칠한 점(ZigZagZug의 물색 및 자홍색 원)도 포함되기 때문입니다. 표준 지그재그에서도 이런 식으로 되어 있지만, 당신은 그것들을 보지 못할 뿐입니다. 그렇기 때문에 내 표시기가 표시되어 더 잘 이해할 수 있습니다.

지그재그 포인트만 걸러내기 위해 높음 및 낮음 버퍼를 낮음 및 높음을 모두 보유하는 첫 번째 버퍼와 비교해야 합니다.

주의! High Point인지 Low Point인지 결정하기 위해 첫 번째 버퍼(Mode 0)를 다른 2개의 버퍼와 비교해야 합니다(예: 버퍼 1과 버퍼 3의 값이 같으면 Low ZigZag입니다. Buffer 1과 Buffer 2가 모두 같으면 High point).

원하신다면 포스트에 파일을 첨부해 주시면 올바르게 사용하는 방법을 보실 수 있도록 수정하겠습니다.