동일한 동작을 유발하는 조건에서 많은 "또는"(||)을 이스케이프할 수 있습니까? - 페이지 7

 

나는 오늘 얼마나 유익한 밤을 보냈습니까! 잠을 자는 동안 여기에서 너무 많은 흥미로운 것들을 받았고, 당신에게 무한한 감사를 드립니다! 그리고 당신의 아침은 저녁보다 더 현명했습니다!

항상 그렇듯이 제안된 모든 것에 대한 피상적인 검토는 더 많은 질문을 제기하지만, 지금은 단 하나의 Action()으로 마지막 표현을 만드는 것이 가능한지 알고 싶습니다. 그것은 꽤 광범위합니다:

 if (!A) if (!B) if (!C) if (!D)
else Action();


이게 더 효율적일 수 있을 것 같습니다. 사실, 마지막 조건만 참이거나 내가 틀렸다면 모든 조건을 확인하는 것을 배제하지 않습니다.

어떻게 생각하나요?

 
FAQ :
누구든지 "빌어먹을 MQL4"를 좋아하지 않는 사람은 여기에서 달릴 수 있고 또 갈 것입니다. 그가 여기서 무엇을 하고 있는지 명확하지 않기 때문입니다. 계정의 모든 장점과 고대에도 불구하고.
초심자에게 설명해주세요!
 
Meat :
일반적으로 가장 빠른 옵션은 다음과 같습니다.

그러나 else result= false 줄을 첫 번째 줄과 결합하는 것이 더 좋으며 실제로 속도에 영향을 미치지 않습니다. 그리고 일반적으로 A, B, C 및 D에 간단한 조건(수학적 함수 및 기타 종소리 호출 없이 최소한의 산술 연산 포함)이 포함되어 있으면 그러한 최적화에서 많은 성능 이득을 얻지 못할 것입니다( 물론, 이 구성은 수천만 번이 아니라 당신에 의해 실행됩니다). 그러나 코드 혼란은 상당할 수 있습니다.

나는 이미 한 지점에서 이것에 대해 모든 것이 합리적으로 접근해야 한다고 썼습니다. 어떤 이유에서인지 코드에 더 중요한 위치가 많이 있는 것 같으며, 최적화하면 성능이 크게 향상됩니다. 기본 알고리즘부터 시작해야 합니다. 대부분의 초보자는 TS 또는 미결 주문과 관련된 모든 조건의 모든 틱에 대해 멍청한 확인을 합니다. 따라서 브레이크. 대부분의 경우 경계 조건만 확인하면 충분하지만, 예를 들어 높고 낮음이 특정 값에 도달하거나 새로운 막대가 나타납니다. 그리고 그 후에야 추가 확인을 수행하십시오.

게다가 리소스 집약적인 계산을 사용하는 경우 이러한 계산을 DLL로 전송하는 것에 대해 생각할 필요가 있습니다. 그렇지 않으면, 빌어먹을 MQL4에서 13분 동안 앉아서 기다리는 것은 (비록 2-3분 안에 동일한 결과를 얻을 수 있지만) 결함이 있습니다. :)


비록 나는 첫 번째 부분에 완전히 동의하지만.
 
icas :

그래서 더 빠릅니다.

다음과 같은 이야기를 기억했습니다.

"회사 이사회에서 2가지 질문이 있었습니다.

1. 싱크로파소트론을 구축하기로 결정.

2. 직원들을 위한 자전거 거치대를 만들기로 결정.

첫 번째 질문에 대한 토론은 1분 동안 진행되었으며,

2차 토론회는 2시간 넘게 이어졌다.

예, 확실히 ... 자전거 주차에 대해 ...
 
borilunad :

나는 오늘 얼마나 유익한 밤을 보냈습니까! 잠을 자는 동안 여기에서 너무 많은 흥미로운 것들을 받았고, 당신에게 무한한 감사를 드립니다! 그리고 당신의 아침도 저녁보다 현명했습니다!

항상 그렇듯이 제안된 모든 것에 대한 피상적인 검토는 더 많은 질문을 제기하지만, 지금은 단 하나의 Action()으로 마지막 표현을 만드는 것이 가능한지 알고 싶습니다. 그것은 꽤 광범위합니다:

이게 더 효율적일 수 있을 것 같습니다. 사실, 마지막 조건만 참이거나 내가 틀렸다면 모든 조건을 확인하는 것을 배제하지 않습니다.

어떻게 생각하나요?

아니요, 그런 식으로 작동하지 않습니다. 첫째, 세미콜론(즉 , 빈 문 )일지라도 if() 뒤에 무언가가 있어야 합니다. 둘째, else가 참조하려는 if 중 무엇입니까? 후자에 대해서만(당신이 쓴 대로), A, B, C가 거짓인 경우 조건 D가 참인 경우에만 Action이 실행됩니다. 논리를 명확하게 볼 수 있도록 항상 중괄호를 사용하는 것이 좋습니다.

 
FAQ :

고맙습니다! 나는 지금 DLL과 다른 것들을 사용하는 것을 피하고 있습니다.

나는 이 기회를 통해 모든 포지션이 M1에서 새로운 바에서 열리지만 다른 모든 포지션은 매 틱마다 작동한다고 Alexey(Meat)에게 대답할 수 있습니다. 또한 필요한 기능을 많이 사용합니다(처음에 모든 것을 확인할 때마다 코드가 정말 무거워집니다). 수학자가 제안한 지수로 대체하려고 시도할 MathPow()가 하나 있습니다. 따라서 수정 및 폐쇄에 필요한 모든 검색이 필요합니다. 그것 없이 어떻게?

 
주문의 제어 및 재계산에 주의하십시오. 이것은 Expert Advisors가 일반적으로 가장 많이 가지고 있는 것입니다.
 
alsu :

아니요, 그런 식으로 작동하지 않습니다. 첫째, 세미콜론(즉, 빈 문)일지라도 if() 뒤에 무언가가 있어야 합니다. 둘째, else는 if 중 무엇을 참조하려고 합니까? 후자에 대해서만(당신이 쓴 대로), A, B, C가 거짓인 경우 조건 D가 참인 경우에만 Action이 실행됩니다. 논리를 명확하게 볼 수 있도록 항상 중괄호를 사용하는 것이 좋습니다.

감사해요! 그러나 단 하나의 Action();이 필요합니다! 하지만 아직 방법을 모르겠습니다! 말씀해 주시겠어요?

 
FAQ :
주문의 제어 및 재계산에 주의하십시오. 이것은 Expert Advisors가 일반적으로 가장 많이 가지고 있는 것입니다.
그러나 그들은 불가피합니다. 그렇지 않으면 실수가 있을 것입니다!
 

내 프로그램에서 많은 if-s와 함께 그러한 구성을 사용하는 반면 처음에는 다른 것보다 더 자주 false를 제공하는 조건을 넣습니다.

 if (A>B)
{   if (C>= 10 )
   {   if (D<= 5 )
      {   if (E= 1 )
         Action:
      }
   }
}
그리고 if-s를 많이 확인해야 하는 경우 다음과 같습니다.
 if (A>B || N<M)
{   if (C>= 10 || P< 100 )
   {   if (D<= 5 || R> 1 )
      {   if (E= 1 || S!= 0 )
         Action:
      }
   }
}