prev_calculated

 
" 오류, 버그, 질문 "과 관련이 없는 댓글은 이 항목으로 이동되었습니다.
 

MT5 빌드 1455

테스트 표시기:

#property indicator_chart_window
#property indicator_buffers      0
#property indicator_plots         0

int OnInit ( void ) { return ( INIT_SUCCEEDED );}

int OnCalculate ( const int rates_total,
   const int prev_calculated,
   const datetime & Time [],
   const double & Open [],
   const double & High [],
   const double & Low [],
   const double & Close [],
   const long &TickVolume[],
   const long & Volume [],
   const int &Spread[]
) {
   static int si_Tick = 0 ;
   Print (++si_Tick, ": prev_calculated = " , prev_calculated);
  
   return (rates_total);
}

1. 차트에 지표를 걸어

2. 터미널을 닫습니다

3. 터미널을 연다

로그에서:

2016.10 . 17 08 : 04 : 38.755 Test (USDJPY,M15)       1 : prev_calculated = 0
2016.10 . 17 08 : 04 : 38.757 Test (USDJPY,M15)       2 : prev_calculated = 100322
2016.10 . 17 08 : 04 : 39.060 Test (USDJPY,M15)       3 : prev_calculated = 0
2016.10 . 17 08 : 04 : 39.837 Test (USDJPY,M15)       4 : prev_calculated = 100322
2016.10 . 17 08 : 04 : 39.837 Test (USDJPY,M15)       5 : prev_calculated = 100322
...

내가 뭔가를 이해하지 못하거나 prev_calculated 변수를 신뢰하는 것이 불가능한가요? 목발을 잘라야 하나요?

 
Alexander Puzanov :

MT5 빌드 1455

테스트 표시기:

#property indicator_chart_window
#property indicator_buffers      0
#property indicator_plots         0

int OnInit ( void ) { return ( INIT_SUCCEEDED );}

int OnCalculate ( const int rates_total,
   const int prev_calculated,
   const datetime & Time [],
   const double & Open [],
   const double & High [],
   const double & Low [],
   const double & Close [],
   const long &TickVolume[],
   const long & Volume [],
   const int &Spread[]
) {
   static int si_Tick = 0 ;
   Print (++si_Tick, ": prev_calculated = " , prev_calculated);
  
   return (rates_total);
}

1. 차트에 지표를 걸어

2. 터미널을 닫는다

3. 터미널을 연다

로그에서:

2016.10 . 17 08 : 04 : 38.755 Test (USDJPY,M15)       1 : prev_calculated = 0
2016.10 . 17 08 : 04 : 38.757 Test (USDJPY,M15)       2 : prev_calculated = 100322
2016.10 . 17 08 : 04 : 39.060 Test (USDJPY,M15)       3 : prev_calculated = 0
2016.10 . 17 08 : 04 : 39.837 Test (USDJPY,M15)       4 : prev_calculated = 100322
2016.10 . 17 08 : 04 : 39.837 Test (USDJPY,M15)       5 : prev_calculated = 100322
...

내가 뭔가를 이해하지 못하거나 prev_calculated 변수를 신뢰하는 것이 불가능한가요? 목발을 잘라야 하나요?

변수 prev_calculated는 체크섬이 변경된 경우 히스토리를 페이징하지 않아도 0으로 재설정될 수 있습니다(이는 서비스 데스크의 대략적인 답변임).
 
Alexey Kozitsyn :
변수 prev_calculated는 체크섬이 변경된 경우 히스토리를 페이징하지 않아도 0으로 재설정될 수 있습니다(이는 서비스 데스크의 대략적인 답변임).
알았습니다. 고맙습니다. 목수에게 서명 ..
 
Alexander Puzanov :
알았습니다. 고맙습니다. 목수에게 서명 ..
그렇게 과장할 필요가 없습니다. prev_calculate에서 0을 반환하는 것은 가장 드문 이벤트입니다. 프로그래머의 임무는 이러한 이벤트를 포착하고 이 경우 표시기 버퍼 를 올바르게 채우는 것입니다. 그 이상도 그 이하도 아닙니다.
 
Ilyas :

연산자 *(역참조/인디렉션) 및 &(Address-of)가 추가되었으며 언어의 추가 변경은 수행/계획되지 않습니다.

다음을 설명하십시오.

* 참조로 변수 가져오기 - 다음에만 적용됨:

1. 클래스 객체

2. 구조체 객체

3. 기본 유형

이 맥락에서 그것은 단지 rlvalue입니까, 아니면 lvalue이기도 합니까?

 
Karputov Vladimir :
프로그래머의 임무는 그러한 이벤트를 잡는 것입니다.

따라서 저는 프로그래머가 아닙니다. 작업이 다릅니다. Joiner, 아마도 - 나는 '목발을 자르고' '나는 이벤트를 잡고 있다'고 생각할 것입니다.

그리고 이 변수의 선언된 목적은 다음과 같기 때문에 과장하지 않습니다.

prev_calculated   // обработано баров на предыдущем вызове

이 약속 외에도 기록의 변경 플래그와 추적할 몇 가지 다른 변경 사항에 대한 플래그가 걸려 있습니다. 모두 유용하지만 의도한 목적으로 사용할 수 없습니다. '이전 호출에서 처리된 막대 수'를 표시하기 위해 - prev_calculated는 허용되지 않습니다.

 
Alexander Puzanov :

따라서 저는 프로그래머가 아닙니다. 작업이 다릅니다. Joiner, 아마도 - 나는 '목발을 자르고' '나는 이벤트를 잡고 있다'고 생각할 것입니다.

그리고 이 변수의 선언된 목적은 다음과 같기 때문에 과장하지 않습니다.

prev_calculated   // обработано баров на предыдущем вызове

이 약속 외에도 기록의 변경 플래그와 추적할 몇 가지 다른 변경 사항에 대한 플래그가 걸려 있습니다. 모두 유용하지만 의도한 목적으로 사용할 수 없습니다. '이전 호출에서 처리된 막대 수'를 표시하기 위해 - prev_calculated는 허용되지 않습니다.

그리고 0일 때 전체 지표를 다시 계산하면? 제 생각에는 최고의 솔루션입니다.
 
Alexander Puzanov :

따라서 저는 프로그래머가 아닙니다. 작업이 다릅니다. Joiner, 아마도 - 나는 '목발을 자르고' '나는 이벤트를 잡고 있다'고 생각할 것입니다.

그리고 이 변수의 선언된 목적은 다음과 같기 때문에 과장하지 않습니다.

prev_calculated   // обработано баров на предыдущем вызове

이 약속 외에도 기록의 변경 플래그와 추적할 몇 가지 다른 변경 사항에 대한 플래그가 걸려 있습니다. 모두 유용하지만 의도한 목적으로 사용할 수 없습니다. '이전 호출에서 처리된 막대 수'를 표시하기 위해 - prev_calculated는 허용되지 않습니다.

prev_calculated=0이면 전체 재계산이 수행되어야 함을 의미합니다. 이 경우 모든 표준 지표가 완전히 다시 계산됩니다.

명확하지 않은 것은 무엇입니까?

체크섬은 역사가 바뀌었다고 합니다. 체크섬이 변경된 이유를 찾는 것보다 표시기를 다시 계산하는 것이 더 저렴합니다.

문서는 이것을 분명히 말하고 있습니다.

OnCalculate() 함수에서 반환된 값과 두 번째 입력 매개변수 prev_calculated 사이의 관계에 유의하십시오. 함수를 호출할 때 prev_calculated 매개변수에는 이전 호출 에서 OnCalculate() 함수가 반환 한 값이 포함됩니다. 이를 통해 이 기능의 이전 실행 이후 변경되지 않은 막대에 대한 재계산을 피하기 위해 사용자 지정 지표를 계산하는 경제적인 알고리즘을 구현할 수 있습니다.

이렇게 하려면 일반적으로 현재 함수 호출의 막대 수를 포함하는 Rates_total 매개변수의 값을 반환하는 것으로 충분합니다. OnCalculate() 함수에 대한 마지막 호출 이후 가격 데이터가 변경된 경우(더 깊은 기록이 업로드되었거나 기록 공백이 채워진 경우) prev_calculated 입력 매개변수의 값은 터미널 자체에 의해 0으로 설정됩니다 .

 
Alexey Kozitsyn :
그리고 0일 때 전체 지표를 다시 계산하면? 제 생각에는 최고의 솔루션입니다.
이것이 바로 당신이 해야 할 일입니다. prev_calculate==0을 수신하면 ENTIRE 표시기를 다시 계산해야 합니다. rev_calculate==0이므로 이것은 일반적으로 히스토리 페이징입니다. 기록이 펌핑 된 경우 건너 뛰거나 이전에 계산되지 않은 새 막대 가있을 수 있습니다. 즉, 표시기 판독 값이 이미 올바르지 않습니다.
 
Karputov Vladimir :
이것이 바로 당신이 해야 할 일입니다. prev_calculate==0을 수신하면 ENTIRE 표시기를 다시 계산해야 합니다. rev_calculate==0이므로 이것은 일반적으로 히스토리 페이징입니다. 기록이 펌핑 된 경우 건너 뛰거나 이전에 계산되지 않은 새 막대 가있을 수 있습니다. 즉, 표시기 판독 값이 이미 올바르지 않습니다.
:) 그게 내가하는 일입니다...