사실 문제는 아직 히스토리가 펌핑되지 않은 TF를 변경할 때 선을 그리는 지표가 데이터를 계산한 다음 차트에 막대를 추가하고 다시 데이터를 각각 계산한다는 점이다. + 간격도 제거되었습니다.
이는 표시기의 논리에 오류가 있음을 의미합니다. 히스토리를 로드할 때 표시기가 작동하는 이상적인 방법은 히스토리에서 변경되지 않은 마지막 막대의 순간의 상태를 계산하고 히스토리의 업데이트된 섹션에 대한 데이터를 다시 계산하는 것입니다.
실제로 이 옵션이 항상 가능한 것은 아닙니다. 표시기 환경을 지정된 막대로 되돌린다는 것은 기록의 시작 부분부터 계산을 수행하는 것을 의미하기 때문입니다. 따라서 다소 복잡한 지표 알고리즘의 경우 하나의 막대만 로드될 때 이력의 완전한 재계산이 수행됩니다(새 막대의 여는 것과 혼동하지 마십시오).
OnCalculate()의 표시기에서 다음을 확인해야 합니다.
고맙습니다.
나는 경고가 나에게 역사가 조각으로로드되고 있다는 사실을 알려주는 것을 당혹스럽게 생각했습니다.
네. 그리고 있습니다.
이는 표시기의 논리에 오류가 있음을 의미합니다. 히스토리를 로드할 때 표시기가 작동하는 이상적인 방법은 히스토리에서 변경되지 않은 마지막 막대의 순간의 상태를 계산하고 히스토리의 업데이트된 섹션에 대한 데이터를 다시 계산하는 것입니다.
실제로 이 옵션이 항상 가능한 것은 아닙니다. 표시기의 환경을 지정된 막대로 되돌린다는 것은 히스토리 시작 부분부터 계산을 수행한다는 의미이기 때문입니다. 따라서 다소 복잡한 지표 알고리즘의 경우 하나의 막대만 로드될 때 이력의 완전한 재계산이 수행됩니다(새 막대의 여는 것과 혼동하지 마십시오).
즉, 유일한 작동 솔루션입니까?
for(int i=rates_total-prev_calculated;i>=0;i--)
그것이 유일한 작동 솔루션입니까?
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 ;
네, 일하고 있습니다.
막대가 조각으로 로드되면 조각으로 다시 계산됩니다.
정확한 조각은 왼쪽으로 더 멀리 마지막에 로드된 조각일 뿐이라는 것이 밝혀졌습니다.
지표를 작성하는 방법을 배울 시간입니다
트릭을 원하십니까? 어떤 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); }
트릭을 원하십니까? 경보가 무엇을 반환했는지 맞춰보세요?
나는 지표에서 경고를 사용하지 않습니다. 기록이 로드된 경우 전체 재계산을 제공합니다. 이것을 제어하는 것은 쉽습니다.