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

 
Nikolai Semko :
물론 코드에 감사드립니다. Expert Advisors를 통해서만 모든 것이 정상입니다 . TF를 변경할 때 변수가 다시 초기화되지 않고 표시기에서는 발생하기 때문 입니다. 정말 조언에 도움 이 되고 싶으시다면, 조금 더 조급하게 다시 "달려주세요".

Nikolai, 나는 첫 번째 게시물을 작성할 때에도 주제에 대해 이야기했습니다. 동시에, 나는 TF를 변경하는 상황에서 고문의 행동에 대한 토론을 찾지 못했습니다. 예 - 주제는 주로 지표에 관한 것이지만 저자는 " 지표 또는 고문 이 작성되었습니다. "

그는 내가 점검한 예시를 줬고 그것은 고문의 틀 내에서 작동합니다. 글쎄, 당신은 나를 부주의하다고 비난하고, 그 주제를 다시 읽도록 나를 보낸 다음, 무엇이 합리적인지 또는 합리적이지 않은지에 대해 토론합니다. 또한 첫 페이지를 직접 읽으십시오.

그것은 전혀 명확하지 않습니다. 귀하의 게시물에 명확하게 작성되지 않은 것을 포함하여 고문 또는 지표에 관한 것입니다. 지표에 관한 것입니다.

게시물의 예:

니콜라이 셈코 :
그리고 모든 것이 무엇입니까!?
이 이유 코드(REASON_CHARTCHANGE)를 최대한 실험하고 사용했습니다. 그리고 모든 변수가 다시 원래 상태로 재설정되고 새 TF의 OnInit 후에 OnDeinit를 실행할 수 있다면 요점은 무엇입니까?

지금까지 말한 대로 지표에서 변수가 초기 상태로 설정되어 있는 것이 분명합니까?

그리고 전문가에서는 쉽게 구현됩니다. 귀하의 게시물을 읽는 사람은 Expert Advisor에서 동일한 말도 안되는 일이 일어나고 있다고 생각할 수 있습니다.

----

이 질문에 대한 답! " 시간 프레임을 변경할 때 변수는 다시 초기화되지 않는 반면 지표에서는 ."

안드레이 딕 :
예를 들어 전역 변수의 값을 어딘가에 저장할 수 있습니다.

또는 DISK TO FILE 및 INDICATOR RESTART 후 OnInit에서 읽고 복원합니다.

----------

특정 지표에 대한 기간 변경 문제에만 관심이 있다고 해서 저를 포함한 다른 사람들이 고문의 기간 변경 옵션에 관심이 없다는 의미는 아닙니다.

도움말 조언, 그것은 지표와 함께 있습니다. 아아, 할 수 없기 때문입니다. 실제로 구현하는 방법을 모르지만 제안된 솔루션을 관심 있게 지켜볼 것입니다.

적어도 나는 개발자들이 이 주제를 읽고 빌드 1580에서도 뭔가 수정했다는 것을 이해했습니다. 아마도 그들은 해결책을 제시할 것입니다.

 
Slawa :

내가 몇 번 쓴 것을 읽지 않았습니까?

지표에는 없습니다. 처음부터 5위 안에는 아무것도 없었다 . 표시기의 완전히 새로운 사본이 모든 후속 결과와 함께 로드되기 때문에


솔직하게 답변해주셔서 감사합니다.

항상 상위 5위 안에는 아무것도 없었습니다. 아마도 그것을 고칠 때가 되었습니까?

올바른 주문을 하는 것이 정말 그렇게 어려운가요? 시작 시간의 절약은 매 틱마다 끝없는 확인으로 이어집니다 .

나는 이미 MT5의 OOP 패러다임에 익숙하며 물론 새 갈퀴를 넣지 않는 한 갈퀴의 위치와 이 갈퀴를 우회하기 위해 목발을 부착하는 방법을 알고 있습니다. 몇 가지 매개변수를 변경하는 것보다 객체를 삭제하고 새 객체를 생성하는 것이 더 쉽다는 것이 밝혀졌습니다.

비유하자면 자동차에서는 오일을 교환하고 계속 주행하는 것보다 버리고 새 것으로 만드는 것이 좋습니다.

만화 생각나네


비디오 다운로드
 

말해주세요

나는 다음과 같은 프로그램을 작성 하기로 결정했다.

1. 초기화 시 8줄 표시

2. DeInit에서 8줄 더 표시

테스터에서 런칭 (2일 운전 및 수령)

어떤 이유로 로그에 일부 행을 선택적으로 출력하지 않습니다.

가속도 마찬가지인가요???


-------------------------------------------------- ----------------------------------------

전체 로그에 모든 정보가 있으므로 질문 이 닫힙니다.

-------------------------------------------------- ----------------------------------------

문서에 추가

1. 로그에는 프로그래머가 기대하는 모든 정보가 표시되지 않습니다.

-------- 전체 로그를 보는 것은 필수입니다!!!

파일:
Log2.txt  2 kb
ERROR_2.mq5  2 kb
 

중간 결과를 요약하고 위의 모든 내용을 요약하고 싶습니다. 따라서 MT5 빌드 1580(현재 빌드 1571)이 출시되기 전에 우리는 무엇을 가지고 있습니까?

지표에서는 Expert Advisors와 달리 " 이전 복사본에 대해 아무것도 모르는 지표의 새 복사본이 생성됨"으로 인해 기간을 변경할 때 모든 변수가 다시 초기화되고 OnDeinit의 실행 순서가 추가됩니다. 이전 시간 프레임과 새 시간 프레임의 OnInit는 TF를 "위" 또는 "아래로" 전환하는 것과 관계없이 예측할 수 없습니다(지금까지의 연습 은 Slava가 말한 것과 모순됨). 이와 관련하여 프로그래머는 많은 문제와 불확실성에 직면해 있습니다. 예를 들어:
- OnInit에서 어떤 것에 대한 표시기를 생성할 때 이 주제를 읽지 않은 프로그래머는 객체를 생성하고, 그 이름을 가진 객체의 존재에 대해 객체를 생성하기 전에 논리적으로 확인합니다. 또한 논리적이기도 하며 OnDeinit에서 이 개체의 제거를 규정합니다. TF를 변경할 때 새로운 TF의 OnInit를 먼저 실행하면 객체의 존재를 확인하고 이미 존재하는 것으로 판명되고 생성되지 않기 때문에 이미 생성되었습니다. 이후 기존 TF의 OnDeinit를 수행하여 객체를 삭제한다. 혼수상태에 빠진 프로그래머. 내 개체는 어디에 있습니다. 왜 삭제되었습니까? 그는 다음에 TF를 변경할 때 OnInit과 OnDeinit의 실행 순서가 다를 때 개체가 삭제되지 않을 때 더 큰 혼미에 빠질 것입니다. 삭제되거나 삭제되지 않습니다. .... 오랜 연구 끝에 서비스 데스크에 대한 호소가 시작되고 포럼에서 이전에 대한 새로운 주제가 시작됩니다.
이것은 가장 단순한 상황입니다. 다른 사람들도 있을 것입니다. 이 기능은 설명서에 설명되어 있지 않으며 포럼에서만 읽을 수 있습니다.
이와 같은 것을 생성하고 TF를 변경할 때 표시기의 이전 복사본에서 새 매개변수로 일부 매개변수를 전달하려는 경우 초기화 및 초기화 해제 작업의 순서를 예측할 수 없기 때문에 OnDeinit를 사용할 수 없습니다. 제 생각에는 이 경우에 가장 좋은 해결책은 다음 도구를 사용하여 리소스를 통해 데이터(매개변수)를 전송하는
입니다 . 한 창에서 여러 개의 동일한 표시기를 사용하고 다른 복사본을 위해 전송해야 하는 데이터가 변경될 때마다 충돌 없는 리소스를 다시 초기화되지 않은 리소스에 저장해야 합니다. OnDeinit 사용의 무의미함 때문에 프로그램의 가능한 시간대 변경 시간은 알 수 없습니다. 나는 이것을 오래전에(예를 들어 이 제품 에서) 구현했기 때문에 내가 무슨 말을 하는지 압니다. 파일 및 전역 터미널 변수를 통한 데이터 전송 구현은 덜 성공적인 솔루션(IMHO)입니다.

새 빌드 1580이 출시되면 모든 것이 Slava가 말한 대로 되므로 작업이 단순화되지 않습니다. 표시기의 이전 사본의 초기화 해제는 새 사본의 초기화 후에 발생합니다. 그러나 불확실성은 없을 것입니다.

그럼에도 불구하고 개발자가 뭔가를 수정하려고 하기 때문에 이 문제에 주의를 기울였으면 하는 바램이 있습니다.
우리는 새로운 빌드를 기다리고 있습니다.

 

현재 TF를 참조하여 모든 그래프 개체를 호출합니다. 초기화 시 생성하고 초기화 해제 시 삭제합니다. 표시기가 작동하는 동안 필요에 따라 수정합니다.

여기에 문제가 있습니까? 아무 문제 없습니다. 인디케이터가 발사되는 순간부터 내리는 순간까지 모든 것이 소중합니다.

스위칭 TF. 어느 쪽이든, 위든 아래든 상관없습니다. 표시기의 복사가 시작되었습니다. 이는 지표가 이 TF에서 처음으로 실행되었다는 사실과 동일합니다.

여기에 문제가 있습니까? 아무 문제 없습니다. 이전 복사본은 개체 삭제를 처리하고 새 복사본은 현재 TF에 따라 개체를 호출하여 새 복사본을 만듭니다.

내가 무엇을 잘못하고 있지? 문제가 보이지 않는 이유는 무엇입니까?

 
Andrey Dik :

현재 TF를 참조하여 모든 그래프 개체를 호출합니다. 초기화 시 생성하고 초기화 해제 시 삭제합니다. 표시기가 작동하는 동안 필요에 따라 수정합니다.

여기에 문제가 있습니까? 아무 문제 없습니다. 인디케이터가 발사되는 순간부터 내리는 순간까지 모든 것이 소중합니다.

스위칭 TF. 어느 쪽이든, 위로 또는 아래로 중요하지 않습니다. 표시기의 복사가 시작되었습니다. 이는 지표가 이 TF에서 처음으로 실행되었다는 사실과 동일합니다.

여기에 문제가 있습니까? 아무 문제 없습니다. 이전 복사본은 개체 삭제를 처리하고 새 복사본은 현재 TF에 따라 개체를 호출하여 새 복사본을 만듭니다.

내가 무엇을 잘못하고 있지? 왜 문제가 보이지 않습니까?

이 문서화되지 않은 기능에 대해 알고 그래프를 사용하여 가장 간단한 경우만 처리하면 문제가 없습니다. 사물. 나는 이 기능을 모르는 사람들에 대해 이야기하고 있습니다. 포럼의 이 주제는 아주 적은 수의 프로그래머가 읽을 것이라고 생각합니다. 모든 뉘앙스를 찾는 데 시간을 들인 것이 안타까울 뿐입니다. 나는 그것을 이해하기 전에 그런 상황에 처한 적이 있습니다.
 
Nikolai Semko :
이 문서화되지 않은 기능에 대해 알고 그래프를 사용하여 가장 간단한 경우만 처리하면 문제가 없습니다. 사물. 나는 이 기능을 모르는 사람들에 대해 이야기하고 있습니다. 포럼의 이 주제는 아주 적은 수의 프로그래머가 읽을 것이라고 생각하며 모든 뉘앙스를 찾는 데 시간을 들인 것이 유감스럽습니다. 나는 그것을 이해하기 전에 그런 상황에 처한 적이 있습니다.

나는 이 스레드에서 설명된 뉘앙스와 같은 뉘앙스에 대해 들어 본 적이 없지만 여기서 논의되는 문제를 만난 적이 없습니다.

표시기의 다른 복사본으로 무언가를 전송하려는 경우 초기화에서 이 작업을 수행할 필요가 없습니다. 예를 들어 Ch에서 표시기의 전체 작업 동안 전송된 데이터를 최신 상태로 유지하십시오. 터미널 변수, 그러면 표시기 언로드 이유에 관계없이(TF 변경, 어머니가 "모두가 자고 있을 때 울리지 않도록" 소켓에서 플러그를 뽑았음, 지진, 지구의 자극 변경 등 .) 표시기의 다음 실행(TF 변경 시 사본 포함)은 이 마법의 데이터 소스에서 필요한 모든 정보를 수신합니다(글로벌 규모의 불운한 경우 클라우드 드라이브에 데이터를 저장할 수 있음).

얘들아, 문제 없어, 문제 없어

 
Andrey Dik :

현재 TF를 참조하여 모든 그래프 개체를 호출합니다. 초기화 시 생성하고 초기화 해제 시 삭제합니다. 표시기가 작동하는 동안 필요에 따라 수정합니다.

여기에 문제가 있습니까? 아무 문제 없습니다. 인디케이터가 발사되는 순간부터 내리는 순간까지 모든 것이 소중합니다.

스위칭 TF. 어느 쪽이든, 위든 아래든 상관없습니다. 표시기의 복사가 시작되었습니다. 이는 지표가 이 TF에서 처음으로 실행되었다는 사실과 동일합니다.

여기에 문제가 있습니까? 아무 문제 없습니다.

문제가 있습니다. 다른 표시기의 개체가 동시에 존재합니다. "죄송합니다. 일시적인 기술적인 문제가 있습니다."(그러나 이전 표시기의 DeInit이 발생하면 몇 초 안에 수정될 예정입니다.)

이전 복사본은 개체 삭제를 처리하고 새 복사본은 현재 TF에 따라 개체를 호출하여 새 복사본을 만듭니다.

내가 무엇을 잘못하고 있지? 문제가 보이지 않는 이유는 무엇입니까?

시야의 좁은 원. 여기서는 보이지 않습니다. 시야를 조금 넓혀보세요. 첫 번째 문제는 파일 작업 시 이미 발생합니다. 이전 표시기가 데이터를 파일에 덤프했는지 여부가 아직 명확하지 않기 때문입니다. 터미널의 전역 변수에 몇 가지 플래그가 있어야 합니다. 즉, 동기화를 수행하십시오(지표의 새 사본은 이전 사본이 누적 데이터를 재설정할 때까지 기다려야 함). 그런데 여기서 문제는 이러한 동기화가 OnCalculate()에서만 가능하다는 것입니다. 그러나 스위치가 주말에 발생했다면 어떻게 될까요? 새 사본이 월요일까지 출시되지 않습니까? 그리고 예, 타이머에 넣을 수 있습니다! 파일 작업을 할 때 그것 없이 우리는 어디에 있습니까?

이것들은 간단한 문제입니다. 다중 스레드 DLL로 작업할 때 이 논리를 고려하십시오. 그것이 재미가 계획되는 곳입니다 ... 글쎄, 아무것도, 우리는 더 강할 것입니다)))

 
Andrey Dik :

나는 이 스레드에서 설명된 뉘앙스와 같은 뉘앙스에 대해 들어 본 적이 없지만 여기서 논의되는 문제를 만난 적이 없습니다.

표시기의 다른 복사본으로 무언가를 전송하려는 경우 초기화에서 이 작업을 수행할 필요가 없습니다. 예를 들어 Ch에서 표시기의 전체 작업 동안 전송된 데이터를 최신 상태로 유지하십시오. 터미널 변수, 그러면 표시기 언로드 이유에 관계없이(TF 변경, 어머니가 "모두가 잘 때 울리지 않도록" 소켓에서 플러그를 뽑았음, 지진, 지구의 자극 변경 등) 표시기의 다음 실행(TF 변경 시 사본 포함)은 이 마법의 데이터 소스에서 필요한 모든 정보를 수신합니다(전 세계적인 규모의 불운한 경우 클라우드 드라이브에 데이터를 저장할 수 있음).

얘들아, 문제 없어, 문제 없어

내일 답변드리겠습니다. 확인? 운전은 쉽습니다.
 
Ihor Herasko :

문제가 있습니다. 다른 표시기의 개체가 동시에 존재합니다. "죄송합니다. 일시적인 기술적인 문제가 있습니다."(그러나 이전 표시기의 DeInit이 발생하면 몇 초 안에 수정될 예정입니다.)

좁은 시야. 여기서는 보이지 않습니다. 시야를 조금 넓혀보세요. 첫 번째 문제는 파일 작업 시 이미 발생합니다. 이전 표시기가 데이터를 파일에 덤프했는지 여부가 아직 명확하지 않기 때문입니다. 터미널의 전역 변수에 몇 가지 플래그가 있어야 합니다. 즉, 동기화를 수행하십시오(지표의 새 사본은 이전 사본이 누적 데이터를 재설정할 때까지 기다려야 함). 그런데 여기서 문제는 이러한 동기화가 OnCalculate()에서만 가능하다는 것입니다. 그러나 스위치가 주말에 발생했다면 어떻게 될까요? 새 사본이 월요일까지 출시되지 않습니까? 그리고 예, 타이머에 넣을 수 있습니다! 파일 작업을 할 때 그것 없이 우리는 어디에 있습니까?

이것들은 간단한 문제입니다. 다중 스레드 DLL로 작업할 때 이 논리를 고려하십시오. 그것이 재미가 계획되는 곳입니다 ... 글쎄, 아무것도, 우리는 더 강할 것입니다)))

나는 분명히 썼습니다. 사본으로 전송하는 데 필요한 데이터를 항상 최신 상태로 유지하십시오. 초기화를 통해서만 이 작업을 수행할 필요는 없으며 항상 최신 상태로 유지하십시오.

다른 모든 경우는 곡률로 인해 고안되었습니다.

동일한 표시기의 동시 실행에 문제가 있는 경우 TF를 참조하여 매번 고유한 개체를 생성하고 이미 개체가 있는 경우 이름에 1을 추가합니다.

표시기가 있는 단말기의 현재 작동으로 인해 문제를 극복할 수 없는 단일 특정 사례를 언급한 사람은 아무도 없습니다. 그리고 이러한 문제는 지표에 대한 잘못된 작업으로 인한 것입니다.

일반적으로 많은 사람들이 내가 보기에 3가지 유형의 프로그램이 있다는 것을 이해하지 못하는 이유가 있습니다(곧 4가 있을 예정입니다).