Init() 및 DeInit() 실행 순서 - 페이지 2

 
Alexey Viktorov :

이 문제는 두 손가락으로 해결됩니다 ... 당신은 무엇을 알고 ...

OnDeinit에서는 객체를 삭제하기 전에 초기화 해제 사유 의 조건을 설정해야 합니다... 기간이 변경되지 않으면 객체를 삭제합니다. 그리고 모든 것...


예, TF를 변경할 때 일부 개체 또는 리소스를 삭제할 수 없습니다. 리소스 개체를 통해 일부 작은 배열을 저장할 수도 있고 TF가 변경된 리소스 정보를 쓸 수 있지만 문제는 Deunit을 시작할 수 있다는 것입니다. 단위가 새 시간 프레임에 완료된 후 실행하는 경우 시간 프레임 변경이 있었고 이전 데이터를 읽어야 하므로 탬버린으로 추적 기능을 만들고 더 이상 기다리지 않아야 함을 단위에 어떻게 알려야 한다고 생각하십니까? 단위이지만 OnTimer에서. 삐뚤삐뚤하거나 그런거 아님?
 
Slawa :

어떤 논리가 망쳐 놓았습니까?

기간을 변경할 때 표시기의 새 복사본이 생성되며 이전 복사본에 대해서는 전혀 알지 못합니다. 얼마 동안(매우 짧은 시간) 표시기의 두 복사본이 병렬로 존재합니다. 그런 다음 이전 복사본이 언로드됩니다.

문서 읽기 https://www.mql5.com/ru/docs/runtime/running


링크의 설명을 읽어보았지만 알려주신 정보와 같은 정보는 찾지 못했습니다. 그리고 이것이 사실이라면 지표 개발자에게 큰 문제입니다. 시간 프레임을 변경할 때 표시기를 다시 로드하는 이러한 논리가 허용되는 것은 매우 이상하고 매우 나쁩니다. 메모리에 동일한 표시기의 복사본이 두 개 존재하는 이유는 무엇입니까? 누가 편해? 그것은 무엇을 제공합니까? 결국 지표의 한 복사본 실행을 먼저 완료하고 언로드한 다음 다음 복사본을 로드하는 것이 더 논리적일 것입니다.
 
Nikolai Semko :
그리고 모든 것이 무엇입니까!?
이 이유 코드(REASON_CHARTCHANGE)를 최대한 실험하고 사용했습니다. 그리고 모든 변수가 다시 원래 상태로 재설정되고 새 TF의 OnInit 후에 OnDeinit를 실행할 수 있다면 요점은 무엇입니까?
초기화 해제 시 개체 삭제에 대해 읽었으며 이 문제에 대해서만 답변했습니다. 과거 계산을 저장하는 것이 더 어렵습니다. 그리고 분명히 이 문제는 결코 해결되지 않을 것입니다. Slava는 이 질문, 새로운 지표, 새로운 계산에 답했습니다. 그리고 이것은 공정합니다.
 
Alexey Viktorov :
Slava는 이 질문, 새로운 지표, 새로운 계산에 답했습니다. 그리고 이것은 공정합니다.
문제의 사실은 지표가 정적이며 기간만 새롭다는 것입니다. 그리고 주제의 문제는 단위와 deunit의 비동기화입니다. 역(비논리적) 실행 순서가 있으며 때로는 논리적이기도 합니다. 프로그래머에게 부동 오류와 논리보다 더 나쁜 것은 없습니다.
 
Alexey Viktorov :
그리고 분명히 이 문제는 결코 해결되지 않을 것입니다.

그리고 저는 개발 팀을 믿습니다. 그들은 훌륭한 사람들이며 엄청난 일을 해냈고 앞으로도 더 많이 할 것입니다. 아직 손을 대지 않았을 뿐입니다. 사실, 항상 탬버린으로 피드백을 받아야 합니다. :))
나는 이것이 이루어져야 한다고 그들에게 확신시키는 것이 나의 임무라고 생각한다. 나는 그들이 이것을하지 않는 것이 더 낫다고 확신시킬 것이라고 배제하지는 않지만 아마도 나는 무언가를 따라 잡고 있지 않을 것입니다.
 
Nikolai Semko :

그리고 저는 개발 팀을 믿습니다. 그들은 훌륭한 사람들이며 엄청난 일을 해냈고 앞으로도 더 많이 할 것입니다. 아직 손을 대지 않았을 뿐입니다. 사실, 항상 탬버린으로 피드백을 받아야 합니다. :))
나는 이것이 이루어져야 한다고 그들에게 확신시키는 것이 나의 임무라고 생각한다. 나는 그들이 이것을하지 않는 것이 더 낫다고 확신시킬 것이라고 배제하지는 않지만 아마도 나는 무언가를 따라 잡고 있지 않을 것입니다.


슬라바, 문서에서 문구의 의미 " 라이브러리   이벤트를 처리하지 마십시오"?

매우 흐림
 

 
nmaratr :

- Inita 를 사용하여 기본 차트의 색상을 투명하게 설정했습니다.

내 일정을 그립니다(내 매개변수에 따라)


내 지표를 제거한 후 메인 차트의 색상을 복원하고 싶기 때문에

- DeInit 에서 메인 차트의 색상을 복원합니다.


TF를 변경할 때 먼저 DeInit(색상 복원)을 의미한 다음 Init(다시 투명)을 의미합니다.


따라서 명령 실행은 TF를 변경할 때 주기적으로 순차적이지 않습니다.

내 지표에 기본 차트(복원된 색상)를 오버레이합니다.

다음은 "논리 손상"의 한 예입니다.


그래픽 개체에 이름 접두사의 구성 요소로 마침표 TF를 할당하려고 할 수 있습니다.

다음과 같이 적용하십시오.

 // --- Переменная для хранения текущего ТФ
ENUM_TIMEFRAMES currentTF;

//+---------------------------------------------------------------------------+
void OnInit ()
{
  currentTF = ( ENUM_TIMEFRAMES ) Period ();
}

//+---------------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
   // --- на момент выгрузки индикатора уже сменился ТФ
   if (currentTF != Period ()) 
  {
     // если нужно, удалим объекты имеющие префикс старого ТФ и выходим, не трогаем цвет основного графика
     return ;
  }

   // раз дошли сюда, ТФ не сменился, восстанавливаем цвет основного графика
   // удалим объекты имеющие префикс старого ТФ
}
 
nmaratr :

- Inita 를 사용하여 기본 차트의 색상을 투명하게 설정했습니다.

내 일정을 그립니다(내 매개변수에 따라)


내 지표를 제거한 후 메인 차트의 색상을 복원하고 싶기 때문에

- DeInit 에서 메인 차트의 색상을 복원합니다.


TF를 변경할 때 먼저 DeInit(색상 복원)을 의미한 다음 Init(다시 투명)을 의미합니다.


따라서 명령 실행은 TF를 변경할 때 주기적으로 순차적이지 않습니다.

내 지표에 기본 차트(복원된 색상)를 오버레이합니다.

다음은 "논리 손상"의 한 예입니다.

물론 모든 일이 논리적인 순서로 일어날 때가 더 즐겁지만, 우리가 가진 것으로 작업해야 하기 때문에 현재 값을 확인하면서 메인 차트의 색상 설정 을 OnCalculate로 옮길 수 있습니다.
 
Nikolai Semko :
그리고 모든 것이 무엇입니까!?
이 이유 코드(REASON_CHARTCHANGE)를 최대한 실험하고 사용했습니다. 그리고 모든 변수가 다시 원래 상태로 재설정되고 새 TF의 OnInit 후에 OnDeinit를 실행할 수 있다면 요점은 무엇입니까?


터미널을 1065 버전으로 업데이트해 보세요. 이전 버전에서는 타임프레임 변경 시 재초기화 오류가 발생했습니다. 도움이 될 수 있습니다 :)

https://www.mql5.com/ru/forum/187690

Новая версия платформы MetaTrader 4 build 1065
Новая версия платформы MetaTrader 4 build 1065
  • www.mql5.com
Новая версия платформы MetaTrader 4 build 106523 марта 2017 года будет опубликовано обновление платформы MetaTrader 4...
 
Aleksei Radchenko :


터미널을 1065 버전으로 업데이트해 보세요. 이전 버전에서는 타임프레임 변경 시 재초기화 오류가 발생했습니다. 도움이 될 수 있습니다 :)

https://www.mql5.com/ru/forum/187690

MT5에 대해 이야기하기