오류, 버그, 질문 - 페이지 434

 

퇴비
네가 옳아. 제가 실수를.
답변 해주셔서 감사합니다.

 
Silent :

MQL5 참조의 오타 - 표준 라이브러리 - 데이터 구성을 위한 클래스 - CArrayObj(사이트 및 도움말):

2. 메모리 관리 메커니즘이 비활성화됩니다.

이 경우 CArrayObj는 메모리 해제를 담당 하지 않습니다.

수정했습니다, 감사합니다
 

선적 서류 비치. 섹션 정적 변수 .

" ...정적 변수는 프로그램이 실행되는 순간부터 존재하며 한번 초기화 된다. 특수 함수 OnInit()을 호출하기 전에 ... "

어드바이저 인증 코드:

 void OnInit () {
   Print ( "OnInit() begin!" );

   static bool init = true ;
   if (init) {
     Print ( "Static initialized!" );
    init = false ;
  } 

   Print ( "OnInit() end!" );
}

차트에 고문을 "넣다":

 2011.06 . 27 20 : 10 : 56      Тест (EURUSD,H1)         OnInit () begin!
2011.06 . 27 20 : 10 : 56      Тест (EURUSD,H1)        Static initialized!
2011.06 . 27 20 : 10 : 56      Тест (EURUSD,H1)         OnInit () end!

차트에서 EA를 삭제하지 않고 차트 기간을 변경합니다.

 2011.06 . 27 20 : 11 : 00      Тест (EURUSD,M30)       OnInit () begin!
2011.06 . 27 20 : 11 : 00      Тест (EURUSD,M30)       OnInit () end!

그것이 어떻게 작동해야합니까?

나는 실제로 문서의 정보를 OnInit() 함수에 대한 호출에서 정적 변수의 강제 초기화로 해석했는데, 그것이 재컴파일이든 기호 변경이든, 아니면 다른 무엇 때문이든 상관없이 ...

내가 틀렸다는 것이 밝혀졌습니다. 명확히 하십시오: 이 규칙의 예외는 무엇입니까?

 

입력 매개 변수를 변경할 때 동일한 "파슬리".

그러나 계정을 변경하면 처리가 정확합니다. 정적 변수가 다시 초기화됩니다.

Expert Advisor( REASON_CHARTCHANGE )를 삭제하지 않고 차트 기호를 변경하는 방법이 궁금합니다.

Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации - Документация по MQL5
 
voix_kas :

선적 서류 비치. 섹션 정적 변수 .

" ...정적 변수는 프로그램이 실행되는 순간부터 존재하며 한번 초기화 된다. 특수 함수 OnInit()을 호출하기 전에 ... "

어드바이저 인증 코드:

차트에 고문을 "넣다":

차트에서 EA를 삭제하지 않고 차트 기간을 변경합니다.

그것이 어떻게 작동해야합니까?

네, 그렇게 해야 합니다.

프로그램(해당 코드)은 이미 한 번 로드되었으며 핫 재초기화(코드를 언로드하지 않고 Deinit / Init)만 수행합니다. 이 경우 개발자 자신이 환경의 올바른 초기화를 처리해야 합니다.

 
Renat :

네, 그렇게 해야 합니다.

프로그램(해당 코드)은 이미 한 번 로드되었으며 핫 재초기화(코드를 언로드하지 않고 Deinit / Init)만 수행합니다. 이 경우 개발자 자신이 환경의 올바른 초기화를 처리해야 합니다.

첫째, 귀하의 의견은 문서의 정의와 분명히 모순됩니다. OnInit()를 호출하기 전에 한 번 초기화됩니다. 그런 다음 정의는 문서에 명시적으로 지정되어야 합니다. "...OnInit()에 대한 첫 번째 호출 전에 한 번 초기화됩니다."
둘째, 귀하의 의견은 분명히 MT가 Expert Advisor를 강제로 종료하고 다시 복원하는 계정 변경 사례와 모순됩니다.

OnInit()에 대한 (첫 번째뿐만 아니라) 각각의 호출로 정적 변수 를 강제로 재초기화해야 할 필요성에 대한 근본적인 질문을 고려/투표를 위해 제출할 수 있습니까?

 

대체로 재미있습니다.
문득 OnDenit 함수는 일종의 소멸자이고 OnInit는 전문 생성자라고 생각했습니다.
사실, OnInit는 다중 이벤트(Expert Advisor의 수명 내)인 것으로 밝혀졌습니다. 그렇다면 Expert Advisor가 작업을 완료하지 않는 것으로 알려진 경우(예: 차트 기간이 변경된 경우) 왜 명시적으로 OnDenit 이벤트를 생성하는지 명확하지 않습니다.

그리고 또 다른 질문.
초기화 해제 이유 REASON_CHARTCHANGE - 차트 기호 또는 기간이 변경되었습니다.
Expert Advisor를 삭제하지 않고 차트 기호를 변경할 수 있는 방법을 설명해 주시겠습니까?

 
voix_kas :

그리고 또 다른 질문.
초기화 해제 이유 REASON_CHARTCHANGE - 차트 기호 또는 기간이 변경되었습니다.
Expert Advisor를 삭제하지 않고 차트 기호를 변경할 수 있는 방법을 설명해 주시겠습니까?

ChartSetSymbolPeriod()
 
voix_kas :

대체로 재미있습니다.
문득 OnDenit 함수는 일종의 소멸자이고 OnInit는 전문 생성자라고 생각했습니다.
사실, OnInit는 다중 이벤트(Expert Advisor의 수명 내)인 것으로 밝혀졌습니다. Expert Advisor가 작업을 완료하지 않는 것으로 알려진 경우(예: 차트 기간이 변경된 경우) 명시적으로 OnDenit 이벤트를 생성하는 이유가 명확하지 않습니다.

그리고 또 다른 질문.
초기화 해제 이유 REASON_CHARTCHANGE - 차트 기호 또는 기간이 변경되었습니다.
. 차트의 전문가를 삭제하지 않고 차트 기호를 변경할 수 있는 방법을 설명해 주십시오.

1. 정확히 같은 방식으로 모든 것이 MT4에서 호출되었습니다. 그리고 전문가의 작업이 완료되었는지 여부도 알 수 없습니다.

2. 터미널 매개변수에서 기호 및 기간을 변경할 때 Expert Advisor가 거래할 수 있도록 하는 것은 매우 간단합니다.

그런 다음 시장 리뷰에서 다른 기호를 선택하고 마우스로 차트에 "드롭"합니다.

어쨌든, 정상적인 초기화 동안 Expert Advisor는 기호/마침표를 변경한 후 "삭제되지 않습니다" (Renat "Hot restart"가 아래에 기술한 대로 발생합니다) . 이를 간단한 수준에서 고려하면 전문가는 특정 터미널 설정으로 거래할 수 있습니다.

예델킨 :
ChartSetSymbolPeriod()
또한 옵션이지만 소프트웨어입니다. :)
 
voix_kas :

첫째, 귀하의 의견은 문서의 정의와 분명히 모순됩니다. OnInit()를 호출하기 전에 한 번 초기화됩니다. 그런 다음 정의는 문서에 명시적으로 지정되어야 합니다. "...OnInit()에 대한 첫 번째 호출 전에 한 번 초기화됩니다."

예, 문서에 더 정확하게 작성해야 합니다.


둘째, 귀하의 의견은 분명히 MT가 Expert Advisor를 강제로 종료하고 다시 복원하는 계정 변경 사례와 모순됩니다.

예, 계정을 변경할 때 Expert Advisor는 명시적으로 메모리에서 완전히 언로드되고 콜드 재시작을 수행합니다. 이것은 우리가 의도적으로 한 것입니다.


OnInit()에 대한 (첫 번째뿐만 아니라) 각각의 호출로 정적 변수 를 강제로 재초기화해야 할 필요성에 대한 근본적인 질문을 고려/투표를 위해 제출할 수 있습니까?

불행하게도. 이것은 Expert Advisor의 콜드 재시작을 통해서만 해결할 수 있습니다.