초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 495

 

첫 번째 경우에 나는 그것을 알아 냈습니다. 나는 두 가지 비교를 대괄호 안에 넣고 맹세하지 않습니다. 실제로 논리적 오류가 있었습니까? 즉. 비교 결과를 "또는"으로 대체할 수 있습니까?

두 번째 표현에 대한 열린 질문이 남아 있습니다. 거기에 무엇이 잘못되었습니까? 아이디어가 있습니까?

 
-Aleks- :

첫 번째 경우에 나는 그것을 알아 냈습니다. 두 가지 비교를 대괄호 안에 넣고 맹세하지 않습니다. 실제로 논리적 오류가 있었습니까? 즉. 비교 결과를 "또는"으로 대체할 수 있습니까?

두 번째 표현에 대한 열린 질문이 남아 있습니다. 거기에 무엇이 잘못되었습니까? 아이디어가 있습니까?

새 mql4에서 상태 확인이 완전히 수행되지 않는다는 점을 기억해야 합니다. 즉, 조건에서

if(Low[X]>PriceBuy && High[X]>PriceBuy ||
               Low[X]<PriceBuy && High[X]<PriceBuy)

Low[x]가 PriceBuy보다 크지 않으면 확인이 더 이상 수행되지 않습니다. 이는 오류 설명에 보고됩니다. 따라서 첫 번째 쌍이 대괄호로 묶인 경우 이 쌍이 충족되지 않으면 두 번째 조건 쌍이 확인됩니다.

두 번째 질문입니다.

for( calc_day;calc_day>0; calc_day--)

calc_day가 뭔가요??? 아마도 0보다 작습니까? 컴파일러는 논리에 무엇이 있는지 알지 못합니다... 그래서 가능한 비효율적인 루프에 대해 경고합니다.

 
Alexey Viktorov :

새 mql4에서 상태 확인이 완전히 수행되지 않는다는 점을 기억해야 합니다. 즉, 조건에서

if(Low[X]>PriceBuy && High[X]>PriceBuy ||
               Low[X]<PriceBuy && High[X]<PriceBuy)

Low[x]가 PriceBuy보다 크지 않으면 확인이 더 이상 수행되지 않습니다. 이는 오류 설명에 보고됩니다. 따라서 첫 번째 쌍이 대괄호로 묶인 경우 이 쌍이 충족되지 않으면 두 번째 조건 쌍이 확인됩니다.

답변 해주셔서 감사합니다!

놀랐습니다. 시각적으로 논리가 항상 올바르게 작동했기 때문에 흠 ...


알렉세이 빅토로프 :

두 번째 질문입니다.

for( calc_day;calc_day>0; calc_day--)

calc_day가 뭔가요??? 아마도 0보다 작습니까? 컴파일러는 논리에 무엇이 있는지 알지 못합니다... 그래서 가능한 비효율적인 루프에 대해 경고합니다.

숫자 calc_day는 항상 0보다 크며, 그렇지 않으면 코드가 호출되지 않습니다.
 
-Aleks- :

답변 해주셔서 감사합니다!

놀랐습니다. 시각적으로 논리가 항상 올바르게 작동했기 때문에 흠 ...

6** 빌드 이전에는 전체 조건 체인이 확인되고 모든 것이 작동했지만 지금은 모든 것이 변경되었습니다. 예, 이 경우 이전 빌드에서는 조건이 모호합니다. 어떻게 의도되었습니까?

if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )

그 쯤?

if(Low[X]>PriceBuy && ( High[X]>PriceBuy) || (Low[X]<PriceBuy ) && High[X]<PriceBuy)

인간의 두뇌는 그것을 알아낼 수 있지만 컴파일러가 할 일은 무엇입니까? 그는 뇌가 없다...

-알렉스 - :

숫자 calc_day는 항상 0보다 크며, 그렇지 않으면 코드가 호출되지 않습니다.

컴파일러에게 알려주십시오 ...

 
Alexey Viktorov :

6** 빌드 이전에는 전체 조건 체인이 확인되고 모든 것이 작동했지만 지금은 모든 것이 변경되었습니다. 예, 이 경우 이전 빌드에서는 조건이 모호합니다. 어떻게 의도되었습니까?

if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )

그 쯤?

if(Low[X]>PriceBuy && ( High[X]>PriceBuy) || (Low[X]<PriceBuy ) && High[X]<PriceBuy)

인간의 두뇌는 그것을 알아낼 수 있지만 컴파일러가 할 일은 무엇입니까? 그는 뇌가 없다...


컴파일러에게 알려주십시오 ...

설득력있게 - 나는 더 경계 할 것입니다.

컴파일러에게 어떻게 말합니까? 쓰되 이해하라

if ( calc_day<0 )   calc_day= calc_day*(-1);

 
Alexey Viktorov :

6** 빌드 이전에는 전체 조건 체인이 확인되고 모든 것이 작동했지만 지금은 모든 것이 변경되었습니다. 예, 이 경우 이전 빌드에서는 조건이 모호합니다. 어떻게 의도되었습니까?

if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )

그 쯤?

if(Low[X]>PriceBuy && ( High[X]>PriceBuy) || (Low[X]<PriceBuy ) && High[X]<PriceBuy)

인간의 두뇌는 그것을 알아낼 수 있지만 컴파일러가 할 일은 무엇입니까? 그는 뇌가 없다...


컴파일러에게 알려주십시오 ...

가능한 오류에 대한 연산자 우선 순위를 확인하십시오. 괄호를 사용하여 우선 순위를 명확히 하는 것은 실수가 아닙니다. 이것은 경고입니다. 오래된 코드에서 찾았습니다.

컴파일러보다 사용자를 위해 추가했습니다. 컴파일러는 작업의 우선 순위를 따릅니다 . 모든 것이 명확합니다. &&의 우선순위는 ||의 우선순위보다 높으므로 다음과 같이 괄호를 올바르게 배치하십시오.

if( (낮은[X]>PriceBuy && High[X]>PriceBuy) || (낮은[X]<PriceBuy && High[X]<PriceBuy) )

upd: 이 경우 우선 순위는 MT4와 MT5 모두 동일합니다.

 
-Aleks- :

설득력있게 - 나는 더 경계 할 것입니다.

컴파일러에게 어떻게 말합니까? 쓰되 이해하라

if ( calc_day<0 )   calc_day= calc_day*(-1);

 for ( calc_day = 365 ; calc_day > 0 ; calc_day --)
그래서 시도
 
Alexey Kozitsyn :

가능한 오류에 대한 연산자 우선 순위를 확인하십시오. 괄호를 사용하여 우선 순위를 명확히 하는 것은 실수가 아닙니다. 이것은 경고입니다. 오래된 코드에서 찾았습니다.

컴파일러보다 사용자를 위해 추가했습니다. 컴파일러는 작업의 우선 순위를 따릅니다 . 모든 것이 명확합니다. &&의 우선순위는 ||의 우선순위보다 높으므로 다음과 같이 괄호를 올바르게 배치하십시오.

if( (낮은[X]>PriceBuy && High[X]>PriceBuy) || (낮은[X]<PriceBuy && High[X]<PriceBuy) )

upd: 이 경우 우선 순위는 MT4와 MT5 모두 동일합니다.

글쎄요, 본질적으로 경고는 오류가 아닙니다. 그러나 초기 변형 if( Low[X]>PriceBuy && High[X]>PriceBuy || Low[X]<PriceBuy && High[X]<PriceBuy )는 어떻게 작동합니까? ? 아니면 몇 개의 브래킷을 설치하기 위해 손이 부러질까요?

 
-Aleks- :

설득력있게 - 나는 더 경계 할 것입니다.

컴파일러에게 어떻게 말합니까? 쓰되 이해하라

if ( calc_day<0 )   calc_day= calc_day*(-1);

 for ( int i=calc_day; i> 0 ; i--) {}
 
Alexey Viktorov :

글쎄요, 본질적으로 경고는 오류가 아닙니다. 그러나 초기 변형 if( Low[X]>PriceBuy && High[X]>PriceBuy || Low[X]<PriceBuy && High[X]<PriceBuy )는 어떻게 작동합니까? ? 아니면 몇 개의 브래킷을 설치하기 위해 손이 부러질까요?

제가 위에 쓴 방법대로 하면 됩니다.

그리고 컴파일러는 사용자에게 게으르지 않도록 경고하고 명확하지 않은 가능한 오류를 피하기 위해 대괄호를 넣습니다.

사유: