표시기의 OnDeinit - 페이지 5

 
mql5 :
다시 설명하겠습니다.
  1. 마지막 실행 후 X 시간에 터미널이 실행됨
  2. 누락된 기록 다운로드가 시작되었습니다(터미널은 X분 동안 유휴 상태였습니다).
  3. 표시기의 OnCalculate는 사용 가능한 기록 prevtime= 마지막으로 알려진 기록 시간에 대해 호출되며 표시기 버퍼 크기는 N 막대입니다.
  4. 기록이 다운로드되는 동안 서버에서 틱이 옵니다.
  5. 표시기의 OnCalculate가 호출됩니다. 여기서 Time[0]은 틱 시간이고 표시기는 이를 이전 시간으로 기억하며 표시기 버퍼의 크기는 N+1 막대입니다(기록에 N과 N+1 막대 사이에 구멍이 있음)
  6. 히스토리를 재개하면 인디케이터의 OnCalculate가 다시 호출되지만 이번에는 히스토리에 구멍이 없지만 prevtime은 Time[0]과 같은 날짜를 갖습니다. 표시기의 버퍼), 표시기 버퍼의 크기는 N +X/막대 시간 프레임이고 IndBuffer[0]은 5단계에서와 동일하지 않습니다.



prevtime과 어떤 관련이 있습니까?

왜 안되는지 여쭤봅니다.

 /////////////////////////////////////
void OnDeinit ( const int reason)
{
 ArrayInitialize (body_up, EMPTY_VALUE );
ArrayInitialize (body_down, EMPTY_VALUE );
ArrayInitialize (shadow_up, EMPTY_VALUE );
ArrayInitialize (shadow_down, EMPTY_VALUE );
   ArrayInitialize (yell_body_up, EMPTY_VALUE );
ArrayInitialize (yell_body_down, EMPTY_VALUE );
ArrayInitialize (yell_shadow_up, EMPTY_VALUE );
ArrayInitialize (yell_shadow_down, EMPTY_VALUE );


}
 
eevviill :

prevtime과 어떤 관련이 있습니까?

왜 안되는지 여쭤봅니다.

작동하지 않는 것을 어떻게 압니까? 어떻게 확인합니까?

그리고 지표를 언로드하기 전에 지표 버퍼를 초기화해야 하는 이유는 무엇입니까? 이미 언로드 중입니다.

모든 표시기 값이 완전히 다시 계산되면 표시기 버퍼를 초기화해야 합니다 .

 int OnCalculate (..)
{
   ...
   if (<необходимо пересчитать все значения индикатора, например, если limit == Bars - 1 >)
   {
       ArrayInitialize (...);
   }
   ...
}
 
eevviill :

여기. 이를 위해 버퍼를 0으로 만듭니다. 그들은 이미 인터넷에서 그렇게 할 수 없다고 말했습니다.

초기화하고 싶습니다. 그러나 그것은 거기에서도 작동하지 않습니다. 왜요?

그리고 init(), deinit()는 무엇과 관련이 있습니까? 수술은 완전히 다른 장소에서 필요합니다. 반복합니다. 계산 후 히스토리가 로드 되었습니다.

작업 버전을 만들었습니다.

파일:
 
Scriptong :

작동하지 않는 것을 어떻게 압니까? 어떻게 확인합니까?


https://forum.mql4.com/ru/65066/page2#1015138
 
Vinin :

그리고 init(), deinit()는 무엇과 관련이 있습니까? 수술은 완전히 다른 장소에서 필요합니다. 반복합니다. 계산 후 기록이 로드되었습니다.

작업 버전을 만들었습니다.

당신의 추천에 처음부터 옳은 일을 했습니다.

배열의 제로화(zeroing of arrays)가 deinit에서 작동하지 않는 이유에 관심이 있습니까?

 
eevviill :
https://forum.mql4.com/ru/65066/page2#1015138

OnCalculate 에서 작동하는 코드에 대한 링크를 제공했습니다. DeInit에서 초기화가 작동하지 않는다는 것을 어떻게 아느냐고 물었습니다. 만일의 경우를 대비하여 OnDeinit() 이후에 표시기 코드의 아무 것도 작동하지 않는다는 점을 분명히 하겠습니다(OnInit()도 OnCalculate()도 아님). 따라서 OnDeinit() 자체에서만 배열을 0으로 만드는 사실을 확인할 수 있습니다.

 
Scriptong :

OnCalculate에서 작동하는 코드에 대한 링크를 제공했습니다. DeInit에서 초기화가 작동하지 않는다는 것을 어떻게 아느냐고 물었습니다. 만일의 경우를 대비하여 OnDeinit() 이후에 표시기 코드의 아무 것도 작동하지 않는다는 점을 분명히 하겠습니다(OnInit()도 OnCalculate()도 아님). 따라서 OnDeinit() 자체에서만 배열을 0으로 만드는 사실을 확인할 수 있습니다.

에 대한 링크를 제공했습니다

작동 차트 를 열었습니다 - M1 표시기를 부착했습니다 - 터미널을 닫았습니다 - 몇 분 안에 열었습니다. 스크린샷의 결과입니다.

이렇게 확인합니다.

 
eevviill :

당신의 추천에 처음부터 옳은 일을 했습니다.

배열의 제로화(zeroing of arrays)가 deinit에서 작동하지 않는 이유에 관심이 있습니까?

아니면 터미널이 닫혀 있을 때 deinit가 작동하지 않습니까?
 
eevviill :
아니면 터미널을 닫을 때 deinit가 작동하지 않습니까?
작동하지만 표시기 버퍼를 지우는 것은 의미가 없습니다. 저장되지 않습니다.
 
mql5 :
작동하지만 표시기 버퍼를 지우는 것은 의미가 없습니다. 저장되지 않습니다.

왜요?

0으로 채워진 버퍼의 값은 저장되지만 0은 저장되지 않는 이유는 무엇입니까?

사유: