시간 문제() - 페이지 7

 
onewithzachy :

도구들. 도구에 대해 알려주세요. 당황하지 마세요. 저는 RaptorUK, dabbler 및 SDC의 댓글을 통해 배웠습니다. 그러니 저희에게 말씀해 주십시오.

:디

귀하의 질문에 대한 답변은 Molanis 인 것 같습니다. . . http://www.molanis.com/forum/viewtopic.php?f=2&t=1450
 
RaptorUK :
귀하의 질문에 대한 답변은 Molanis 인 것 같습니다. . . http://www.molanis.com/forum/viewtopic.php?f=2&t=1450

흥미롭다, 이대로

https://www.mql5.com/en/forum/126224

이야기의 배경을 아는 것이 도움이 됩니다!


나는 모든면에서 너무 많은 화가 났기 때문에이 스레드를 피했습니다. 너무 불필요한 것 같습니다.


응답자가 무슨 일이 일어나고 있는지 알아내기 위해 100% 정확도로 200개의 게시물을 읽을 필요가 없도록 OP가 새 스레드를 시작해야 할 수도 있습니다.

그리고 아마도 모든 사람들이 사람들의 이름을 부르는 것을 멈출 수 있을 것입니다.

 

RaptorUK :

Day(), DayOfWeek() , TimeDay() 및 TimeDayOfWeek() 모두 Straegy Tester(빌드 427)에서 올바르게 작동하는 것 같습니다. . . 코드에서 Day()를 사용하려고 했습니까? 아니면 코드를 빌드해야 합니까? . 코드 작성에 사용하는 것이 무엇이든 DayOfWeek() 를 사용해야 합니까? 첫 번째 Day() 는 0 - 31의 값을 제공하고 두 번째 DayOfWeek() 는 0 - 6의 값을 제공합니다. 일요일은 0입니다.

! 나는 그 코드를 훑어보고 그 문제를 보지 못했고 내 자신의 코드에서 정확한 기능을 사용했습니다. 잘 보았습니다 :-)
 
dabbler :

흥미롭다, 이대로

https://www.mql5.com/en/forum/126224

이야기의 배경을 아는 것이 도움이 됩니다!


나는 모든면에서 너무 많은 화가 났기 때문에이 스레드를 피했습니다. 너무 불필요한 것 같습니다.

그것은이다 . . . 어떤 사람들은 도움이 될 수 없지만, 머리 속에는 자신의 코드는 훌륭하고 MT4는 쓰레기라는 고정관념이 있습니다. . . 나는 OP를 도우려고 노력했지만 그는 분명히 Day()와 DayOfWeek()를 혼동하고 있으며 그의 첫 번째 게시물에서 그것이 그가 그것을 받아들이지 않을 경우라는 것이 명백함에도 불구하고 . . . 어떤 사람들은 도울 수 없습니다.
 
dabbler :
! 나는 그 코드를 훑어보고 그 문제를 보지 못했고 내 자신의 코드에서 정확한 기능을 사용했습니다. 잘 보았습니다 :-)
onewithzachy : 그것도 발견했습니다. . . 그러나 이 스레드의 모든 활동으로 나는 그의 게시물을 놓쳤습니다.
 

우리 모두가 눈치채지 못한 또 다른 사실은 잘 알고 있었지만 이 미친 스레드 중에 아무도 언급하지 않았다는 것을 깨닫지 못했습니다. OP는 다음과 같이 게시했습니다.

Day() == 1 || Day() == 2 || Day() == 3 || Day() == 4 && TimeHour ( TimeCurrent ()) >= 23 &&
 TimeMinute ( TimeCurrent ()) >= 57 || Day() == 5 && TimeHour ( TimeCurrent ()) >= 21 && TimeMinute ( TimeCurrent ()) >= 57

|| 그것들을 모두 묶을 수는 없어 || || || || || && && || && &&를 조건으로 사용하여 일부 대괄호를 사용하지 않고 분해합니다.

그것의 마지막 부분을 보면 :

|| Day() == 5 && TimeHour ( TimeCurrent ()) >= 21 && TimeMinute ( TimeCurrent ()) >= 57
일부 대괄호를 사용하여 나머지 조건과 구분하지 않는 한 이전 부분이 거짓일 때 조건이 참이 될 것이라고는 생각하지 않습니다.
 
SDC :

우리 모두가 눈치채지 못한 또 다른 사실은 잘 알고 있었지만 이 미친 스레드 중에 아무도 언급하지 않았다는 것을 깨닫지 못했습니다. OP는 다음과 같이 게시했습니다.

|| 그것들을 모두 묶을 수는 없어 || || || || || && && || && &&를 조건으로 사용하여 일부 대괄호를 사용하지 않고 분해합니다.

흥미롭게도 나는 그것을 확인 했고 괜찮아 보였습니다. MQL4 및 C(및 기타 모든 컴퓨터 언어)에는 논리 표현식의 정확한 해석을 제공하는 일련의 우선 순위 규칙이 있습니다. 그러나 사용된 도구는 이러한 "복잡한 표현"이 모호하다고 말했습니다! ( 올바르게 구현되지 않은 것으로 읽어야 합니다). WHR은 표현식을 괄호 안에 넣어야 한다고 이전에 게시했습니다. 이것은 코드를 읽을 수 없음을 의미하는 표현식을 따르는 우선 순위 규칙을 알아내기 위해 책을 열어봐야 하기 때문에 어쨌든 분명히 좋은 습관입니다.
 

좋아, 나는 그런 코드를 작성한 적이 없고 내가 생각한 대로 작동하도록 했기 때문에 지금 이것을 확인 해야 했다. 그래서 여기에 그것을 테스트할 간단한 스크립트가 있다.

읽기/테스트/디버그를 쉽게 하기 위해 원래 조건의 각 비교를 정수의 해당 비교로 대체했습니다. 마지막 || 다음 부분을 제외하고는 모두 거짓입니다. || 운영자.

 int start()
  {
//----
   int a,b,c,d,e; 
   a= 1 ;
   b= 2 ;
   c= 3 ;
   d= 4 ;
   e= 1 ;
//----
   if ( a==b || b==c || c==d || d==e && a>=b && c>=d || a==e && b>=a && c>=a )
   Alert ( "condition true" );
   else
   Alert ( "condition false" );
//----
   return ( 0 );
  }

그것은 나에게 알려주는 false 조건을 제공합니다.

|| Day() == 5 && TimeHour ( TimeCurrent ()) >= 21 && TimeMinute ( TimeCurrent ()) >= 57

OP 코드에 배치되었으므로 Day()가 DayOfWeek()로 바뀌더라도 조건이 참이 되지는 않았지만 거기에 괄호를 넣었다면 ....

 int start()
  {
//----
   int a,b,c,d,e; 
   a= 1 ;
   b= 2 ;
   c= 3 ;
   d= 4 ;
   e= 1 ;
//----
   if ( (a==b || b==c || c==d || d==e && a>=b && c>=d) || (a==e && b>=a && c>=a) )
   Alert ( "condition true" );
   else
   Alert ( "condition false" );
//----
   return ( 0 );
  }
이제 작동하고 조건이 참이 됩니다.
 
SDC :

좋아, 나는 그런 코드를 작성한 적이 없고 내가 생각한 대로 작동하도록 했기 때문에 지금 이것을 확인해야 했다. 그래서 여기에 그것을 테스트할 간단한 스크립트가 있다.

잘 하셨어요. 나는 또한 MQL4 우선 순위 규칙을 발견했습니다 ...

https://docs.mql4.com/basis/operations/rules

K & R (2nd ed)과 일치하지 않는 논리 AND보다 높은 논리 OR을 가짐

하지만 당신처럼 나는 이것들을 그다지 많이 사용하지 않습니다. 나는 단지 물건을 괄호로 묶거나 별도의 줄을 사용하여 내 자신의 코드를 이해할 수 있도록 합니다!

 
SDC :
이제 작동하고 조건이 참이 됩니다.

그리고 여기 내 기여 (테스트 스크립트)가 있습니다 ...

 int start(){
   string str = "LOGIC" ;
   for ( int N= 0 ; N< 2 ; N++ ){
       bool bN= (N== 1 );
       string strN= "false AND " ;
       if ( bN )
         strN = "true AND " ;
      
       for ( int M= 0 ; M< 2 ; M++ ){
         bool bM= (M== 1 );
         string strM= "false OR " ;
         if ( bM )
            strM = "true OR " ;

         for ( int P= 0 ; P< 2 ; P++ ){
             bool bP = (P== 1 );
             string strP= "false = " ;
             if ( bP )
               strP = "true = " ;
            
            str = str + "\n" + strN + strM + strP;
             if ( bN && bM || bP )
               str = str + "true" ;
             else
               str = str + "false" ;
         }
      }
   }
   
   Comment ( str );

   return ( 0 );
}

이것은 무엇을 ...


논리적 OR 테스트가 먼저 수행되고(높은 우선 순위) 논리적 AND 테스트가 수행된다는 것을 분명히 보여줍니다. 실제로 MQL4 문서에 나와 있는 것처럼 :-)