많은 사람들에게 흥미로운 주제: MetaTrader 4 및 MQL4의 새로운 기능 - 큰 변화가 진행 중입니다. - 페이지 10

 

많은 작은 기능을 병합하는 매우 좋은 인라이너가 있으므로 속도 손실이 없음을 잊지 마십시오.

또한 대부분의 경우 vtable을 통한 가상 함수 호출은 직접 호출로 최적화됩니다. 이것은 효과적인 옵티마이저 방법 중 하나입니다. 다중 인라인과 결합되어 복잡한 다중 수준 호출을 거의 완전히 제거하고 코드를 평면 보기로 전환할 수 있습니다.

Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Виртуальные функции
Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Виртуальные функции
  • www.mql5.com
Основы языка / Объектно-ориентированное программирование / Виртуальные функции - Документация по MQL5
 
Renat :

많은 작은 기능을 병합하는 매우 좋은 인라이너가 있으므로 속도 손실이 없음을 잊지 마십시오.

또한 대부분의 경우 vtable을 통한 가상 함수 호출은 직접 호출로 최적화됩니다. 이것은 효과적인 옵티마이저 방법 중 하나입니다. 다중 인라인과 결합되어 복잡한 다중 수준 호출을 거의 완전히 제거하고 코드를 평면 보기로 전환할 수 있습니다.

:) 미소를 지었다. 그리고 컴파일러가 코드를 완벽하게 최적화한다고 주장하는 사람은 아무도 없습니다. 저는 친구에게 제가 왜 SB 앞에 절하지 않는지에 대한 아이디어를 가져왔습니다.

좋습니다. 몇 가지 예를 들어보겠습니다.

 class CiCustom : public CIndicator : public CDoubleBuffer

                пользуется включением class CSeries : public CArrayObj который в свою очередь

                                                     пользуется включением class CArrayDouble : public CArray и

                                                                           class CArrayObj : public CArray ну и конечно куда как без

                                                                                  включения class CArray : public CObject который включает

                                                                                                           class CObject и #include "StdLibErr.mqh"

실제로는 간단한 표준 함수로 대체됩니다.

 CopyBuffer (...);

우리는 예술을 위한 예술을 가지고 있습니다. 그리고 무언가를 수행하는 각 요소에 대해 계속 진행됩니다(나머지는 최종 요소가 작동하도록 작성되었습니다).

예, 보편성에 동의합니다. 예, 잘 구성된 코드에 동의합니다(연구용 샘플을 말할 수 있음).

그리고 요점은 무엇입니까? 그리고 결론은 이 라이브러리는 주로 "MQL5 Wizard"와 OOP에 대한 교과서로 필요하다는 것입니다.

 
Urain :

나는 단지 내 친구에게 내가 왜 안전보장이사회 앞에 엎드려 절하지 않는지에 대한 아이디어를 가져왔습니다.

예, 예, 다시 한 번 강조하겠습니다. 귀하의 주장에 대해 심각한 이의가 없습니다. 이 문제에 대한 논쟁은 객관적이기보다는 종교적일 것입니다.

여기, 귀하 자신의 예에서 개인적으로, 그리고 내 경우에는 코드의 첫 번째 버전이 더 수용 가능한 것처럼 보입니다. 정확히는 모든 인터페이스와 표시기의 보편성과 호환성을 제공하는 이러한 모든 다단계 포함으로 인해 더 적합합니다. CObject', 그리고 CiCustom'om으로 끝납니다. 이 개체는 이러한 수준 중 하나로 작업하는 방법을 알고 있는 모든 사용자에게 전달할 수 있으며 추가 노력이 필요하지 않습니다.

그러나 다른 한편으로 내 모든 시계열 및 표시기는 요청에 따라 생성되고 단일 컬렉션에 적합하며 모든 사용자가 사용할 수 있습니다. 그리고 버퍼를 한 번 복사해야 할 때 - 문제가 발생합니다 - 울타리 정원은 어떻습니까?

따라서 간단한 경우에 - 확실히 CopyBuffer() 를 사용하는 것이 훨씬 쉬울 것입니다.

그러나 이 버퍼의 사용자가 12명이라면 어떻게 될까요? 제 경우에는 모두 버퍼에 적용되며 첫 번째 요청에서 버퍼가 생성되고 다른 모든 사람들은 단순히 버퍼에 대한 링크를 받습니다. 그리고 "이마에" CopyBuffer()를 사용하면 하나가 아닌 10개의 복사본이 생깁니다. CopyBuffer()를 더 미묘하게 사용하면 누가, 어떤 버퍼가 할당되었는지 추적하는 종소리와 휘파람을 얻을 수 있으며, 이는 언급한 캡슐화 비용과 상당히 비슷합니다.

개인적으로 저는 합리성을 지지합니다. 한 곳에서 OOP로 정원을 울타리로 묶는 것은 의미가 없습니다. 사용자가 많으면 OOP 접근 방식이 정당하다고 생각합니다.

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyBuffer - Документация по MQL5
 
Urain :

그런 다음 하나의 코드가 mql4와 mql5 모두에서 컴파일될 수 있도록 예외를 도입할 때입니다.

통일의 문제는 그것이 어떻게 만들어지는가이다.

나는 지원한다. 매우 편리한 기능입니다.
C-4 :
여기에서는 두 언어를 결합할 때 #ifdef와 같은 조건부 컴파일 지시문이 절대적으로 필요하다고 생각했습니다. 이는 두 플랫폼 간의 코드 통합을 크게 단순화하고 플랫폼 종속 API는 컴파일 단계에서 결정됩니다.
벌써 4명이나 있어요 :)
 
Renat :
불행하게도. 테스터는 MQL5 Cloud Network 없이 단일 스레드로 유지됩니다.
다중 통화는 어떻습니까?
 
Mt4에서도 테스터의 이념은 그대로입니다. 우리는 적어도 가까운 장래에 급진적인 변화를 시도하지 않을 것입니다.
 
Renat :

많은 작은 기능을 병합하는 매우 좋은 인라이너가 있으므로 속도 손실이 없음을 잊지 마십시오.

또한 대부분의 경우 vtable을 통한 가상 함수 호출은 직접 호출로 최적화됩니다. 이것은 효과적인 옵티마이저 방법 중 하나입니다. 다중 인라인과 결합되어 복잡한 다중 수준 호출을 거의 완전히 제거하고 코드를 평면 보기로 전환할 수 있습니다.

아... 이제 내가 프로그램을 작성할 때 가장 흔히 저지르는 실수 중 하나가 "함수는 본체를 가져야 한다"는 것인 이유를 이해합니다.

이 인라이너는 ... 그렇지 않으면 나에게 놀랐습니다. 함수 헤더가 모듈을 컴파일하기에 충분한 것처럼 보이지만 ... 당신은 바디가 필요합니다 ...

글쎄, 좋아.

 
Laryx :

아... 이제 내가 프로그램을 작성할 때 가장 흔히 저지르는 실수 중 하나가 "함수는 본체를 가져야 한다"는 것인 이유를 이해합니다.

이 인라이너는 ... 그렇지 않으면 나에게 놀랐습니다. 함수 헤더가 모듈을 컴파일하기에 충분한 것처럼 보이지만 ... 당신은 바디가 필요합니다 ...

모두 올바르게 작성되지만 옵티마이저와 관련이 없습니다.

클래스 함수의 프로토타입 이 설명되면 본문이 있어야 합니다. 비어 있더라도.

Документация по MQL5: Основы языка / Функции
Документация по MQL5: Основы языка / Функции
  • www.mql5.com
Основы языка / Функции - Документация по MQL5
 

Renat , 터미널의 일반 매개변수가 아니라 각 차트에 대해 별도로 차트의 위치 가시성을 제어하기 위해 MT4에서 제안합니다(MT5에서 수행된 것처럼).

이 문제에 대한 SD에 대한 나의 신청은 두 번째 달 동안 움직이지 않고 있습니다.

 
Interesting :

Renat , 터미널의 일반 매개변수가 아니라 각 차트에 대해 별도로 차트의 위치 가시성을 제어하기 위해 MT4에서 제안합니다(MT5에서 수행된 것처럼).

이 문제에 대한 SD에 대한 나의 신청은 두 번째 달 동안 움직이지 않고 있습니다.

개체 작업을 하는 동안 살펴보겠습니다.