MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1171

 
Igor Zakharov :

이야기가 꼬이는가?

아마 그렇습니다. 하지만 100% 확신할 수는 없습니다. 확인 방법, 인쇄물이 막대 수를 변경합니까?

이고르 자카로프 :

이 경우에 대한 재계산이 없습니다.

감사합니다. 그런 것 같습니다.

이고르 자카로프 :

그리고 나타난 표시기 버퍼의 새로운 요소는 쓰레기로 채워집니다.

새것 뿐만 아니라 옛것들도 마찬가지인 것 같습니다. 어떤 이유로 이 경우 화살표가 무작위로 그려질 뿐만 아니라 이론상 그렇지 않아도 표시선 자체가 끊어집니다. 스왑 히스토리의 경우 재계산을 정리하는 방법이나 예시를 볼 수 있는 곳을 알려주세요.

 
Alexey Viktorov :

이 애드온을 별도로 삽입했다고 망쳤습니다. 화살표는 버퍼를 변경하는 순간에만 배치되어야 합니다. 동시에 다른 모든 경우에는 버퍼에 빈 값을 넣는 것을 잊지 마십시오.

이 방법은 훨씬 더 좋습니다. 즉시 빈 값을 설정하고 추세가 변경되면 버퍼 중 하나를 화살표로 채웁니다.

답변 해주셔서 감사합니다.

원래 인디케이터 를 확인해보니 제가 잘못 쓴게 아니라 처음에는 삐뚤삐뚤하게 써져있더라구요. 저것들. 수정하지 않으면 기록을 바꿀 때도 중단됩니다.

 
이미 여러 번 - 그는 질문을 했고 그에 대한 응답으로 침묵을 지켰습니다. 신규 이민자를 위한 일종의 선택적 도움.
 
novichok2018 :
이미 여러 번 - 그는 질문을 했고 그에 대한 응답으로 침묵을 지켰습니다. 신규 이민자를 위한 일부 선택적 도움.

코드에서 가장 먼저 눈에 띄는 것은 이름이 LowLine 인 그래픽 추세선 개체를 만들고 나중에 삭제하거나 다른 이름으로 유사한 개체를 만들지 않는다는 것입니다...

같은 이름으로 ObjectCreate()를 여러 번 실행할 수 없습니다. 처음에만 작동하고 오류가 발생합니다. 나중에 ObjectMove()를 사용하여 이 개체를 이동할 수 있습니다.


여전히 프랙탈 정의에 문제가 있습니다. 막대 번호 2에서 프랙탈을 찾기 위해 막대를 열려고 시도합니다. 일반적으로 막대는 프랙탈 표시기 호출로 막대를 순환하고 첫 번째 프랙탈이 발견되면 주기를 중단합니다. 프랙탈이 있던 막대의 번호를 얻으십시오.

 
Igor Makanu :

여전히 프랙탈 정의에 문제가 있습니다. 막대 번호 2에서 프랙탈을 찾기 위해 막대를 열려고 시도합니다. 일반적으로 막대는 프랙탈 표시기 호출로 막대를 순환하고 첫 번째 프랙탈이 발견되면 주기를 중단합니다. 프랙탈이 있던 막대의 번호를 얻으십시오.

고맙습니다!

실제로, 프랙탈이 표시된 막대의 수를 얻는 방법을 이해하지 못합니다. 두 개의 막대가 늦게 나타나기 때문입니다. 그래서 두 번째 바에서 그를 잡는다. 동시에 경고는 지정된 기간의 프랙탈 수를 제공하지만 추세선을 그리기 위해 두 번째 프랙탈의 지점을 설정하는 방법은 무엇입니까? 귀하의 권장 사항에 따르면 수행 방법도 명확하지 않습니다.

호출된 프랙탈 표시기 는 사용 가능한 전체 기록에 대해 프랙탈을 빌드합니다. 전날의 프랙탈을 고려하고 마지막 프랙탈을 기반으로 선을 자동으로 다시 작성하면서 하루의 지정된 기간에 속하는 프랙탈을 기반으로 추세선을 그리는 문제를 해결하려고합니다. 그리고 지식이 부족합니다.

 
novichok2018 :

고맙습니다!

실제로, 프랙탈이 표시된 막대의 수를 얻는 방법을 이해하지 못합니다. 두 개의 막대가 늦게 나타나기 때문입니다. 그래서 두 번째 바에서 그를 잡는다. 동시에 경고는 지정된 기간의 프랙탈 수를 제공하지만 추세선을 그리기 위해 두 번째 프랙탈의 지점을 설정하는 방법은 무엇입니까? 귀하의 권장 사항에 따르면 수행 방법도 명확하지 않습니다.

호출된 프랙탈 표시기 는 사용 가능한 전체 기록에 대해 프랙탈을 빌드합니다. 전날의 프랙탈을 고려하고 마지막 프랙탈을 기반으로 선을 자동으로 다시 작성하면서 하루의 지정된 기간에 속하는 프랙탈을 기반으로 추세선을 그리는 문제를 해결하려고합니다. 그리고 지식이 부족합니다.

SECOND 막대를 잡아야 합니까?

테스트는 다음과 같습니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

MQL5: 예.

블라디미르 카르푸토프 , 2018.03.19 05:54

  • 2.3. iFractals(프랙탈). 고려해야 할 두 가지 중요한 요소

프랙탈로 작업할 때 고려해야 할 두 가지 요소가 있습니다.

요인 1

"rates_total-5"에서 "rates_total-3" 까지 막대의 프랙탈 은 더 이상 다시 그릴 수 없습니다 . 이는 " Fractals.mq5 " 표시기의 디자인을 따릅니다(표시기의 공개 코드는 [데이터 폴더]\MQL5\에 있습니다. Indicators\Examples\Fractals.mq5 ) - "rates_total-5"와 "rates_total-3" 사이의 막대가 이미 형성되어 있기 때문에

 //---
   if (prev_calculated< 7 )
     {
      limit= 2 ;
       //--- clean up arrays
       ArrayInitialize (ExtUpperBuffer, EMPTY_VALUE );
       ArrayInitialize (ExtLowerBuffer, EMPTY_VALUE );
     }
   else limit=rates_total- 5 ;

   for (i=limit; i<rates_total- 3 && ! IsStopped ();i++)
     {
       //---- Upper Fractal
       if (high[i]>high[i+ 1 ] && high[i]>high[i+ 2 ] && high[i]>=high[i- 1 ] && high[i]>=high[i- 2 ])
         ExtUpperBuffer[i]=high[i];
       else ExtUpperBuffer[i]= EMPTY_VALUE ;

       //---- Lower Fractal
       if (low[i]<low[i+ 1 ] && low[i]<low[i+ 2 ] && low[i]<=low[i- 1 ] && low[i]<=low[i- 2 ])
         ExtLowerBuffer[i]=low[i];
       else ExtLowerBuffer[i]= EMPTY_VALUE ;
     }
//--- OnCalculate done. Return new prev_calculated.
   return (rates_total);
  }

도형

쌀. 1. "프랙탈" 표시기가 작동하는 방식입니다. " Fractals.mq5 " 표시기를 기반으로 하는 파일 번호 매기기

즉, EA의 iFractals 표시기에서 데이터를 수신하면 "rates_total-5", "rates_total-4" 막대("Fractals.mq5" 표시기의 위치에서 번호가 매겨지는 막대)에 프랙탈이 있습니다. 다시 그려지지 않는 것이 보장됩니다.


그리고 여기가 "rates_total-5" 바에 프랙탈이 형성되는 순간 - 2016년 1월 2일 03:00 우측에 새로운 바가 나타나는 순간("Fractals.mq5" 위치에서 파일 넘버링 " 표시) :

프랙탈, 5바

쌀. 2. "rates_total-5" 막대에 프랙탈이 형성되는 순간

요인 2

프랙탈 표시기 는 "0.0"이 아니라 EMPTY_VALUE를 빈 값으로 사용합니다. 예외는 표시기 버퍼가 0으로 초기화되는 첫 번째 초기화입니다(이는 "Fractals.mq5" 표시기가 아니라 배열을 생성하고 표시기 버퍼에 연결할 때 MQL5에 의해 수행됨).


 
novichok2018 :

귀하의 권장 사항에 따르면 수행 방법도 명확하지 않습니다.

여기에 프랙탈을 찾는 기능을 배치했습니다. 고문을 위해 한 것입니다. 모든 것이 저에게 효과적이었습니다.

https://www.mql5.com/ru/forum/160683/page968#comment_13214633

 
Vladimir Karputov :

SECOND 막대를 잡아야 합니까?

테스트는 다음과 같습니다.


네 감사합니다. 세 번째에 다시 그리지 않고. 하지만 문제의 핵심은 바뀌지 않습니다.

 
Igor Makanu :

여기에 프랙탈을 찾는 기능을 배치했습니다. 고문을 위해 한 것입니다. 모든 것이 저에게 효과적이었습니다.

https://www.mql5.com/ru/forum/160683/page968#comment_13214633

덕분에 작동합니다.

코드에서 새 프랙탈의 모양을 반영하는 방법을 이해하지 못합니다. 결국, barfrup_1은 항상 barfrup_2보다 작으므로, 새로운 프랙탈이 나타날 때 barfrup_1의 번호 매기기 점프는 아무 것도 제공하지 않습니다. 왜냐하면 barfrup_2보다 작게 유지됩니다.

그리고 한 가지 더: barfrup_1 및 barfrup_2의 높은 값을 추출하는 방법을 이해하지 못합니다.

 
novichok2018 :

그리고 한 가지 더: barfrup_1 및 barfrup_2의 높은 값을 추출하는 방법을 이해하지 못합니다.

이 기능을 사용하여 차트에 프랙탈 표시기 및 테스트 EA를 드롭합니다.

내 함수에 MODE_UPPER 및 MODE_LOWER를 전달하여 찾은 값을 인쇄합니다.

novichok2018 :

덕분에 작동합니다.

코드에서 새로운 프랙탈의 모양을 반영하는 방법을 이해하지 못합니다.

막대 시간을 기억해야 합니다. 새 막대가 나타나면 번호가 변경되고 막대 여는 시간은 항상 일정합니다.

저것들. 내 코드를 실행하고 프랙탈이 발견된 막대의 시간을 기억한 다음 다시 실행하십시오. 막대를 찾아 이 막대의 시간과 기억된 막대의 시간을 비교하십시오. 시간이 다르므로 이것은 새로운 프랙탈입니다.