MQL5의 OOP에 대한 질문 - 페이지 42

 
Igor Makanu :

...

호출은 모두 privat 방식이지만 "제다이 트릭"이 있습니까? CheckPointer(m_order)==POINTER_INVALID에서 소스 텍스트를 이스케이프하려면

...

여기서 포인트는 수신에 있지 않고, 알고리즘은 순서가 없으면 코드의 이 부분이 실행되지 않도록 해야 합니다.

아니면 의도한 것일 수도 있습니다. 하지만 포인터가 있다고 해서 주문이 있는 것은 아니므로 주문의 존재를 확인해야 합니다.

 
Igor Makanu :

내 기억이 도움이된다면 연초에 로그에 NULL을 인쇄하고 거기에서 0을 얻는 것이 가능했습니다. 이제 오류가 발생합니다.

변경 사항

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

오류, 버그, 질문

키릴 벨루소 프 , 2017.12.14 21:34

 Print ( NULL ); // 'NULL' - expression of 'void' type is illegal
Alert ( NULL ); // 'NULL' - expression of 'void' type is illegal

은퇴할 시간

 
A100 :

변경 사항

네, 그렇습니다. 하지만 이전에 MT4에서 수행한 방법을 기억하고 다음과 같이 포인터를 인쇄했습니다.

 class A {};

A *a;
void OnStart ()
{   Print ( "1 : " ,a);
   a= new A;
   Print ( "2 : " ,a);
   a = NULL ;
   Print ( "3 : " ,a);

delete a;
}

2019.09.17 07:52:40.855 tst (EURUSD,H1)

2019.09.17 07:52:40.856 tst (EURUSD,H1) 2 : 1048576

2019.09.17 07:52:40.856 tst (EURUSD,H1) 서른

2019.09.17 07:52:40.856 tst (EURUSD,H1) 삭제되지 않은 개체가 1개 남음

2019.09.17 07:52:40.856 tst (EURUSD,H1) 유형 A의 개체 1개 왼쪽

2019.09.17 07:52:40.856 tst (EURUSD,H1) 24바이트의 메모리 누수

드미트리 페도세프 :

여기서 포인트는 수신에 있지 않고, 알고리즘은 순서가 없으면 코드의 이 부분이 실행되지 않도록 해야 합니다.

아니면 의도한 것일 수도 있습니다. 하지만 포인터가 있다고 해서 주문이 있는 것은 아니므로 주문의 존재를 확인해야 합니다.

작업에 따라 다르므로 이미 "주문 개체"를 만드는 방법을 코드에 작성했습니다. 이 개체는 시장 자체에 무엇이 있는지 파악합니다. 생성자에서 마법으로 검색하면 발견되면 선택하여 주문을 엽니다. 가격, 주문 유형 자체가 고려하는(시장 또는 보류 중), 로트 정규화, 이전 틱에 재호가가 있는 경우 주문을 다시 열려고 시도, 다음 틱에 성공적으로 주문한 후, 다음 틱 설정 등. 이것은 모두 "주문 객체"의 개입 없이 수행됩니다.

그리고 주문이 마감된 경우 여전히 해당 전략에 대해 존재하는 것으로 보입니다. 전략은 궁극적으로 주문의 이익에 관심이 있습니다(현재 또는 이미 마감됨 - 중요하지 않습니다!). 음, 주문 자체의 상태 (아직 배치되지 않고 작동 중이며 이미 닫혀 있음)


모든 것이 의도한 대로 작동합니다. 아마도 당신이 어딘가에 있을 것입니다. 그러나 코드를 테스트하는 동안 포인터를 확인해야 합니다. 그런 다음 이 확인 없이 시도할 수 있습니다 ... 비록 작업 논리가 그러한 개체가 없는 경우 다음 작업을 암시하지만 .... 원칙적으로 가상 주문에 대한 모든 것을 다시 실행하는 것이 거의 남아 있지 않으므로 여전히 생각할 필요가 있습니다.))))

 
Igor Makanu :

차라리 나보다 먼저 쓰고 싶었어

다음과 같았습니다.

하지만 MQL에서 매크로 대체를 확인하는 방법을 기억했습니다.

2019.09.16 22:57:42.837 tst (EURUSD,H1) 에이 = 1

2019.09.16 22:57:42.837 tst (EURUSD,H1) 포인터_INVALID = 0

2019.09.16 22:57:42.837 tst (EURUSD,H1) NULL = 0


내 기억이 도움이된다면 연초에 로그에 NULL을 인쇄하고 거기에서 0을 얻는 것이 가능했습니다. 이제 오류가 발생합니다.

저것들. NULL의 동작은 미래에 변경되어서는 안되지만 NULL을 대체하는 것은 명확하지 않습니다. 아마도 지금 이 상황을 확인 했다면 다음과 같이 썼습니다. ( CheckPointer (m_order) == POINTER_INVALID ) 그러면 이것이 올바른 코드 말하자면 )))

부담없이 신청하세요. 98%의 확실성으로 소스 코드의 NULL은 #define NULL nullptr과 같습니다.
 
Vladimir Simakov :

자, 여기 설탕이 있습니다.

첫 번째 간단한 테스트 쇼

 void OnStart ()
{
    A * const a = new A;
    DELETE(a); //Error: 'a' - constant cannot be modified
}

이것은 설탕이 아니라 또 다른 ... 더 많은 액체 물질입니다.

 
A100 :

첫 번째 간단한 테스트 쇼

이것은 설탕이 아니라 또 다른 ... 더 많은 액체 물질입니다.

왜냐하면 여기에 당신은 거기에 없기 때문입니다)) NULL은 여기도 저기도 아닙니다. CheckPointer() 함수 를 사용해야 합니다. 포인터를 직접 재설정할 필요는 없습니다. 삭제 후에는 POINTER_INVALID 자체가 됩니다.

 
Dmitry Fedoseev :

왜냐하면 여기에 당신은 거기에 없기 때문입니다)) NULL은 여기도 저기도 아닙니다. CheckPointer() 함수 를 사용해야 합니다. 포인터를 직접 재설정할 필요는 없습니다. 삭제 후에는 POINTER_INVALID 자체가 됩니다.

나는 완전히 동의합니다. 관리자를 읽으면 일반적으로 다음과 같이 들립니다. 코드를 올바르게 작성하십시오.

MQL은 일반적으로 항상 터프하고 새로운 빌드, 새로운 문제, 클래식에 따라 어떻게 사용하든지 알아내기 시작합니다. 여기에 서명합니다.)))

 
A100 :

첫 번째 간단한 테스트 쇼

이것은 설탕이 아니라 또 다른 ... 더 많은 액체 물질입니다.

좋은 사람. 그리고 당신의 프리랜서 작업, 시장에 있는 제품, 프로그래밍과 관련된 출판물에 대한 통계는 어디에 있습니까? 아니면 상수 포인터의 주제에 대해 누군가의 눈을 뜨려고 하거나 물질 유형에 대한 지식을 과시하려고 하는 건가요..? 앞으로는 예제의 맥락을 고려하여 컴파일러 오류를 재현하지 마시기 바랍니다.
 
Vladimir Simakov :
좋은 사람. 그리고 당신의 프리랜서 작업에 대한 통계, 시장에 나와 있는 제품, 프로그래밍과 관련된 출판물은 어디에 있습니까? 아니면 지속적인 포인터의 주제에 대해 누군가의 눈을 뜨려고 하거나, 말하자면 물질 유형에 대한 지식을 과시하려고 합니까 ..? 앞으로는 예제의 맥락을 고려하여 컴파일러 오류를 재현하지 마시기 바랍니다.

간단한 컨텍스트가 있습니다. 코드(이 경우 매크로)에 오류가 있는 경우 이를 보고하는 것이 가능하다고 생각합니다(그리고 이를 확인하는 예를 제공함). 그리고 이런 맥락에서 통계 가 그것과 어떤 관련이 있는지 이해하지 못합니다.

 
A100 :

그리고 이런 맥락에서 통계 가 그것과 어떤 관련이 있는지 이해하지 못합니다.

간단하고 사람들이 당신에게 연락할 것입니다

;)

추신 : 귀하의 메시지에는 거의 항상 합리적인 곡물이 있지만, 마치 전적으로 좋은 의도가 아닌 것처럼 자료의 프레젠테이션은 물론 귀하의 비즈니스이지만 IMHO, 당신이 돕고 싶다면 - 당신이 원한다면 도와주세요 똑똑하기 위해 종종 밝혀집니다.

물론 당신의 일이지만 인터넷 자원을 통해 자존감을 높이는 것은 .... 더 이상 인쇄하기에는 너무 게으르다