가장 낮은 함수와 가장 높은 함수가 반환하는 것 - 페이지 2

 

대답할 수 없었습니다(나는 거기에 없었습니다). 하나에 대해 이야기하기 위해 구문 분석해야 하는 코드를 게시합니다.
추신 그 지그재그에서 오류가 없었지만 오타가 (MT3의 코드와 비교하여), 이 오타만 발견하고 다른 것은 수정하지 않았습니다.
 
Vladislav, 어떤 이유로 귀하의 코드는 모든 시간대에서 작동하지 않습니다. 일부는 표시되고 일부는 표시되지 않습니다. 기이한. 공장.
 
Rosh, 여기 codebase.mql4.com의 코드가 있습니다. 나는 같은 것을 가지고있다. 전 세계와 함께 그를 물리칠 수 있다면 매우 감사할 것입니다. 그리고 나는 혼자가 아닙니다. 미리 감사드립니다.

나는 이제 특정 편집으로 많은 수를 축적했습니다. 그들은 잘 작동합니다. 그러나 첫 번째 광선에서 - 시작하는 0 막대 또는 첫 번째 막대 중 하나에서 - 극한 검색 기능의 오류는 실패합니다. 그리고 지표가 불안정합니다.

//+----------------------------------------------- --------------------+
//| 사용자 정의 이동 평균.mq4 |
//| Copyright © 2005, MetaQuotes Software Corp. |
//| https://www.metaquotes.net/ |
//+----------------------------------------------- --------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#속성 링크 https://www.metaquotes.net/

#속성 표시기_차트_창
#속성 표시기_버퍼 1
#property indicator_color1 빨간색
//---- 표시기 매개변수
extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
//---- 표시기 버퍼
이중 ExtMapBuffer[];
이중 ExtMapBuffer2[];

//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 초기화 기능 |
//+----------------------------------------------- --------------------+
정수 초기화()
{
표시기버퍼(2);
//---- 그리기 설정
SetIndexStyle(0,DRAW_SECTION);
//---- 표시기 버퍼 매핑
SetIndexBuffer(0,ExtMapBuffer);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexEmptyValue(0,0.0);
//---- 인디케이터 짧은 이름
IndicatorShortName("ZigZag("+ExtDepth+","+ExtDeviation+","+ExtBackstep+")");
//---- 초기화 완료
리턴(0);
}
//+----------------------------------------------- --------------------+
//| |
//+----------------------------------------------- --------------------+
정수 시작()
{
int shift, 뒤로, 마지막 높은 위치, 마지막 낮은 위치;
이중 발, 입술;
더블 curlow,curhigh,lasthigh,lastlow;

for(shift=Bars-ExtDepth; shift>=0; shift--)
{
val=낮음[최저(NULL,0,MODE_LOW,ExtDepth,shift)];
if(발==최저) 발=0.0;
또 다른
{
마지막으로 = 발;
if((낮은[shift]-val)>(ExtDeviation*Point)) val=0.0;
또 다른
{
for(back=1; back<=ExtBackstep; back++)
{
res=ExtMapBuffer[시프트+뒤로];
if((res!=0)&&(res>val)) ExtMapBuffer[shift+back]=0.0;
}
}
}
ExtMapBuffer[시프트]=val;
//--- 높은
val=높음[최고(NULL,0,MODE_HIGH, 확장 깊이, 시프트)];
if(val==마지막 높음) val=0.0;
또 다른
{
lasthigh = 발;
if((val-High[shift])>(ExtDeviation*Point)) val=0.0;
또 다른
{
for(back=1; back<=ExtBackstep; back++)
{
res=ExtMapBuffer2[시프트+뒤로];
if((res!=0)&&(res<val)) ExtMapBuffer2[shift+back]=0.0;
}
}
}
ExtMapBuffer2[시프트]=발;
}

// 최종 절단
마지막 최고=-1; lasthighpos=-1;
마지막으로 =-1; lastlowpos=-1;

for(shift=Bars-ExtDepth; shift>=0; shift--)
{
curlow=ExtMapBuffer[시프트];
curhigh=ExtMapBuffer2[시프트];
if((curlow==0)&&(curhigh==0)) 계속;
//---
if(곱슬!=0)
{
if(최상위>0)
{
if(lasthigh<curhigh) ExtMapBuffer2[lasthighpos]=0;
그렇지 않으면 ExtMapBuffer2[시프트]=0;
}
//---
if(lasthigh<curhigh || lasthigh<0)
{
lasthigh=커하이;
lasthighpos=시프트;
}
마지막으로 =-1;
}
//----
if(컬!=0)
{
if(최저>0)
{
if(lastlow>curlow) ExtMapBuffer[lastlowpos]=0;
그렇지 않으면 ExtMapBuffer[시프트]=0;
}
//---
if((curlow<lastlow)||(lastlow<0))
{
lastlow=커로우;
lastlowpos=시프트;
}
마지막 최고=-1;
}
}

for(shift=막대-1; shift>=0; shift--)
{
if(shift>=바-확장 깊이) ExtMapBuffer[시프트]=0.0;
또 다른
{
res=ExtMapBuffer2[시프트];
if(res!=0.0) ExtMapBuffer[shift]=res;
}
}
}
 
Vladislav, 어떤 이유로 귀하의 코드는 모든 시간대에 작동하지 않습니다. 일부는 표시되고 일부는 표시되지 않습니다. 기이한. 공장.


그리고 어떤 것이 표시되지 않습니까? 다 보여주는 것 같아요. 네, 그리고 이것은 제 코드가 아닙니다. 어쨌든 나는 모든 버전의 MT를 가지고 있습니다.
 
Vladislav, 이것이 당신의 코드가 아니라는 사실은 이해할 수 있습니다. 나에게 그 코드를 전달했습니다.
표시되지 않는 시간대입니다. DC-브레잔.
GBP-CHF
표시되지 않음 - m1, m15. 나머지가 표시됩니다.
EURUSD
표시되지 않음 - m1, m5
AUD-USD - 모두 표시됩니다.
왜 그런지는 분명하지 않습니다.

아마도 Slava가 여름에 다시 한 코드가 있을 것입니다. 그러나 나는 그의 변화가 마음에 들지 않았다. 일부 문제가 해결되지 않았습니다.
=================
나쁘지 않은 리메이크된 GODZILLA(니콜라이). 그러나 그는 두 가지 문제만 해결했습니다.
1) 각 틱 에 대한 재계산 . 그는 그것을 대폭 줄였습니다.
2) 혹 제거 알고리즘을 추가했습니다. 혹은 주로 동일한 막대에 최소값과 최대값이 모두 있다는 사실에서 발생합니다. 그리고 지그재그 알고리즘은 최고점만 남기는 방식입니다. 이것은 종종 연속적으로 여러 고점으로 이어졌습니다.

GODZILL에서 수정한 지표 개선 옵션이 있습니다. 공중에 매달려 있는 꼬임을 제거했습니다. 그러나 내가 생각하는 것처럼 잘못된 극한 탐색 기능의 작업은 여전히 처음 두 광선에서 나타납니다. 그리고 이 문제 때문에 여기에서 이 주제를 제기했습니다.

다만, 검색 기능이 정상적으로 동작할 가능성은 있으나 이 기능에 대한 명확한 설명은 없다. 이 때문에 잘못된 사용이 발생합니다.
 
나에게 그것은 지정된 커플의 모든 t\f에서 추론됩니다. 이 코드가 어디에서 왔는지 기억이 나지 않습니다. 빌드 197을 제공할 때인 것 같았습니다. 어떤 이유로든 모든 MT에 코드가 있습니다. :). 내일 확인하겠습니다.
 
부끄럽지만 저는 전에는 지그재그에 진지하게 관심을 가져본 적이 없었습니다. :). 게시물의 코드 nen 10/18/06 17:46
이해할 수 없을 때까지. 나는 그것이 다음과 같아야한다고 생각합니다.
 ...
// val=High[Highest(NULL,0,MODE_HIGH,ExtDepth,shift)];
    highpos=Highest(NULL,0,MODE_HIGH,ExtDepth,shift);
    val=높음[높음];
    if(MathAbs(val-lastlow) < 포인트) val=0.0;
// if(val==lasthigh) val=0.0;
    또 다른 {
      마지막 고 = 발;
      if(highpos!=shift) val=0.0;
// if((val-High[shift])>(ExtDeviation*Point)) val=0.0;
      또 다른 {
...


여기에 "추가" 이전 코드가 주석 처리되어 있습니다. 아직 지그재그의 개념을 완전히 이해하지 못하더라도. 어쨌든 이러한 코드는 매달린 극한값을 제공하지 않습니다. 이 버전의 코드가 적합하지만 생각해내지 못했다면 :) 링크가 없는 점에 대해 사과드립니다.

 
칸디다균 감사합니다. 나는 그것이 어떻게 작동하는지 볼 것입니다. 그러나 지점의 제목에 있는 질문은 제거되지 않습니다. 지그재그로 극한 검색 기능의 "이해할 수없는"작동 문제가 드러났습니다. 라인 highpos=Highest(NULL,0,MODE_HIGH,ExtDepth,shift); 극한값을 찾는 데 도움이 됩니다. 그러나 지그재그 코드를 실행할 때 Highest 함수가 반환하는 highpos 인덱스는 종종 무작위입니다. 바의 실제 위치에서 편차가 있습니다. 즉, highpos는 예를 들어 15가 될 것입니다. 사실, 막대에는 다른 인덱스가 있습니다: 13 또는 16 또는 다른 것입니다. 스프레드가 획득됩니다. 이 때문에 작은 매개변수 값과 "작은" 시간 프레임(분, 5분 ...)에 지그재그가 불안정하게 작동하기 시작합니다.

확인. 하나님이 지그재그로 그와 함께 하시옵소서. 질문은 지그재그에 있지 않습니다. 그리고 MQ4 언어 의 기능은 안정적이고 예측 가능하게 작동해야 합니다.

그리고 이것이 주요 문제입니다. 검색 기능은 지그재그에만 적용되는 것이 아닙니다. 그러나 다른 많은 지표에서도 마찬가지입니다.

지그재그는 특별한 경우입니다. 그러나 문제를 강조하는 데에도 도움이 됩니다. 많은 지표가 지그재그를 기반으로 합니다. 지그재그가 불안정하게 작동합니다. 이것은 누구에게도 비밀이 아닙니다. 많은 사람들이 필요에 따라 지그재그로 프로그래밍하는 데 시간을 할애해야 합니다. 얼마나 많은 시간이 낭비됩니다. 지나간. 문제의 근본 원인에 대한 오해 때문입니다.
 
솔직한 당신의 말 : 부끄럽다, ..... 포스트 넨 10/18/06 5:46 pm의 코드는 아직 이해할 수 없습니다.

이것은 황금 단어입니다. 이런 말을 하는 것은 당신이 처음이 아닙니다. 그럼에도 불구하고 지그재그로 구현되고 이 코드에서 부분적으로 구현된 아이디어는 매우 좋습니다. 이러한 아이디어는 표준이 될 것입니다.
 
2넨 :
지표를 계산하는 과정에서 창을 이동할 때(shift,shift+ExtDepth) 새로운 극값의 출현은 새로운 가격과 이전 극값이 창을 떠났다는 사실 모두와 연관될 수 있습니다. 이 순간을 처리해야 합니다. 이렇게 하려면 내 삽입에서 if(highpos!=shift) val=0.0; . 이것이 표준 코드에서 어떻게 수행되는지 이해하지 못했습니다. 내 버전에서 매달린 극값이 사라진 것으로 판단하면 이것은 잘못 수행되거나 전혀 수행되지 않습니다.
그리고 지그재그의 불안정성은 정확히 무엇입니까?