MQL에 다중 상속이 없다는 것은 물론 우울합니다. 그러나 즉석에서 나갈 수 있습니다: 템플릿과 매크로 - 그것들이 없는 곳)
여기에 옵션이 쌓여 있습니다. 모든 소스 클래스는 상위 클래스를 정의하는 템플릿으로 선언되어야 합니다 .
class CBase { }; // базовый класс// Макросы, задающие список наследования:#define INHERIT1(T) T<CBase>
#define INHERIT2(T1, T2) T2<INHERIT1(T1)>
#define INHERIT3(T1, T2, T3) T3<INHERIT2(T1,T2)>
#define INHERIT4(T1, T2, T3, T4) T4<INHERIT3(T1,T2,T3)>
// Различные пользовательские классы:template < typename TParent>
class A : public TParent { public : void a() { Print ( "A" ); } };
template < typename TParent>
class B : public TParent { public : void b() { Print ( "B" ); } };
template < typename TParent>
class C : public TParent { public : void c() { Print ( "C" ); } };
class X : public INHERIT3(A, B, C) { }; // Объявляем класс, наследуемый от A, B, Ctemplate < typename T>
void SomeFunc(B<T>& obj) { obj.b(); } // Проверочная функция, принимающая класс BvoidOnInit ()
{
X x;
x.a();
x.b();
x.c();
SomeFunc(x);
}
물론 여기에는 클래스가 병렬로 상속되지 않고(실제 다중 상속에서와 같이) 순차적으로(우리가 설정한 순서대로) 상속된다는 사실 때문에 뉘앙스가 있습니다. 특히 과부하가 발생하면 우선 순위가 다릅니다. 또한 동일한 템플릿 클래스가 상속 체인에 여러 번 참여하면 서로 관련이 없는 완전히 다른 클래스가 됩니다. 그래서 여기서 조심해야 합니다. 그러나 인터페이스에는 문제가 없으며 제한 없이 상속할 수 있습니다.
그리고 템플릿 형태의 선언이 없다면?
예를 들어, 두 개의 기성품 자급자족 라이브러리가 있습니다.
클래스 CLib1: 공개 CClass1 { }, 그리고 클래스 CLib2: 공개 CClass2 { };
그러한 상속이 있도록 프로그램 클래스에서 그것을 만드는 것이 필요합니다:
CLib1--> CLib2 --> CProgram 두 라이브러리를 모두 CProgram 클래스에서 사용할 수 있도록 합니다. 따라서 CLib1 라이브러리는 CLib2에서 사용할 수 있었습니다.
이 경우 두 라이브러리의 코드를 어떻게든 변경하는 것은 불가능합니다.
이게 가능해?
다중 상속을 사용하면 다음과 같이 보일 것입니다. 클래스 CProgram : 공개 CLib1,CLib2 { };
히스토리에 1000건 이상의 거래가 있을 때 히스토리 수익을 계산하는 히스토리 처리 기능을 호출 할 때 문제가 발생했습니다. + 현재 거래의 이익 추가 - 차트의 정보가 느려지기 시작하고 터미널이 멈춥니다. 저것들. 견적이 지연됩니다.
코드가 없으면 추측만 할 수 있습니다.
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
mql5 언어의 특징, 미묘함 및 작업 방법
알렉세이 나보이코프 , 2017.07.21 17:04
MQL에 다중 상속이 없다는 것은 물론 우울합니다. 그러나 즉석에서 나갈 수 있습니다: 템플릿과 매크로 - 그것들이 없는 곳)
여기에 옵션이 쌓여 있습니다. 모든 소스 클래스는 상위 클래스를 정의하는 템플릿으로 선언되어야 합니다 .
물론 여기에는 클래스가 병렬로 상속되지 않고(실제 다중 상속에서와 같이) 순차적으로(우리가 설정한 순서대로) 상속된다는 사실 때문에 뉘앙스가 있습니다. 특히 과부하가 발생하면 우선 순위가 다릅니다. 또한 동일한 템플릿 클래스가 상속 체인에 여러 번 참여하면 서로 관련이 없는 완전히 다른 클래스가 됩니다. 그래서 여기서 조심해야 합니다. 그러나 인터페이스에는 문제가 없으며 제한 없이 상속할 수 있습니다.
그리고 템플릿 형태의 선언이 없다면?
예를 들어, 두 개의 기성품 자급자족 라이브러리가 있습니다.
클래스 CLib1: 공개 CClass1 { }, 그리고
클래스 CLib2: 공개 CClass2 { };
그러한 상속이 있도록 프로그램 클래스에서 그것을 만드는 것이 필요합니다:
CLib1--> CLib2 --> CProgram 두 라이브러리를 모두 CProgram 클래스에서 사용할 수 있도록 합니다. 따라서 CLib1 라이브러리는 CLib2에서 사용할 수 있었습니다.
이 경우 두 라이브러리의 코드를 어떻게든 변경하는 것은 불가능합니다.
이게 가능해?
다중 상속을 사용하면 다음과 같이 보일 것입니다.
클래스 CProgram : 공개 CLib1,CLib2 { };
그리고 템플릿 형태의 선언이 없다면?
예를 들어, 두 개의 기성품 자급자족 라이브러리가 있습니다.
클래스 CLib1: 공개 CClass1 { }, 그리고
클래스 CLib2: 공개 CClass2 { };
프로그램 클래스에서 다음과 같은 상속이 필요합니다.
CLib1--> CLib2 --> CProgram 두 라이브러리를 모두 CProgram 클래스에서 사용할 수 있도록 합니다. 따라서 CLib1 라이브러리는 CLib2에서 사용할 수 있었습니다.
이 경우 두 라이브러리의 코드를 어떻게든 변경하는 것은 불가능합니다.
이게 가능해?
다중 상속을 사용하면 다음과 같이 보일 것입니다.
클래스 CProgram : 공개 CLib1,CLib2 { };
다음과 같이 하면 아무것도 잃지 않을 것입니다.
class CProgram { CLib1 lib1; CLib2 lib2; };
다음과 같이 하면 아무것도 잃지 않을 것입니다.
비동기 복사 기능(CopyRates, CopyTicks 등)에서 데이터를 가져오는 가장 좋은 방법은 EventChartCustom 을 사용하는 것입니다.
지표의 경우 특히 그렇습니다.
계정뿐만 아니라 거래 서버에 변경 사항이 있음을 알 수 있습니다. OnDeinit(EA, 표시기가 아님)의 AccountInfoString (ACCOUNT_SERVER) 이 새 거래 서버를 반환합니다.
메모
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
전략 테스터에 대한 나의 불만. MQL 개발자에게
fxsaber , 2017.12.04 09:11
결과
가격 차트에 다른 기호의 가격 차트를 겹치는 지표의 전체 클래스가 있습니다. 그것들은 표시기 버퍼 를 통해 균일하게 만들어집니다.
그러나 MT5에는 표시기 버퍼 없이 이 작업을 훨씬 더 아름답게 구현할 수 있는 멋진 OBJ_CHART가 있습니다.
예를 들어, 표시기를 던지고 즉시 다른 기호에서 어떻게 보이는지 확인할 수 있습니다.
슬레이브 방식 - 여러 개의 차트가 메인 차트의 배경으로 표시됩니다.
예를 들어, 표시기를 던지고 즉시 다른 기호에서 어떻게 보이는지 확인할 수 있습니다.
슬레이브 방식 - 여러 개의 차트가 메인 차트의 배경으로 표시됩니다.