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

 
Alexey Navoykov :
나는 당신의 혼란이 무엇에 관한 것인지 이해합니다. C#에서 const 지정자는 컴파일 타임에 평가되는 상수 식에만 사용됩니다. C++에는 이와 유사한 것이 있습니다: constexpr. 그러나 MQL에서는 그렇지 않습니다.

여기서 일반적으로 문제는 언어의 구문 구조에 있습니다.

자연어(수학)에서 상수는 ... 음, 말하자면 상수입니다! ))

C++에서 상수는 컴파일러가 변수의 범위(또는 수명)에서 상수를 기계적으로 검사하는 것입니다.

C#에서 상수는 자연어의 규범에 더 가까운 구문적 의미를 갖습니다.


이 토론의 요점은 무엇입니까?

 const MqlTick _Tick; // Текущий _Symbol-тик.

IMHO, 이 구성은 C++ 구문과 완전히 일치하거나 적어도 MQL4에는 Bid 및 Ask가 있었고 아무도 이것이 얼마나 정당한지에 대해 오랫동안 의심을 제기하지 않았습니다.




demagogy 없이 현재 가격 에 가장 빠르게 액세스해야 하는 경우 프로파일러는 SymbolInfoDouble() 및 SymbolInfoTick()의 지속적인 사용이 최적화 속도를 감소시킨다는 것을 보여줍니다.

 
Mihail Matkovskij :

컴파일러를 어떻게 변경할 수 있습니까?

컴파일러가 빌드 900에서 MetaEditor에 내장되어 있다는 것을 알았습니다. https://www.mql5.com/ru/forum/21374

그렇다면 VS가 설치된 디렉토리로 이어지는 줄이 있는 이 창은 무엇입니까?

컴파일러

Обратите внимание, что компилятор переехал внутрь MetaEditor, начиная с 900 билда
Обратите внимание, что компилятор переехал внутрь MetaEditor, начиная с 900 билда
  • 2014.03.01
  • www.mql5.com
Консольный компилятор MQL4/MQL5 остался, обновляется вместе с платформами МетаТрейдер 4/5 и всегда доступен по ссылкам:.
 
Igor Makanu :

선동이 없다면 현재 가격 에 가장 빠르게 액세스해야 하는 경우 프로파일러는 SymbolInfoDouble() 및 SymbolInfoTick()의 지속적인 사용이 최적화 속도를 감소시킨다는 것을 보여줍니다.

글쎄, 여기에 현재 문자의 이름 대신 NULL을 전달할 가능성을 추가하는 것이 이전에 제안되었습니다. 이것은 특정한 경우에 작업 속도를 높일 수 있습니다. 글쎄, 일반적으로 문자의 텍스트 값이 아니라 핸들을 통해 액세스해야 합니다. 그러나 개발자는 그러한 합병증을 겪지 않을 것이라고 생각합니다. 그리고 제 생각에는 그럴 가치가 없습니다. 문제는 오히려 인위적입니다.

이전 측정에서 비용은 테스터의 유휴 실행(무부하)의 6%에 불과했습니다. 그리고 작업 코드에서는 훨씬 더 작아질 것입니다. 그런 사소한 일에주의를 기울일 가치가 있습니까? 예, 핸들러에서 이러한 함수를 두 번 이상 호출하는 것은 그 자체로 잘못된 결정입니다.

 
Alexey Navoykov :

글쎄, 여기 에 현재 기호의 이름 대신 NULL을 전달할 가능성을 추가하는 것이 이전에 제안되었습니다. 이것은 특정한 경우에 작업 속도를 높일 수 있습니다. 글쎄, 일반적으로 문자의 텍스트 값이 아니라 핸들을 통해 액세스해야 합니다. 그러나 개발자는 그러한 합병증을 겪지 않을 것이라고 생각합니다. 그리고 제 생각에는 그럴 가치가 없습니다. 문제는 오히려 인위적입니다.

이미 작동하지만 가속이 없습니다(확인했습니다) - 분명히 모든 것이 이미 가능한 한 가속되거나 그 반대의 경우도 마찬가지입니다.

 
A100 :

따라서 엄격함을 위해 _Digits 대신 Digits()를 사용해야 합니다. 그런 다음 형식적으로 논리적 모순이 발생하지 않습니다. Digits()는 const 수정자에 의해 바인딩되지 않습니다.

내가 이해하는 한 MT4와의 호환성을 위해 _Digits가 필요했습니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

일리아스 , 2020.05.20 15:39

Symbol() 함수를 호출하면 Digits(), Point(), Period(), GetLastError(), IsStopped(), UninitializeReason() 처럼 전역 변수 _Symbol에 액세스하기 위해 항상 확장됩니다.

 
Mihail Matkovskij :

디버깅할 때, 인디케이터가 작동할 때 로그에 갑자기 Stack Overflow를 씁니다. 자체 디버깅할 때 "중요한 오류가 발생했습니다. 디버깅이 중지되었습니다"라는 메시지가 표시됩니다. 다음은 비슷한 주제입니다. https://www.mql5.com/en/forum/338301 . 그러나 컴파일할 때 컴파일러는 맹세하지 않고 모든 것이 잘 됩니다. 디버깅할 때 프로그램이 충돌하는 지점을 설정할 수 없습니다.

아마도 컴파일러에 관한 모든 것입니까? 어떤 컴파일러가 사용되는지 자세히 알아보지는 않았지만 설정에 다음 그림이 있습니다.

VS가 설치되어 있으므로 이 링크가 설정에 있습니다. 그럼 컴파일러가 맞을까... 근데 VS가 없을 때 컴파일러는 뭐였더라 솔직히 말해서 자세히는 안 봤다. 해당 컴파일러로 돌아가서 프로젝트를 컴파일하려고 시도해야 합니까?

문제 해결 방법을 찾던 중 터미널의 다음 업데이트가 도착하여 디버깅이 제대로 작동했습니다. 오류를 찾는 데 성공했습니다. 일부 메서드는 반복되어 스스로를 호출합니다. 이것이 프로그램이 "스택 오버플로"라는 메시지와 함께 충돌한 이유입니다. 그러나 작동 중인 디버그의 도움으로 문제가 있는 모든 줄을 찾아 수정할 수 있었습니다. 디버깅을 통해 버그를 빠르게 제거한 개발자에게 감사를 표합니다!

 

в естественном языке (в математике) константа это... ну как бы константа! ))

C++에서 상수는 컴파일러가 변수의 범위(또는 수명)에서 상수를 기계적으로 검사하는 것입니다.

C++ 및 MQL에서 상수는 생성 중에 한 번 값으로 설정되고 다시 변경되지 않을 수 있습니다. 시야 범위는 그것과 관련이 없습니다.

수학에서와 크게 다르지 않습니다.


 
Mihail Matkovskij :

컴파일러가 빌드 900에서 MetaEditor에 내장되어 있다는 것을 알았습니다. https://www.mql5.com/ru/forum/21374

그렇다면 VS가 설치된 디렉토리로 이어지는 줄이 있는 이 창은 무엇입니까?


DLL을 작성하는 경우 VS 컴파일러가 사용됩니다.

 
fxsaber :

_ Digits , _P oint, _Period, _LastError 등을 직접 사용하는 것은 의미가 없음을 다시 한 번 확인합니다. 아니요(심지어 _Symbol도 NULL로 대체될 수 있음). 사실 그들은 const volatile로 선언되어야 합니다.

그리고 당신은 반대로이 시리즈를 보완 할 것을 제안합니다.

 
A100 :

_ Digits, _P oint, _Period, _LastError 등을 직접 사용하는 것은 의미가 없음을 다시 한 번 확인합니다. 아니요. 그리고 _Symbol도 NULL로 바꿀 수 있습니다.

그리고 당신은 반대로이 행을 보완 할 것을 제안합니다.

참조로 전달할 수 있다는 것이 포인트입니다.