TF 변경이 문제

 
사실 문제는 아직 히스토리가 펌핑되지 않은 TF를 변경할 때 선을 그리는 지표가 데이터를 계산한 다음 차트에 막대를 추가하고 다시 데이터를 각각 계산한다는 점이다. + 간격도 제거되었습니다.
 
Vasyl Nosal :
사실 문제는 아직 히스토리가 펌핑되지 않은 TF를 변경할 때 선을 그리는 지표가 데이터를 계산한 다음 차트에 막대를 추가하고 다시 데이터를 각각 계산한다는 점이다. + 간격도 제거되었습니다.

이는 표시기의 논리에 오류가 있음을 의미합니다. 히스토리를 로드할 때 표시기가 작동하는 이상적인 방법은 히스토리에서 변경되지 않은 마지막 막대의 순간의 상태를 계산하고 히스토리의 업데이트된 섹션에 대한 데이터를 다시 계산하는 것입니다.

실제로 이 옵션이 항상 가능한 것은 아닙니다. 표시기 환경을 지정된 막대로 되돌린다는 것은 기록의 시작 부분부터 계산을 수행하는 것을 의미하기 때문입니다. 따라서 다소 복잡한 지표 알고리즘의 경우 하나의 막대만 로드될 때 이력의 완전한 재계산이 수행됩니다(새 막대의 여는 것과 혼동하지 마십시오).

 
Vasyl Nosal :
사실 문제는 아직 히스토리가 펌핑되지 않은 TF를 변경할 때 선을 그리는 지표가 데이터를 계산한 다음 차트에 막대를 추가하고 다시 데이터를 각각 계산한다는 점이다. + 간격도 제거되었습니다.

OnCalculate()의 표시기에서 다음을 확인해야 합니다.

 if (prev_calculated== 0 )   // значит история изменилась или это первый проход
 
Karputov Vladimir :

OnCalculate()의 표시기에서 다음을 확인해야 합니다.

고맙습니다.

나는 경고가 나에게 역사가 조각으로로드되고 있다는 사실을 알려주는 것을 당혹스럽게 생각했습니다.

네. 그리고 있습니다.

 
Ihor Herasko :

이는 표시기의 논리에 오류가 있음을 의미합니다. 히스토리를 로드할 때 표시기가 작동하는 이상적인 방법은 히스토리에서 변경되지 않은 마지막 막대의 순간의 상태를 계산하고 히스토리의 업데이트된 섹션에 대한 데이터를 다시 계산하는 것입니다.

실제로 이 옵션이 항상 가능한 것은 아닙니다. 표시기의 환경을 지정된 막대로 되돌린다는 것은 히스토리 시작 부분부터 계산을 수행한다는 의미이기 때문입니다. 따라서 다소 복잡한 지표 알고리즘의 경우 하나의 막대만 로드될 때 이력의 완전한 재계산이 수행됩니다(새 막대의 여는 것과 혼동하지 마십시오).

즉, 유일한 작동 솔루션입니까?

for(int i=rates_total-prev_calculated;i>=0;i--)

 
Vasyl Nosal :

그것이 유일한 작동 솔루션입니까?

for(int i=rates_total-prev_calculated;i>=0;i--)

현재 막대뿐만 아니라 다시 계산해야 하는 경우(예: 4)?

 for ( int i=rates_total-prev_calculated+ 4 ;i>= 0 ;i--) 

{ 

if (i> Bars ) i= Bars ; 
 

네, 일하고 있습니다.

막대가 조각으로 로드되면 조각으로 다시 계산됩니다.

정확한 조각은 왼쪽으로 더 멀리 마지막에 로드된 조각일 뿐이라는 것이 밝혀졌습니다.

 
Vasyl Nosal :

네, 일하고 있습니다.

막대가 조각으로 로드되면 조각으로 다시 계산됩니다.

정확한 조각은 왼쪽으로 더 멀리 마지막에 로드된 조각일 뿐이라는 것이 밝혀졌습니다.

지표를 작성하는 방법을 배울 시간입니다
 
Victor Nikolaev :
지표를 작성하는 방법을 배울 시간입니다

가르치다.

그리고 개발자가 지표의 첫 번째 계산을 조정해야 한다고 말합니다.

 
Victor Nikolaev :
지표를 작성하는 방법을 배울 시간입니다

트릭을 원하십니까? 어떤 Alert가 반환되었는지 맞춰보세요?

 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 &tick_volume[], const long &volume[], const int &spread[])
  {
   if (prev_calculated!= 0 ) Alert (prev_calculated, " M:" , Period ());
return (rates_total);
  }

 
Vasyl Nosal :

트릭을 원하십니까? 경보가 무엇을 반환했는지 맞춰보세요?

나는 지표에서 경고를 사용하지 않습니다. 기록이 로드된 경우 전체 재계산을 제공합니다. 이것을 제어하는 것은 쉽습니다.