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

 
FMIC :


이전 게시물에서 이전에 설명했듯이 다시 페인팅된 포인트도 포함하기 때문에 지그재그 포인트를 얻기 위해 높음 및 낮음 버퍼를 사용할 수 없습니다(내의 청록색 및 분홍색 점). 표준 지그재그에서도 이런 식으로 되어 있지만, 당신은 그것들을 보지 못할 뿐입니다. 그렇기 때문에 내 표시기가 표시되어 더 잘 이해할 수 있습니다.

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

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

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


안녕하세요 FMIC입니다.

설명과 도움을 주셔서 감사합니다. 나는 아직 높고 낮은 값을 얻는 데 성공하지 못했습니다. 문제는 (일반적으로) 다시 칠해지며 역사적 고점과 저점을 찾을 수 없다는 것입니다. 또한 원래 지그재그 표시기에서 모드 0과 모드 1 또는 모드 0과 모드 2를 사용하고 있지만 모든 결과에는 이미 두 값이 모두 있습니다. 값이 있지만 zz(모드 0)가 없는 zh(모드 1) 또는 zl(모드 2)이 있는 단일 행은 없습니다. 그래서 나는 그 방법을 사용하는 데 성공할 수 없었다.

게다가 iCustom() 함수 의 인덱스를 사용했지만 성공하지 못했습니다. 매우 간단해 보이지만 1일 이상 작업하고 있지만 솔루션을 찾을 수 없습니다.

첨부 파일(버전 5)에서 내 코드를 찾으십시오. 도움을 주시면 대단히 감사하겠습니다.

파일:
 

몇 가지 테스트를 더 실행하고 시각적 테스트 도 수행합니다. 다시 칠하는 것을 피하기 위해 iCustom 인덱스를 다시 100틱으로 설정했지만 실제로는 그렇습니다. 문제는 지그재그 표시기를 호출할 때마다 실제 데이터를 찾고 있다는 것입니다. 100틱 전, 10틱 전 또는 1000틱 전은 영향을 미치지 않습니다. 따라서 인덱스를 1로 사용하는 것이 좋습니다.

내 이해는 배열을 확인하고 데이터를 제거하여 높낮이를 수정하는 또 다른 루프를 수행해야 한다는 것입니다. 예를 들어 두 개의 연속적인 최고점이 있는 경우 최저점을 제거하고 최저점에 대해 반대 작업을 수행합니다. 내 초기 생각은 다시 어레이에서 100일을 말하고 연속 최고점이 있는지 확인하는 것입니다. 아직 알고리즘에 대한 결론을 내리지 않았습니다.

더 나은 생각이 있습니까? 과거 데이터의 최고점과 최저점을 식별하기 위해 완전히 다른 접근 방식을 사용하는 것을 포함합니까?

 
aed71 :

몇 가지 테스트를 더 실행하고 시각적 테스트도 수행합니다. 다시 칠하는 것을 피하기 위해 iCustom 인덱스를 다시 100틱으로 설정했지만 실제로는 그렇습니다. 문제는 지그재그 표시기를 호출할 때마다 실제 데이터를 찾고 있다는 것입니다. 100틱 전, 10틱 전 또는 1000틱 전은 영향을 미치지 않습니다. 따라서 인덱스를 1로 사용하는 것이 좋습니다.

내 이해는 배열을 확인하고 데이터를 제거하여 높낮이를 수정하는 또 다른 루프를 수행해야 한다는 것입니다. 예를 들어 두 개의 연속적인 최고점이 있는 경우 최저점을 제거하고 최저점에 대해 반대 작업을 수행합니다. 내 초기 생각은 다시 어레이에서 100일을 말하고 연속 최고점이 있는지 확인하는 것입니다. 아직 알고리즘에 대한 결론을 내리지 않았습니다.

더 나은 생각이 있습니까? 과거 데이터의 최고점과 최저점을 식별하기 위해 완전히 다른 접근 방식을 사용하는 것을 포함합니까?


안녕하세요 aed71님.

방금 직장에서 돌아와서 잠자리에 들 시간입니다. 아침에 코드를 자세히 살펴보고 올바른 솔루션을 제공하겠습니다.

그러나 간단히 설명하자면 "깊이" 및 "백스텝" 매개변수 를 고려하기에 충분한 만큼만 1000개 또는 100개 막대를 되돌아볼 필요가 없습니다.

또한 데이터를 수집하고 분석하기만 하므로 틱 간격을 사용하는 EA 대신 전체 히스토리 데이터를 즉시 진행하는 스크립트를 고려하십시오. 이렇게 하면 다시 칠하는 것에 대해 걱정할 필요가 없습니다.

내일은 더 자세한 설명을 드리겠습니다.

친애하는,
FMIC

 

안녕하세요 FMIC입니다.

어제부터 나는 잘못된 고점과 저점을 제거하는 방법을 알고리즘에 대해 연구하고 있으며 이에 대해 첨부된 버전을 코딩했습니다. 그것은 어떻게 든 잘못된 신호를 제거하지만 때로는 수행해서는 안되는 원래 신호를 삭제합니다.

코드의 원리는 다음과 같습니다.

높은 경우; 마지막으로 알려진 저점까지 돌아가 현재 고점 이 이전 고점보다 높은지 단계별로 확인한 다음 이전 고점을 지웁니다.

낮은 부분에도 동일하게 적용됩니다. 코드에 약간의 설명을 넣었습니다.

적어도 나는 더 이상 동시 최고 또는 최저가 없습니다 :-)

이제 원래의 고점/저점을 삭제하는 버그를 찾아야 합니다.

내 코드를 볼 수 있다면 짧은 시간 내에 버그를 이해할 수 있을 것입니다. 너무 집중해서 단순한 버그도 안보일수도...

다시 한 번 도와주셔서 감사합니다.

파일:
 

좋은 아침 "aed71",

나는 아직 가장 최근 파일을 보지 않았지만 여기에 특정 기간을 검토하고 지그재그 최고 및 최저치를 CSV 파일로 출력하는 스크립트 (EA가 아니라 지표가 아님)가 있습니다.

스크립트를 차트에 첨부하기 만 하면 몇 초 안에 실행됩니다. 그런 다음 "MQL4\Files" 폴더에 생성된 CSV 파일을 검토하십시오. 2013년 EURUSD 일간 차트에 실행된 예를 포함시켰습니다.

이것은 스크립트이기 때문에 다시 칠하는 것에 대해 전혀 걱정할 필요가 없습니다.

친애하는,
FMIC

추신! 다음에 최신 파일을 검토하고 내 의견을 알려 드리겠습니다.

편집: 나는 당신의 최신 코드를 보았고 그것은 어디에나 있습니다. 내 코드를 살펴보고 Highs Lows에 대한 테스트가 훨씬 더 간단하다는 것을 알 수 있습니다. 코드에서 모든 혼란이 필요하지 않습니다. 다음은 추출(ZIP 파일의 전체 코드)입니다.

 if ( dblZigZagPoint > 0 )   // Test if a ZigZag Point is found
{
   intZZCount++;   // Increment ZigZag Counter

   // Test if it is a High, Low or Unknown
   string strZZType = strZZUnknown;
   if ( dblZigZagHigh > 0 ) strZZType = strZZHigh;
   else   if ( dblZigZagLow > 0 ) strZZType = strZZLow;
               
   // Output the ZigZag Point Data to CSV File
   FileWrite( intCSVFileHandle, intZZCount, strZZType, DoubleToString ( dblZigZagPoint, intDigits ), Time [ intBarShift ] );
}
파일:
 
FMIC :

좋은 아침 "aed71",

나는 아직 가장 최근 파일을 보지 않았지만 여기에 특정 기간을 검토하고 지그재그 최고 및 최저치를 CSV 파일로 출력하는 스크립트 (EA가 아니라 지표가 아님)가 있습니다.

스크립트를 차트에 첨부하기 만 하면 몇 초 만에 실행됩니다. 그런 다음 "MQL4\Files" 폴더에 생성된 CSV 파일을 검토하십시오. 2013년 EURUSD 일간 차트에 실행된 예를 포함시켰습니다.

이것은 스크립트이기 때문에 다시 칠하는 것에 대해 전혀 걱정할 필요가 없습니다.

친애하는,
FMIC

추신! 다음에 최신 파일을 검토하고 내 의견을 알려 드리겠습니다.

편집: 나는 당신의 최신 코드를 보았고 그것은 어디에나 있습니다.
내 코드를 살펴보고 Highs Lows에 대한 테스트가 훨씬 더 간단하다는 것을 알 수 있습니다.
코드에서 모든 혼란이 필요하지 않습니다.


훌륭한 작업, 원활하게 작동하는 코드 베이스에 포함되어야 합니다.... 감사합니다.

실례가 되지 않는다면 두 가지 질문이 있습니다.

1-) 내가 다운로드하여 그래프에서 보는 내 데이터는 4자리로 표시되지만 스크립트의 출력은 5자리입니다. 어떻게 가능할까요? 끝에 0이 없는 5자리 숫자를 의미합니다.

개수,유형,가격,날짜시간

1,H,1.34962,2013.11.04 00:30:00

2,L,1.34861,2013.11.04 02:15:00

3,H,1.35015,2013.11.04 03:00:00

4,엘,1.34417,2013.11.04 05:15:00

5,H,1.35127,2013.11.04 11:15:00

6,엘,1.34910,2013.11.04 15:45:00

7,H,1.35236,2013.11.04 18:15:00

8,L,1.35045,2013.11.04 19:45:00

9,H,1.35203,2013.11.04 22:45:00

2-) 스크립트는 매우 유용하지만 이것은 내가 과거 데이터를 분석하는 프로젝트 의 첫 번째 부분이었습니다. 그 후 나는 내 전문가에게 코드를 포함시키고 어떻게든 최근 기록 간의 상관 관계를 찾고 그에 따라 현재 변수의 추가 최적화를 결정할 계획이었습니다. 즉, 전문가에서도 비슷한 것을 실행해야합니다. 그렇다면 어떻게 전문가로 전환할 수 있을까요?

도움을 주셔서 다시 한 번 감사드립니다 :-)


 
aed71 :


훌륭한 작업, 원활하게 작동하는 코드 베이스에 포함되어야 합니다.... 감사합니다.

실례가 되지 않는다면 두 가지 질문이 있습니다.

1-) 내가 다운로드하여 그래프에서 보는 내 데이터는 4자리로 표시되지만 스크립트의 출력은 5자리입니다. 어떻게 가능할까요? 끝에 0이 없는 5자리 숫자를 의미합니다.

2-) 스크립트는 매우 유용하지만 이것은 내가 과거 데이터를 분석하는 프로젝트의 첫 번째 부분이었습니다. 그 후 나는 내 전문가에게 코드를 포함시키고 어떻게든 최근 기록 간의 상관 관계를 찾고 그에 따라 현재 변수의 추가 최적화를 결정할 계획이었습니다. 즉, 전문가에서도 비슷한 것을 실행해야합니다. 그렇다면 어떻게 전문가로 전환할 수 있을까요?

도움을 주셔서 다시 한 번 감사드립니다 :-)

  1. 5자리 중개인이 있는 경우 데이터에는 5자리가 있습니다. 많은 표시기의 문제는 "IndicatorDigits()" 기능 을 사용하지 않으므로 브로커가 제공하는 것과 상관없이 기본 자릿수만 표시된다는 것입니다. 내 ZigZagZug 코드를 보면 MetaQuotes가 자체 코드에서 수행하지 못한 문제를 해결하기 위해 명시적으로 설정한 것을 알 수 있습니다.

     // Set Number of Digits (Precision)
       IndicatorDigits ( Digits );

  2. 전문가에게 코드를 사용하는 것과 관련하여 이는 전략 및 재페인트가 코드에 미치는 영향과 같은 많은 것에 달려 있습니다. 일부 전략은 다시 그리기의 영향을 받지 않고 다른 전략은 매우 민감합니다. "알 수 없는" 전략에 대해서는 많은 조언을 드릴 수 없습니다. 이 경우에 대해 구체적으로 설명해야 합니다. 그러나 1000개의 막대를 뒤돌아 볼 필요가 없음을 기억하십시오. ZigZag가 작동하는 방식과 높고 낮은 브레이크아웃을 사용하는 방법, 다시 검색하는 방법을 배운다면 때때로 (Depth + Backstep) 막대의 거리만 뒤돌아보면 됩니다. 전략에 따라 약간 더 많거나 더 많을 수 있습니다. 훨씬 적지만 1000이나 100은 사용하지 않습니다.

 

숫자에 대한 정보 감사합니다. 저에게는 머리가 아프네요. 자세한 내용을 읽고 이해해야 합니다...

내가 달성하려는 것을 더 자세히 설명하겠습니다. 나는 지난 10년 동안 테스트한 꽤 수익성 있는 전문가(현재)가 있습니다. 그러나 전문가는 각 조건에서 잘 행동하지 않고 아주 나쁘지는 않지만 몇 년/나방에서 유망하지 않습니다. 수익성에 영향을 미치는 사전 최적화된 변수가 있습니다. 변수를 자체 최적화하기 위해 최근 기록과 오늘 간의 상관 관계를 기꺼이 찾고 싶습니다.

따라서 내가 필요한 것은 과거 데이터의 최고점과 최저점을 찾아 과거 데이터의 기간과 진폭을 계산하는 것입니다. 나는 최근 과거 데이터와 전문가의 현재 수익성 변수 사이의 상관관계를 수동으로 찾으려고 노력할 것입니다. 어떻게든 찾을 수 있다면 비슷한 코드를 내 전문가에게 추가하고 매일 지난 1주의 통계 데이터를 확인하고 상관 상수에 따라 전문가 변수를 자체 최적화합니다.

이것이 전략입니다. 저는 Fourier, Hurts Cycles, Goertzel, MESA 등을 포함하여 과거 데이터를 분석하기 위해 다른 많은 주제에 대해 작업했지만 기존 데이터를 실행하는 방법을 사용하는 것이 훨씬 낫다는 결론을 내렸습니다.

따라서 실시간 고저 분석이 필요하지 않습니다. 1500만 데이터 세트에서 반나절 데이터(거의 45틱)를 잃을 준비가 되었습니다. 아마 지난 5일과 4.5일의 변화를 보면 새로운 최적화 값을 찾기에 충분할 것 같아요.

내 코드와 관련하여 문제는 다음과 같습니다. 이전 고점을 확인하는 동안 너무 뒤로 돌아가서 로컬 최저값에서 멈춰야 합니다. 도구의 전문가 부분이 필요하기 때문에 여전히 작업 중입니다.

 
aed71 :

숫자에 대한 정보 감사합니다. 저에게는 머리가 아프네요. 자세한 내용을 읽고 이해해야 합니다...

내가 달성하려는 것을 더 자세히 설명하겠습니다. 나는 지난 10년 동안 테스트한 꽤 수익성 있는 전문가(현재)가 있습니다. 그러나 전문가는 각 조건에서 잘 행동하지 않고 아주 나쁘지는 않지만 몇 년/나방에서 유망하지 않습니다. 수익성에 영향을 미치는 사전 최적화된 변수가 있습니다. 변수를 자체 최적화하기 위해 최근 기록과 오늘 간의 상관 관계를 기꺼이 찾고 싶습니다.

따라서 내가 필요한 것은 과거 데이터의 최고점과 최저점을 찾아 과거 데이터의 기간과 진폭을 계산하는 것입니다. 나는 최근 과거 데이터와 전문가의 현재 수익성 변수 사이의 상관 관계를 수동으로 찾으려고 노력할 것입니다. 어떻게든 찾을 수 있다면 비슷한 코드를 내 전문가에게 추가하고 매일 지난 1주의 통계 데이터를 확인하고 상관 상수에 따라 전문가 변수를 자체 최적화합니다.

이것이 전략입니다. 나는 Fourier, Hurts Cycles, Goertzel, MESA 등을 포함하여 과거 데이터를 분석하기 위해 다른 많은 주제에 대해 작업했지만 기존 데이터를 실행하는 방법을 사용하는 것이 훨씬 낫다는 결론을 내렸습니다.

따라서 실시간 고저 분석이 필요하지 않습니다. 1500만 데이터 세트에서 반나절 데이터(거의 45틱)를 잃을 준비가 되었습니다. 아마 지난 5일과 4.5일의 변화를 보면 새로운 최적화 값을 찾기에 충분할 것 같아요.

내 코드와 관련하여 문제는 다음과 같습니다. 이전 고점을 확인하는 동안 너무 많이 뒤로 돌아가서 로컬 최저값에서 멈춰야 합니다. 도구의 전문가 부분이 필요하기 때문에 여전히 작업 중입니다.


귀하가 설명한 내용은 조언을 제공하기 위해 EA의 성격을 이해하는 데 실제로 도움이 되지 않습니다.

원하는 경우 세부 정보가 포함된 개인 메시지 를 보내주시면 EA를 자세히 살펴보고 필요한 코드를 제안할 수 있습니다.

또는 내가 제안할 수 있는 것은 가능한 한 최선을 다해 구현하려고 하고, 해결해야 하는 특정 문제가 있을 때 포럼으로 돌아와 특정 쿼리를 게시하고 사용자가 도움을 줄 수 있는지 확인하는 것입니다.

 

확인 감사합니다. FMIC.

사실 내 문제는 포럼에서 공유한 전문가에 관한 것이었습니다. 당신의 스크립트는 그 덕분에 잘 작동하지만 기본적으로 거의 실시간 모드에서도 작동할 수 있는 전문가의 형태로 필요합니다.

사유: