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

 
Andrey Dik :

...

여러 사람들이 이미 MT5의 지표 실행 패러다임의 틀 내에서 완료하는 데 문제가 있는 작업의 특정 예를 요청했습니다. 손가락에서 빨지 않고 명확하고 예가 있습니까?

실제로 한 표시기의 경우 init가 먼저 수행된 다음 deinit가 수행됩니다. 그러나 시간대가 전환되면 표시기의 두 번째 인스턴스가 생성되고 해당 init는 이전(차트에서 제거된) 인스턴스의 deinit보다 먼저 실행할 수 있습니다.

가장 확실한 예는 시간대를 전환할 때 사용자 매개변수를 저장하는 것입니다. 매개변수는 deinit에 저장하고 init에서 읽습니다. 새 인스턴스의 초기화가 이전 인스턴스의 초기화보다 먼저 작동했다면 매개변수가 저장되지 않습니다.

실제로 제거된 인스턴스의 초기화 해제는 기본적으로 새 인스턴스의 초기화 이전에 작동하지만 시간 프레임이 매우 빠르게 전환되거나 데이터가 로드되면 실패가 발생합니다.

 
Slawa :

이제 단일 이벤트 대기열이 없지만 각 기호 기간에 대한 대기열이 있다고 상상해 보십시오. 얼마나 많은 문자-마침표, 너무 많은 대기열.

이제 대기열이 처리되는 순서를 제안하십시오.

내 차례에 차트에 첨부해야합니다. 사용자가 기호, TF를 변경하거나 그냥 닫는지 여부에 관계없이 모든 표시기는 완전히 종료되어야 하며 전문가는 deins의 모든 명령을 처리해야 합니다(무엇을 하든 전역 변수 에 쓰기, 파일에 쓰기, 개체 삭제, DLL과 상호 작용) , 인터넷에서 무언가를 전송) 완료하고 메모리에서 언로드한 후 이전 항목에 대해 알지 못하지만 이전 항목에 의해 저장된 정보를 올바르게 읽을 수 있는 새 TF 또는 기호에서 새 인스턴스를 시작합니다.

아마도 조금 느려지겠지만 정확할 것입니다.

나는 프로그램이 빠르고 잘못 작동하는 것이 아니라 올바르게 작동하도록 하는 것입니다.

새 인스턴스의 초기화가 더 일찍 시작되면 deinit가 전혀 필요하지 않으며 프로그래머를 오도할 수 있다는 점에서 해롭다는 것이 밝혀졌습니다. 왜냐하면 그들은 무언가를 저장하고 계산하기를 희망하기 때문입니다. 그대로 두면 다음에는 이 함수의 결과를 알 수 없다는 도움말을 추가합니다. 예, 즉 아무도 이 f-ii에서 아무것도 하지 않도록. 더 나은 방법은 자연적인 이벤트 순서가 매우 어렵고 수백 시간의 작업이 필요한 경우 제거하는 것입니다.

 
Slawa :

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

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

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

아주 이상한 논리! 어떻게 될 것인가? 매개변수가 DeInit에서 디스크에 기록된 경우, 이는 Junior TF에서 시작되더라도 표시기의 다음 시작 시 OnInit에서 읽고 선택해야 합니다.

아마도 짧은 테스트를 작성하여 확인해야 할 것입니다. 사실, 더 젊은 TF로의 전환이 있으면 논리가 죽고, 전환이 더 높은 TF로 가는 것이라면 모든 것이 괜찮을 것입니다.

일반적으로 지표에는 정적 변수가 저장되지 않는 반면 Expert Advisors에서는 정적 변수 가 잘 저장되는 것이 유감입니다.
 
Ihor Herasko :

1. 데스크탑 애플리케이션을 무엇이라고 합니까? MT5는 데스크탑용 어플이 아닌듯...

2. 나는 이것을 꾸며낸 것이 아니다. 이것은 현재 스레드의 주제입니다. 요점은 MT5에서는 아직 DeInit가 완료되지 않은 인디케이터의 Init가 먼저 실행될 수 있음이 밝혀졌습니다. 있는 즉시. 스레드를 읽지 않았습니까?

3. 같은 파일을 1초에 여러 번 업데이트하고 감정을 공유해 보세요.

4. 그리고 이름 1에 추가된 것은 무엇입니까? 문제는 화면에 동시에 동일한 표시기의 그래픽 개체가 있지만 다른 복사본이 있다는 것입니다. 기술적으로 충돌이 없습니다. 충돌은 이전 사본이 삭제될 때까지 화면에서 도약을 보는 사용자가 관찰합니다.

5. 큰 비밀을 밝히겠습니다. 터미널 사본 하나에 DLL 사본 하나가 있다는 것입니다. 여러 사본을 사용할 수 없습니다.

1. 우리는 MT5에 대해 이야기하는 것이 아니라 운영 체제가 아니라 특별한 보호 환경에서 실행되는 표시기(스크립트 및 Expert Advisors 포함)에 대해 이야기하고 있습니다.

2. 당신은 자신과 모순됩니다. 재계산이 너무 빨리(초당 여러 번) 발생하면 지표의 새 복사본에서 새 재계산을 수행하는 데 문제가 없습니다. 이 경우 지정된 시간 후에 주기적으로 누적 데이터를 재설정하는 것이 좋습니다(이를 위해 온타이머 또는 사용자 지정 카운터를 사용할 수 있음). 그리고 계산이 길면 불가항력의 경우 손실을 피하기 위해 계산 후 데이터를 저장해야합니다. (어머니는 "전화하지 않기 위해"플러그를 소켓에서 뽑았습니다. ).

3. 이전 사본은 1초 이내에 그래프 개체와 함께 삭제됩니다. 깜박임이 관찰 될 정도로 주파수로 TF를 전환하는 바보는 무엇입니까? - 당신은 여전히 그런 바보를 찾아야하며 모든 바보에게 숨을 쉬지 않을 것입니다.

4. 그래서? dll이 사용 중일 수 있으며 이는 정상입니다. 여기에는 아무런 문제가 없습니다. 예를 들어 잠시 후 요청을 반복해야 합니다.

보시다시피 문제는 없으며 MT 터미널의 프로그램으로 올바르게 작업하면 데스크톱 응용 프로그램이 아니며 특별한 보안 환경에서 실행된다는 점을 기억하십시오.

 
Dmitry Fedoseev :

실제로 한 표시기의 경우 init가 먼저 수행된 다음 deinit가 수행됩니다. 그러나 시간대가 전환되면 표시기의 두 번째 인스턴스가 생성되고 해당 init는 이전(차트에서 제거된) 인스턴스의 deinit보다 먼저 실행할 수 있습니다.

가장 확실한 예는 시간 프레임을 전환할 때 사용자 매개변수를 저장하는 것입니다. 매개변수를 deinit에 저장하고 init에서 읽습니다. 새 인스턴스의 초기화가 이전 인스턴스의 초기화보다 먼저 작동했다면 매개변수가 저장되지 않습니다.

실제로 제거된 인스턴스의 초기화 해제는 기본적으로 새 인스턴스의 초기화 이전에 작동하지만 시간 프레임이 매우 빠르게 전환되거나 데이터가 로드되면 실패가 발생합니다.

여기 또... "시간 프레임을 매우 빠르게 전환"하는 이유는 무엇입니까?! "전원 버튼을 빠르게 눌러" 컴퓨터를 켜거나 끄는 사람이 있습니까?
 
Andrey Dik :
여기 또 있습니다... "시간 프레임을 매우 빠르게 전환"하는 이유는 무엇입니까?! "전원 버튼을 빠르게 눌러" 컴퓨터를 켜거나 끄는 사람이 있습니까?

그리고 뭐? 형법은 금지 또는 헌법?
 
Dmitry Fedoseev :

그리고 뭐? 형법은 금지 또는 헌법?

형법은 예를 들어 소켓에 손가락을 집어넣는 것과 같은 많은 것을 금지하지 않습니다.

개체가 깜박이기 시작하도록 너무 빨리 TF를 자주 전환해야 하는 필요성의 예를 제공하십시오. - 더 효과적인 방법으로 달성할 수 있으므로 최면 효과의 예를 제공하지 마십시오.

 
Andrey Dik :

형법은 예를 들어 소켓에 손가락을 집어넣는 것과 같은 많은 것을 금지하지 않습니다.

개체가 깜박이기 시작하도록 너무 빨리 TF를 자주 전환해야 하는 필요성의 예를 제공하십시오. - 더 효과적인 방법으로 달성할 수 있으므로 최면 효과의 예를 제공하지 마십시오.

플러그가 있는 소켓은 바보가 아니라 제정신인 디자이너가 설계 했기 때문입니다. 플러그가 아닌 전압 쪽에 소켓이 있습니다. 또한 콘센트의 구멍은 지름이 너무 커서 손가락을 넣을 수 없습니다. 그러나 집에서 할 수 있습니다. 플러그는 벽에서 튀어나오고 소켓은 전선에 매달려 있습니다. 결국, 당신은 모든 것을 이해하고 손으로 벽에서 튀어 나온 포크를 만지지 않을 것입니다.
 
Dmitry Fedoseev :
플러그가 있는 소켓은 바보가 아니라 제정신인 디자이너가 설계했기 때문입니다. 플러그가 아닌 전압 쪽에 소켓이 있습니다. 또한 콘센트의 구멍은 지름이 너무 커서 손가락을 넣을 수 없습니다. 그러나 집에서 할 수 있습니다. 플러그는 벽에서 튀어나오고 소켓은 전선에 매달려 있습니다. 결국, 당신은 모든 것을 이해하고 손으로 벽에서 튀어 나온 포크를 만지지 않을 것입니다.

확인. 소켓의 경우 실패한 예입니다.

그런 다음 발코니에서 뛰어내립니다. 영국은 발코니에서 점프를 금지? - 아니요? - 그럼 아드레날린을 올릴 목적으로 연습을 해보는 건 어떨까요?

모든 목표는 올바른 수단으로 달성해야 합니다. 그렇지 않으면 목표가 미친 것입니다.

 
Dmitry Fedoseev :

안드레이 딕 :

개체가 깜박이기 시작하도록 너무 빨리 TF를 자주 전환해야 하는 필요성의 예를 제공하십시오. - 더 효과적인 방법으로 달성할 수 있으므로 최면 효과의 예를 제공하지 마십시오.