당사 팬 페이지에 가입하십시오
- 조회수:
- 32
- 평가:
- 게시됨:
-
이 코드를 기반으로 한 로봇이나 지표가 필요하신가요? 프리랜스로 주문하세요 프리랜스로 이동
최근에 CopyTicksRange()의 기능을 집중적으로 테스트하기 시작했을 때 밀리초를 처리할 때 몇 가지 좋지 않은 문제가 발생했습니다:
- 저는 실제로 CDateTime을 사용하고 싶었는데, 이는 MqlTimeStruct에서 파생되었고 포함된 증분 및 감소 메서드를 사용하여 다양한 시간 단위를 매우 쉽게 편집할 수 있기 때문입니다.
- 동시에 밀리초 시간(1970년 1월 1일 이후 초에 울롱 형식의 1000을 곱한 값)을 원활하게 앞뒤로 변환할 수 있는 방법이 필요했습니다.
여기서 밀리초라는 숫자는 정확한 날짜를 알려주지 않는 매우 모호한 숫자라는 어려움에 부딪혔습니다. 그러나 CDateTime 또는 TimeStruct를 사용하면 모든 시간 단위를 변경하기는 쉽지만 형식이 찢어지고 결과도 매우 불분명합니다. 이 CDateTimeMsc 클래스는 이 문제를 해결하기 위해 만들어졌습니다.
#include <Tools\DateTime.mqh> struct CDateTimeMsc: public CDateTime { public: int msc; // additional variable for msc storage datetime check_datetime; // 편리한 관찰을 위해 약간의 오버헤드가 필요합니다. //--- CDateTimeMsc 메서드 ulong MscTime(void) {return(ulong(double(CDateTime::DateTime()) * 1000) + msc);} void MscTime(ulong a_msc_time); // 입력 (날짜*1000) void Msc(int value); //bool IsNumInt(const int num); void MscDec(int delta = 1); void MscInc(int delta = 1); void SecTime(int a_int_time); ulong SecTime(void); void UpdateDateTime(); // 관찰 변수 check_datetime을 업데이트합니다. void DateTime(datetime a_datetime) {CDateTime::DateTime(a_datetime); UpdateDateTime();} datetime DateTime(void) {return(CDateTime::DateTime());} };
새로운 메서드는 이전 구조의 상속 아래에 삽입되었습니다.
이제 실제로 구조체(구조체/클래스 참조)인 이 클래스는 정확한 시간을 사용할 수 있는 경우 밀리초 단위로도 작동할 수 있습니다.
이제 특정 오버헤드를 발생시키는 추가 변수 "check_datetime"이 정말 필요한지(어떤 사람들에게는 이것이 매우 중요하기 때문에) 논쟁의 여지가 있을 수 있습니다. 하지만 일반적으로 CDateTime 객체는 많이 사용되지 않고 시간, 분, 초 또는 일과 같은 시간 단위를 변경해야 하는 중요한 위치에서 몇 개만 사용된다고 가정했습니다. 또한 증감할 때마다 불필요하게 호출되는 UpDateTime() 메서드에 대해서도 몇 가지 의구심이 들었습니다.
그러나 대체로 처리 요소가 주요 초점이었습니다.
테스트
정확한 날짜를 알고 싶은 경우 더 이상 추가 datetime 변수로 시간을 쿼리할 필요 없이 "check_datetime" 변수를 감독 아래에 배치하면 됩니다(위의 TestEA 참조).
밀리초 시간이 자동으로 날짜/시간 형식으로 변환되었습니다.
MetaQuotes Ltd에서 독일어로 번역함.
원본 기고글: https://www.mql5.com/de/code/48156
