mql5 언어의 특징, 미묘함 및 작업 방법 - 페이지 244

 
Alexey Viktorov #:

"어떤 기간에"란 무슨 뜻인가요?이 함수는 요일만 반환합니다. 마침표가 무슨 상관이 있나요? 아무 시간이나 넣으면 요일이 나옵니다.

생년월일을 입력하면 태어난 요일을 반환합니다.

또는 촛불 시간으로 요일을 확인할 수도 있습니다.


기간 != 기간. 위의 함수는 일부 날짜 범위에 대해 올바른 요일을 반환한 다음 잘못된 요일을 반환합니다. 위 함수에서는 괄호가 실제로 사라졌으므로 더 주의해야 합니다... ))))))))
 
Alexey Viktorov #:

함수의 전체 코드도 보여드렸습니다. 다시요:

uchar WhatWeekDay(datetime t)
 {
  return uchar(t/(PeriodSeconds(PERIOD_D1))+4)%7;
 }

하지만 좋은 지적에 동의합니다. 아마도 Nikolai는 기억에서 글을 쓰고 부정확하게 만들었을 것입니다. 그러나 그것이 작동하지 않는다고 말하는 것은 옳지 않습니다.

세미온 세미니치!... 글쎄, 어떻게?... 글쎄, 작동하지만 항상 그런 것은 아닙니다 ... ))))))))

 
Mikola_2 #:

아니요, 작동하지 않습니다. (((

네, 죄송합니다. 제가 어떻게 망쳤는지 모르겠네요. 고마워요.

물론 그게 올바른 방법입니다:

uchar WhatWeekDay(datetime t) {
   return uchar((t/(24*60*60)+4 )%7);
}
 
Alexey Viktorov #:

함수의 전체 코드도 보여드렸습니다. 다시요:

하지만 좋은 지적에 동의합니다. 아마도 Nikolai는 기억에서 글을 쓰고 부정확하게 만들었을 것입니다. 그러나 그것이 작동하지 않는다고 말하는 것은 옳지 않습니다.

void OnStart()
  {
   for(int i1=0; i1<100; i1++)
      Print(WhatWeekDay(i1*7*24*60*60));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
uchar WhatWeekDay(datetime t)
  {
   return uchar(t/(PeriodSeconds(PERIOD_D1))+4)%7;
  }

항상 작동하는 것은 아니며 테스트 코드입니다. 결과입니다:

2024.02.10 17:51:47.584 2 (EURUSD,H1)   4
2024.02.10 17:51:47.584 2 (EURUSD,H1)   4
2024.02.10 17:51:47.584 2 (EURUSD,H1)   4
2024.02.10 17:51:47.584 2 (EURUSD,H1)   4
2024.02.10 17:51:47.584 2 (EURUSD,H1)   4
2024.02.10 17:51:47.584 2 (EURUSD,H1)   4

... 
2024.02.10 17:51:47.584 2 (EURUSD,H1)   4
2024.02.10 17:51:47.584 2 (EURUSD,H1)   4
2024.02.10 17:51:47.584 2 (EURUSD,H1)   4
2024.02.10 17:51:47.584 2 (EURUSD,H1)   4
2024.02.10 17:51:47.584 2 (EURUSD,H1)   0
2024.02.10 17:51:47.584 2 (EURUSD,H1)   0
2024.02.10 17:51:47.584 2 (EURUSD,H1)   0

... 
2024.02.10 17:51:47.584 2 (EURUSD,H1)   0
2024.02.10 17:51:47.584 2 (EURUSD,H1)   0
2024.02.10 17:51:47.584 2 (EURUSD,H1)   0
2024.02.10 17:51:47.584 2 (EURUSD,H1)   0
2024.02.10 17:51:47.584 2 (EURUSD,H1)   3
2024.02.10 17:51:47.584 2 (EURUSD,H1)   3
2024.02.10 17:51:47.584 2 (EURUSD,H1)   3
...

사방에 네 개가 있어야 합니다.

다시 말하지만, 화면이 올바릅니다 :)
 
(uchar)((t/86400+4)%7)
 
amrali #
(uchar)((t/86400+4)%7)
😂
24*60*60 컴파일러는 프리컴파일 단계에서도 24*60*60을 86400으로 변환합니다.
따라서 성능에는 영향을 미치지 않습니다.
로직 개념의 관점에서 24*60*60 레코드가 더 가독성이 높을 뿐입니다.
 

트레이딩, 자동매매 시스템 및 트레이딩 전략 테스트 포럼

mql5 언어의 특징, 미묘함 및 작업 방법

알리악산드르 흐리신 , 2024.02.10 15:52

void  OnStart  () 
  { 
   for  ( int  i1= 0  ; i1< 100  ; i1++)
        Print  (WhatWeekDay(i1* 7  * 24  * 60  * 60  )); 
  } 
//+------------------------------------------------ - -------------------+ 
//| | 
//+------------------------------------------------ - -------------------+ 
uchar  WhatWeekDay( datetime  t) 
  { 
   return  uchar  (t/( PeriodSeconds  ( PERIOD_D1  )) + 4  )% 7  ; 
  } 

2 * 2 = 4가 아니라 캐스트에 관한 것입니다 😉.

uchar 캐스트는 모듈로 256입니다.

위는 (a % 256) % 7을 의미하며, 이는 (a % 7) % 256과 다릅니다.
 
amrali #:

2 * 2 = 4가 아닌 캐스트에 관한 것입니다 😉.

uchar 캐스트는 모듈로 256입니다.

위는 (a % 256) % 7을 의미하며, 이는 (a % 7) % 256과 다릅니다.
h ttps://www.mql5.com/ru/forum/170952/page243#comment_52244665
여기서 뭐가 잘못됐나요?
이전 게시물을 보고 너무 게을러서 앞을 보지 못했을 것입니다.
 
Nikolai Semko #:
이게 무슨 문제인가요?

그거요:

Print(uchar(257) % 7);   // 1
Print(257 % 7);          // 5
 
trader6_1 #:

그것에 대해:

오 문제

위 게시물 참조


사유: