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

 
Slawa :

하나의 심볼 내에서 기간 변경이 있는 경우 초기화-비초기화 순서는 기본적으로 예측 가능합니다. 최신 빌드 1580 다운로드 - 거기에서 수정했습니다. 이제 표시기가 마지막으로 제거되었으므로 조기 초기화가 없어야 합니다.

이해하지 못했습니다. 설명 해주십시오. 초기화 후에 Deinit가 보장됩니까?
 
Andrey Khatimlianskii :

지표가 다릅니다. 브레이크도. 그리고 전부는 아닙니다 - 그들 자신과 소스 코드에 있습니다.

몇 초 동안 미소를 지었다. 인터페이스에서 수십 밀리 초가 느껴지면 즉시 불편 함이 나타납니다.


과용하지 마십시오. 인터페이스에 관한 것이 아니라 과도 상태에 관한 것입니다 - 스위칭 TF. 빈 차트에서 시간 프레임을 전환하는 데 시간이 아주 적게 걸리나요? 아니요. 따라서 지표는 쓸모가 없습니다.



그리고 가장 중요한 것은 내 질문에 대한 답이 없다는 것입니다.
어떤 상황에서 그래프로 직접 작업하는 것을 제외하고. 개체(이름에 TF 이름 없음), DeInit - Init 시퀀스가 중요합니까?


거의 모든 상황에서. 물론 Mashek 및 유사한 기본 요소와 같은 장난감에 대해 이야기하고 있지 않는 한:

  1. 파일에 씁니다. 인디케이터가 꺼지면 누적된 정보를 파일에 추가해야 합니다. 파일을 항상 열어둘 수는 없기 때문입니다. 파일에 기록된 모든 정보가 실패하고 손실될 위험이 있습니다.
  2. 그래픽 개체로 작업 할 때 . 일반적으로 아름다움은 하나의 지표가 여전히 존재하고 자체적으로 정리되지 않은 것으로 밝혀졌으며 두 번째 지표는 이러한 객체 위에 그립니다. 그래서 우리는 사용자에게 "TF를 전환할 때 단기 간섭을 관찰하게 될 것"이라고 설명할 것입니다. )))
  3. DLL 작업 Deinit를 사용하면 DLL은 생성한 모든 스레드를 중단해야 합니다. 그 다음 표시기의 다음 복사본은 자체적으로 재생성합니다. 이제 표시기의 새 복사본이 이러한 모든 스레드를 생성하려고 시도하고 여전히 실행 중이기 때문에 거부됩니다. 새 표시기는 오류 메시지를 표시하고 작동하지 않습니다. TF를 전환했기 때문입니다. 예, 문제가 해결되었습니다.

동의한다. 두 번째 문제를 제외한 문제는 알고 있으면 해결할 수 있습니다. 즉, 이제 모든 논리를 OnCalculate에 푸시해야 하며 Init 및 DeInit를 사용하지 말고 직접 작성해야 합니다. 그렇다면 왜 그것들이 필요합니까?

어쨌든 지금 우리는 크로스 플랫폼에 대해 이야기하고 있지 않습니다. 결국 MT4와 MT5는 Init와 DeInit에 대한 접근 방식이 다릅니다.

 
nmaratr :


재정과 관련이 없었다면 이런 논의는 없었을 것입니다.

그리고 거래 고문은 하나 또는 다른 지표에 의존하기 때문에 단순한 기간 전환으로 인해 올바르게 작동을 멈춥니다. 그게 가장 짜증난다.

그는 어떻게 재정을 신뢰할 수 있습니까?

이 문제에 대해 MT 개발자와 의견이 다를 수 있습니다.

이 문제를 해결하기 위한 많은 옵션이 있습니다. 그리고 거의 모든 사람들이 이 스레드에서 목소리를 냈습니다.

1. Expert Advisor가 지표에 따라 작성되는 경우 Expert Advisor는 차트 기간의 변경에 영향을 받지 않는 방식으로 작성되어야 합니다. 따라서 지표를 다시 초기화하지 않습니다.

2. 초기화 중 그래픽 개체를 삭제하거나 차트 디자인을 변경해야 하는 경우 초기화 해제 사유 를 확인합니다.

3. 표시기가 일부 매개변수를 저장해야 하는 경우 여기에 언급된 대로 시작할 때가 아니라 이 데이터가 준비되거나 변경될 때 이 데이터를 저장하십시오.

4. 두 개의 똥 더미 중에서 항상 냄새가 덜 나는 것을 선택하십시오. 따라서 모든 지표가 의존하는 속도와 여러 지표에 일부 데이터를 저장하는 복잡성 사이에서 선택하면서 저는 속도를 선택합니다.

 
Stanislav Korotky :
이해하지 못했습니다. 설명 해주십시오. 초기화 후에 Deinit가 보장됩니까?

시간 프레임 전환이 중단되면 먼저 낮은(새) 시간 프레임에서 OnInit가 실행되고 더 높은(이전) 시간 프레임에서 OnDeinit가 실행됩니다.

스위치가 올라가면 그 반대입니다. 먼저 낮은(이전) 시간 프레임에서 OnDeinit를 실행한 다음 높은(새) 시간 프레임에서 OnInit를 실행합니다.

여기서 캐시는 더 낮은 시간 프레임에서 더 오래된 시간 프레임으로 처리된다는 점을 염두에 두어야 합니다.

 
Slawa :

최신 빌드 1580 다운로드 - 거기에서 수정했습니다. 이제 표시기가 마지막으로 제거되었으므로 조기 초기화가 없어야 합니다.


:(( Mlyn, "기쁘다". "반대"에 대해서만 날카롭게 되었기 때문에 일부 프로그램에서 코드를 다시 작성해야 할 수도 있습니다. 첫 번째 Deunit, 그 다음 Unit.
이상하게도 솔직히 논리입니다. 저것들. 표시기의 이전 사본과 새 사본은 단위가 표시기의 새 사본에서 처음 실행되고 그 후에는 이전 사본에서 DeUnit이 실행될 때까지 일정 시간 동안 확실히 함께 유지됩니다. 동시에 Deunit을 통해 새 복사본에 정보를 전달할 방법이 없습니다. 그들은 분명히 그것을 과장했습니다. 결국 Units는 일반적으로 Deunits보다 훨씬 더 복잡합니다. 왜 그렇게 이상한 실행 순서를! 그러면 이 주제는 계속해서 부활할 것입니다. 이제 프로그래머가 TF를 변경할 때 다시 초기화되지 않은 일부 변수를 표시기에서 생성할 기회가 여전히 있었다면 신은 이 OnInit 및 OnDeinit 시퀀스를 사용했을 것입니다. 나는 이미 그것에 대해 두 번 썼습니다( 12 ). 나는 포인터와 참조가 보안 목적을 위해 프로그래머에게 감당할 수 없는 사치라는 개발자의 논리에 동의하지만 표시기의 모든 복사본에 대해 특별한 유형의 공유 변수에 대한 메커니즘을 만듭니다. 지표는 하나만 있으며 지표의 속성도 "어딘가"에 저장됩니다.
 
Slawa :

시간 프레임 전환이 중단되면 먼저 낮은(새) 시간 프레임에서 OnInit가 실행되고 더 높은(이전) 시간 프레임에서 OnDeinit가 실행됩니다.

스위치가 올라가면 그 반대입니다. 먼저 낮은(이전) 시간 프레임에서 OnDeinit를 실행한 다음 높은(새) 시간 프레임에서 OnInit를 실행합니다.

여기서 캐시는 가장 어린 것부터 가장 오래된 것까지 처리된다는 점을 염두에 두어야 합니다.

더욱 혼란스럽습니다.

결국 작성자가 표시기를 사용하지 않으면 init 및 deinit 실행을 기다리지 않고 원하는 대로 전환할 수 있습니까? 그리고 무슨 일이??? 그리고 deinit에서 하나의 스위칭 옵션으로 몇 가지 조치를 취해야 하는 경우, 그것이 하나의 스위칭 방향에 대해 작성되는지 또는 양방향에 대해 작성되는지 여부는 누구에게나 차이가 없습니다. 그러나 "무거운"표시기의 경우 브레이크를 추가했습니다.

 
Alexey Viktorov :

더욱 혼란스럽습니다.

결국 작성자가 표시기를 사용하지 않으면 init 및 deinit 실행을 기다리지 않고 원하는 대로 전환할 수 있습니까? 그리고 무슨 일이??? 그리고 deinit에서 하나의 스위칭 옵션으로 몇 가지 조치를 취해야 하는 경우, 그것이 하나의 스위칭 방향에 대해 작성되는지 또는 양방향에 대해 작성되는지 여부는 누구에게나 차이가 없습니다. 그러나 "무거운"표시기의 경우 브레이크를 추가했습니다.

브레이크는 어디에 추가됩니까? 무엇에 비해 무엇이 추가되었습니까?

모든 사람이 재현할 수 있도록 진술을 코드로 백업하십시오.

다시. 차트의 symbol -period 를 변경할 때 표시기의 다른 복사본이 생성되기 때문에 새 symbol-period에서 OnInit 실행하고 이전 symbol-period에서 OnDeinit 실행 순서는 정의되지 않습니다.

 
Slawa :

브레이크는 어디에 추가됩니까? 무엇에 비해 무엇이 추가되었습니까?

모든 사람이 재현할 수 있도록 진술을 코드로 백업하십시오.

다시. 차트의 symbol -period 를 변경할 때 표시기의 다른 복사본이 생성되기 때문에 새 symbol-period에서 OnInit 실행하고 이전 symbol-period에서 OnDeinit 실행 순서는 정의되지 않습니다.

이 메시지에서

슬라바 :

시간 프레임 전환이 중단되면 먼저 낮은(새) 시간 프레임에서 OnInit가 실행되고 더 높은(이전) 시간 프레임에서 OnDeinit가 실행됩니다.

스위치가 올라가면 그 반대입니다. 먼저 낮은(이전) 시간 프레임에서 OnDeinit를 실행한 다음 높은(새) 시간 프레임에서 OnInit를 실행합니다.

여기서 캐시는 더 낮은 시간 프레임에서 더 오래된 시간 프레임으로 처리된다는 점을 염두에 두어야 합니다.

새 빌드를 준비할 때 어떻게 했는지 또는 어떻게 했는지 말씀하셨나요?

이대로라면 내가 오해를 하고 말을 되돌려 놓았다.

 
Alexey Viktorov :

이 메시지에서

새 빌드를 준비할 때 어땠는지, 어떻게 했는지 말씀해 주셨나요?

이대로라면 내가 오해를 하고 말을 되돌려 놓았다.

이것은 빌드 1580에서 수행됩니다.

이전에는 시간 프레임을 변경할 때 초기화 해제가 거의 항상 더 빨랐습니다. 그러나 기간 전환이 중단된 경우에만 초기화 해제가 3이 아닌 코드 1로 수행되었습니다.

 
Slawa :

이것은 빌드 1580에서 수행됩니다.

이전에는 시간 프레임을 변경할 때 초기화 해제가 거의 항상 더 빨랐습니다. 그러나 기간 전환이 중단된 경우에만 초기화 해제가 3이 아닌 코드 1로 수행되었습니다.


그러면 표시기의 Inite에서 이러한 초기화 해제 코드를 처리하는 방법은 무엇입니까? 이 코드는 무엇을 위한 것입니까? 결국 표시기에서 기다릴 가능성은 없으며 절전 모드 가 작동하지 않습니다.