새 막대를 감지하는 방법 - 페이지 2

 
Ian Harris :

안녕하세요 oneillj님,

이미 답장을 한 줄 알았는데 인터넷 에테르 속으로 사라진 것 같다.

당신이 제공한 코드 조각은 내가 처음에 불평했던 것과 거의 비슷합니다. 왜 그렇게 복잡합니까? 더 쉬운 방법이 있어야 한다고 생각했습니다. 나는 이것이 효과가있는 것 같습니다. 내가 틀렸다면 저를 수정하십시오. (저도 BarsCalculated를 사용해 보았지만 항상 Bars와 같기 때문에 테스트는 항상 false로 평가되었습니다.)

정적 정수 LastBarCount = 0;
if (바(_Symbol, _Period) > LastBarCount)
LastBarCount = 막대(_Symbol, _Period);
또 다른
반품;

;-) 이안

가능한 한 간단한 것이 필요하다는 데 전적으로 동의합니다.

슬프게도 이 코드는 MQL5에서 작동하지 않는 것 같습니다.

 
RoboSpider :
슬프게도 이것은 MQL5에서 작동하지 않는 것 같습니다.

막대는 어쨌든 새로운 막대를 감지하는 나쁜 방법입니다.

새로운 막대를 확인 하는 신뢰할 수 있는 유일한 방법은 시간을 사용하는 것입니다. 거래량 도 아니고 가격도 아니고 막대도 아닙니다.

static datetime LastBar =  0 ;
datetime  ThisBar = ( datetime ) SeriesInfoInteger ( _Symbol , PERIOD_CURRENT , SERIES_LASTBAR_DATE );
if (LastBar != ThisBar)
  {
    printf ( "New bar: %s" , TimeToString (ThisBar));
   LastBar = ThisBar;
  }
 
honest_knave :

막대는 어쨌든 새로운 막대를 감지하는 나쁜 방법입니다.

새로운 막대를 확인하는 신뢰할 수 있는 유일한 방법은 시간을 사용하는 것입니다. 거래량 도 아니고 가격도 아니고 막대도 아닙니다.

static datetime LastBar =  0 ;
datetime  ThisBar = ( datetime ) SeriesInfoInteger ( _Symbol , PERIOD_CURRENT , SERIES_LASTBAR_DATE );
if (LastBar != ThisBar)
  {
    printf ( "New bar: %s" , TimeToString (ThisBar));
   LastBar = ThisBar;
  }
당신은 나의 영웅이다!
 
honest_knave 막대는 어쨌든 새로운 막대를 감지하는 나쁜 방법입니다. 새로운 막대를 확인하는 신뢰할 수 있는 유일한 방법은 시간을 사용하는 것입니다. 거래량 도 아니고 가격도 아니고 막대도 아닙니다.
  1. 막대가 신뢰할 수 없음(새로 고침/재연결이 차트의 막대 수를 변경할 수 있음) 거래량이 신뢰할 수 없음(틱 누락) 가격이 신뢰할 수 없음(중복 가격 및 == 피연산자. - MQL4 포럼 .) 항상 시간을 사용하십시오. 새 양초 - MQL4 forum
 
honest_knave :

막대는 어쨌든 새로운 막대를 감지하는 나쁜 방법입니다.

새로운 막대를 확인하는 신뢰할 수 있는 유일한 방법은 시간을 사용하는 것입니다. 거래량 도 아니고 가격도 아니고 막대도 아닙니다.

static datetime LastBar =  0 ;
datetime  ThisBar = ( datetime ) SeriesInfoInteger ( _Symbol , PERIOD_CURRENT , SERIES_LASTBAR_DATE );
if (LastBar != ThisBar)
  {
    printf ( "New bar: %s" , TimeToString (ThisBar));
   LastBar = ThisBar;
  }

참고로 참고 자료에 다음 메모가 있습니다.

//-- SERIES_LASTBAR_DATE 가 있는 SeriesInfoInteger가 오류를 반환하는 경우가 있습니다.

그것은 오래 전이고 나는 몇 년 동안 이 기능을 사용/테스트하지 않았으므로 아마도 더 이상 그렇지 않을 것입니다. 그러나 새로운 막대를 감지하는 데 사용하고 싶다면 확인하는 것이 더 나을 것입니다 ;-)

 
Alain Verleyen :

참고로 참고 자료에 다음 메모가 있습니다.

//-- SERIES_LASTBAR_DATE 가 있는 SeriesInfoInteger가 오류를 반환하는 경우가 있습니다.

그것은 오래 전이고 나는 몇 년 동안 이 기능을 사용/테스트하지 않았으므로 아마도 더 이상 그렇지 않을 것입니다. 그러나 새로운 막대를 감지하는 데 사용하고 싶다면 확인하는 것이 더 나을 것입니다 ;-)

그것은 매우 신비한 Alain입니다! 어떤 유형의 오류입니까?

이 경우, belts'n'braces의 경우 호출 전에 SeriesInfoInteger >0 및/또는 ResetLastError를 확인한 다음 호출 후 _LastError를 확인하십시오.

또는 OnCalculate 또는 CopyTime 등의 경우 time[]과 같은 다른 곳의 시간 소스를 가져옵니다.

 

단순히 다음과 같은 것을 사용하지 않는 이유는 무엇입니까?

   static datetime prevTime= 0 ;
           datetime lastTime[ 1 ];
           if ( CopyTime ( _Symbol , _Period , 0 , 1 ,lastTime)== 1 && prevTime!=lastTime[ 0 ])
          {
               prevTime=lastTime[ 0 ];
              
               // ...
          }
모든 경우에 작동해야 합니다(CopyTime()에 오류가 있는 경우에도 트랩을 방지함)
 
honest_knave :

그것은 매우 신비한 Alain입니다! 어떤 유형의 오류입니까?

이 경우, belts'n'braces의 경우 호출 전에 SeriesInfoInteger >0 및/또는 ResetLastError를 확인한 다음 호출 후 _LastError를 확인하십시오.

또는 OnCalculate 또는 CopyTime 등의 경우 time[]과 같은 다른 곳의 시간 소스를 가져옵니다.

몇 년 전에 사용했을 때 SeriesInfoInteger()는 실제로 신뢰할 수 없었습니다. 이 정보로 무엇을 하는지는 여러분의 몫입니다 :-D
 
Alain Verleyen :
몇 년 전에 사용했을 때 SeriesInfoInteger()는 실제로 신뢰할 수 없었습니다. 이 정보로 무엇을 하는지는 여러분의 몫입니다 :-D

많지 않음 TBH - MT5에서 새 막대를 감지할 필요가 없습니다. 하지만 공유해 주셔서 감사합니다. 미래를 위해 염두에 두겠습니다.

나는 사람들이 지나치게 복잡하게 만드는 것처럼 보이는 것을 단순화하려고 했습니다.

그럼에도 불구하고 원칙은 남아 있습니다. 시간을 사용하십시오. 주의 사항: Alain의 불완전한 역사적 기록을 고려하여 자신의 위험을 무릅쓰고 시간을 확보하는 방법을 선택하십시오(그런데 XP 서비스 팩 1은 어떻게 보입니까?)

 
honest_knave :

많지 않음 TBH - MT5에서 새 막대를 감지할 필요가 없습니다. 하지만 공유해 주셔서 감사합니다. 미래를 위해 염두에 두겠습니다.

나는 사람들이 지나치게 복잡하게 만드는 것처럼 보이는 것을 단순화하려고 했습니다.

그럼에도 불구하고 원칙은 남아 있습니다. 시간을 사용하십시오. 주의 사항: Alain의 불완전한 역사적 기록을 고려하여 자신의 위험을 무릅쓰고 시간을 확보하는 방법을 선택하십시오(그런데 XP 서비스 팩 1은 어떻게 보입니까?)

사유: