mt5 ObjectDelete에 버그가 있습니까? - 페이지 3

 
Fernando Carreiro :
어떤 빌드를 사용하셨나요? "ObjectDelete()" 함수 가 있는 최신 빌드에 가능한 버그가 있는 것 같기 때문에 "ObjectFind()"에도 문제가 있을 수 있습니다!

MT5: 빌드 1495(2016년 12월 9일)

 
honest_knave :

MT5: 빌드 1495(2016년 12월 9일)

빌드 1491에서 코드를 실행했고 비슷한 결과를 얻었습니다.

2016.12 . 11 12 : 31 : 05.739 test (EURUSD.m,H1)       ObjectFind took 20126 μs
2016.12 . 11 12 : 31 : 05.739 test (EURUSD.m,H1)       ObjectDelete took 247 μs
 
Fernando Carreiro :

빌드 1491에서 코드를 실행했고 비슷한 결과를 얻었습니다.

지속적으로 이상합니다. 아마도 왜 좋은 설명이...?
 
honest_knave :

이것은 버그라기보다는 의미론적일 수 있습니다.

ObjectDelete의 목적은 "지정된 이름을 가진 개체를 제거"하는 것입니다.

함수 실행이 끝나면 차트에 "존재하지 않는 개체"라는 개체가 여전히 있습니까? 아니..그래서 이게 성공이야?

다른 방식으로 보면 ObjectDelete가 "존재하지 않는 개체"라는 개체를 제거했습니까? 아니... 그래서 실패인가요?

결과나 취한 조치로 성공을 측정합니까?

함수 를 실행한 후 명명된 개체가 차트에 남아 있으면 false가 예상될 수 있습니다. 그렇지 않으면 성공했습니다.

당신이 말하는 것이 사실일 수도 있지만 MQL4에서 MQL5로 마이그레이션할 때 동일한 결과 또는 최소한 참조의 반환 값에 명확하게 쓰여진 결과를 볼 것으로 예상됩니다.

이 첫 번째 문제를 통과하고 ObjectMove 기능을 테스트했으며 다시 TRUE 결과를 얻고 있습니다! 이것은 결국 객체를 사용할 수 없기 때문에 true가 정확하다는 설명을 넘어섭니다.

사용할 수 없는 개체에 대해 ObjectMove를 사용하면 false를 반환해야 합니다!

moveResult=ObjectMove(ChartID(),"사용할 수 없는 추세선",1,time[4950],low[4980]);

인쇄(__LINE__,"-moveResult=",moveResult);

2016.12.11 17:22:39.367 Far-Test-ChangeTrendLine(EURUSD,H1) 44-moveResult=true

 
Farzin Sadeghi :

안녕하세요, 저는 MQL5에서 표시기를 작성하고 있지만 문자열 이름 ObejectDelete로 무엇을 작성하든 true를 반환합니다! 개체가 없는 빈 차트에서도!


객체 함수 설명 읽기

이것은 지정된 차트와 관련된 그래픽 개체로 작업하기 위한 기능 그룹입니다.

그래픽 개체의 속성을 정의하는 함수와 차트를 따라 개체를 만들고 이동하는 ObjectCreate()ObjectMove() 작업은 실제로 차트에 명령을 보내는 데 사용됩니다. 이러한 기능이 성공적으로 실행되면 해당 명령은 차트 이벤트의 공통 대기열에 포함됩니다. 차트 이벤트의 대기열을 처리할 때 그래픽 개체 속성의 시각적 변경이 구현됩니다.

"Delete this object" 명령이 성공적으로 수락되었음을 의미합니다. GetLastError()로 명령 결과를 제어할 수 있습니다. 시도 - 어떤 코드가 반환됩니까?
 
Rashid Umarov :

객체 함수 설명 읽기

"Delete this object" 명령이 성공적으로 수락되었음을 의미합니다. GetLastError()로 명령 결과를 제어할 수 있습니다. 시도 - 어떤 코드가 반환됩니까?

다음과 같이 코드를 변경했습니다.

int ObjCount = ObjectsTotal(ChartID(),/*0=기본 하위 창*/0,/*모든 개체 유형*/-1);

재설정 마지막 오류();

bool deleteResult=ObjectDelete(ChartID(),"존재하지 않는 개체");

Print(__LINE__,"-",deleteResult," | ObjCount=",ObjCount," | LastError=",GetLastError());

결과는 다음과 같습니다.

2016.12.12 12:38:43.373 Far-TestObjectDelete(EURUSD,H1) 38-사실 | 개체 수=0 | 마지막 오류=0

ERR_SUCCESS

0

작업이 성공적으로 완료되었습니다.


따라서 예를 들어 해당 개체에 액세스할 수 없다는 오류를 반환하지 않습니다. 그러나 MT4에서는 오류를 반환합니다.

 
Farzin Sadeghi :

ERR_SUCCESS

0

작업이 성공적으로 완료되었습니다.


따라서 예를 들어 해당 개체에 액세스할 수 없다는 오류를 반환하지 않습니다. 그러나 MT4에서는 오류를 반환합니다.

확인. 이러한 작업이 비동기식이기 때문에 MQL5에서 이러한 경우 오류가 발생하지 않는다는 것을 알았습니다. 따라서 2가지 옵션이 있습니다.

  • 삭제하기 전에 개체가 있는지 확인 하십시오.
  • 어떤 경우에도 삭제를 시도하고 개체가 없어도 걱정하지 마십시오.
 
Rashid Umarov :

확인. 내가 알아낸 것처럼 이러한 작업은 등시적이기 때문에 MQL5에서는 이러한 경우 오류가 발생하지 않습니다. 따라서 2가지 옵션이 있습니다.

  • 삭제하기 전에 개체가 존재하는지 확인하십시오.
  • 어떤 경우에도 삭제를 시도하고 개체가 없어도 걱정하지 마십시오.
이 방법은 MQL5에서 ObjectDelete 또는 ObjectMove의 검사 결과를 사용하지 않습니다! MQL4에서 사용하던 방식으로 수정하는 것이 좋지 않습니까?
 
Rashid Umarov :

확인. 이러한 작업이 비동기식이기 때문에 MQL5에서 이러한 경우 오류가 발생하지 않는다는 것을 알았습니다. 따라서 2가지 옵션이 있습니다.

  • 삭제하기 전에 개체가 있는지 확인하십시오.
  • 어떤 경우에도 삭제를 시도하고 개체가 없어도 걱정하지 마십시오.

이 경우 어떻게 false를 반환할 수 있습니까?

ObjectDelete() 문서는 다음과 같이 말합니다 .

반환 값

제거에 성공 하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

문서는 더 명확해야 하며 "명령이 수락되면 true"라고 말하지 않습니다.

객체가 삭제인지 확인하려면 삭제 명령 뒤에 객체가 존재하는지 확인해야 합니다. 이는 말이 안 됩니다.

Documentation on MQL5: Object Functions / ObjectDelete
Documentation on MQL5: Object Functions / ObjectDelete
  • www.mql5.com
Object Functions / ObjectDelete - Reference on algorithmic/automated trading language for MetaTrader 5
 
Alain Verleyen :

이 경우 어떻게 false를 반환할 수 있습니까?

ObjectDelete() 문서는 다음과 같이 말합니다 .

문서는 더 명확해야 하며 "명령이 수락되면 true"라고 말하지 않습니다.

그런 식으로 고정됩니다.

반환 값

명령 이 차트 이벤트의 공통 대기열에 있으면 true를 반환하고 , 그렇지 않으면 false를 반환합니다.