거래 로봇을 무료로 다운로드 하는 법을 시청해보세요
당사를 Telegram에서 찾아주십시오!
당사 팬 페이지에 가입하십시오
스크립트가 흥미로우신가요?
그렇다면 링크 to it -
하셔서 다른 이들이 평가할 수 있도록 해보세요
스크립트가 마음에 드시나요? MetaTrader 5 터미널에서 시도해보십시오
라이브러리

High-Performance Time Functions (TimeUtils) - MetaTrader 5용 라이브러리

조회수:
123
평가:
(14)
게시됨:
TimeUtils.mqh (124.27 KB) 조회
basic.mq5 (2.38 KB) 조회
advanced.mq5 (27.74 KB) 조회
MQL5 프리랜스 이 코드를 기반으로 한 로봇이나 지표가 필요하신가요? 프리랜스로 주문하세요 프리랜스로 이동

이 라이브러리에는 시간 변수를 처리하는 80개 이상의 다양한 함수가 포함되어 있습니다. 주요 목표는 고성능 시간 함수를 제공하는 것입니다. 성능 모드(#define을 통해 컴파일 시 제어할 수 있음)는 기본적으로 비활성화되어 있습니다. 이 모드 없이도 라이브러리를 정상적으로 포함할 수 있으므로 프로젝트에 라이브러리를 포함할 필요는 없습니다.


TIMEUTILS_PERFORMANCE_MODE

선택적으로, 컴파일 시 #include 앞에 #defines를 통해 성능 모드를 켤 수 있습니다:

// 라이브러리에 성능 모드 활성화
#define  TIMEUTILS_PERFORMANCE_MODE
#include "TimeUtils.mqh"

이렇게 하면 MQL의 기본 제공 TimeToStructStructToTime 함수에 대한 모든 호출이 보다 효율적인 대체 함수로 리디렉션됩니다.

타임툴스_성능 모드를 사용하거나 사용하지 않고 "performance_mode.mq5" 스크립트를 컴파일하여 머신에서 속도 차이를 확인할 수 있습니다. 이는 시간 관련 작업이 많거나 많은 작업을 수행하는 고성능 프로그램에 유용합니다(예: 거래 주 시작 시 H1 바의 모든 호가 기록을 스캔하거나 기타 통계를 수집하는 경우).


라이브러리에 있는 모든 함수 목록:

함수 이름은 자명해야 하며, 특정 함수에 대한 간단한 설명은 TimeUtils.mqh 파일에서 찾을 수 있습니다.

//+==================================================================+
//| 구성 요소에서 날짜 시간 만들기|
//+==================================================================+
datetime CreateDateTime(
   const int year,           // 년도
   const int mon,            // 월
   const int day,            // 일
   const int hour = 0,       // 시간
   const int min = 0,        // 분
   const int sec = 0         // 초
   )
datetime CreateDateTime(MqlDateTime&  dt_struct);  // StructToTime()의 빠른 대안

//+==================================================================+
//| 컴포넌트에 날짜 시간 나누기|
//+==================================================================+
bool TimeToStructFast(
   datetime      dt,         // 변환할 날짜 값
   MqlDateTime&  dt_struct   // 값 채택을 위한 구조
   )

//+==================================================================+
//| 날짜 시간의 구성 요소를 추출합니다: 일요일, yyyy.mm.dd hh:mm:ss |
//| Get() 단위|
//+==================================================================+
int GetSecond(datetime t)
int GetMinute(datetime t)
int GetHour(datetime t)
int GetDay(datetime t)
int GetMonth(datetime t)
int GetYear(datetime t)

//+==================================================================+
//| Day() 숫자|
//+==================================================================+
int DayOfWeek(datetime t)
int DayOfYear(datetime t)
int DayIndex(datetime t)

//+==================================================================+
//| 주() 숫자|
//+==================================================================+
int WeekOfMonth(const datetime t, bool StartsOnMonday = false)
int WeekOfYear(const datetime t, bool StartsOnMonday = false)
int WeekIndex(datetime t, bool StartsOnMonday = false)

//+==================================================================+
//| StartOf() 단위|
//+==================================================================+
datetime StartOfMinute(datetime t)
datetime StartOfHour(datetime t)
datetime StartOfDay(datetime t)
datetime StartOfWeek(datetime t, bool StartsOnMonday = false)
datetime StartOfMonth(datetime t)
datetime StartOfYear(datetime t)

//+==================================================================+
//| EndOf() 단위|
//+==================================================================+
datetime EndOfMinute(datetime t)
datetime EndOfHour(datetime t)
datetime EndOfDay(datetime t)
datetime EndOfWeek(datetime t, bool StartsOnMonday = false)
datetime EndOfMonth(datetime t)
datetime EndOfYear(datetime t)

//+==================================================================+
//| SecsElapsedOf() 단위|
//+==================================================================+
int SecsElapsedOfMinute(datetime t)
int SecsElapsedOfHour(datetime t)
int SecsElapsedOfDay(datetime t)
int SecsElapsedOfWeek(datetime t, bool StartsOnMonday = false)
int SecsElapsedOfMonth(datetime t)
int SecsElapsedOfYear(datetime t)

//+==================================================================+
//| RoundTo() / Nearest() 단위|
//+==================================================================+
datetime RoundToMinute(datetime t)
datetime RoundToHour(datetime t)
datetime RoundToDay(datetime t)
datetime RoundToWeek(datetime t, bool StartsOnMonday = false)

//+==================================================================+
//| CeilTo() / Next() 단위|
//+==================================================================+
datetime CeilToMinute(datetime t)
datetime CeilToHour(datetime t)
datetime CeilToDay(datetime t)
datetime CeilToWeek(datetime t, bool StartsOnMonday = false)

//+==================================================================+
//| Next() 평일|
//+==================================================================+
datetime NextWeekday(datetime t, ENUM_DAY_OF_WEEK weekday = SUNDAY)
datetime NextSunday(datetime t)
datetime NextMonday(datetime t)
datetime NextTuesday(datetime t)
datetime NextWednesday(datetime t)
datetime NextThursday(datetime t)
datetime NextFriday(datetime t)
datetime NextSaturday(datetime t)

//+==================================================================+
//| 이전() 평일|
//+==================================================================+
datetime PreviousWeekday(datetime t, ENUM_DAY_OF_WEEK weekday = SUNDAY)
datetime PreviousSunday(datetime t)
datetime PreviousMonday(datetime t)
datetime PreviousTuesday(datetime t)
datetime PreviousWednesday(datetime t)
datetime PreviousThursday(datetime t)
datetime PreviousFriday(datetime t)
datetime PreviousSaturday(datetime t)

//+==================================================================+
//| Nth() 해당 월의 요일|
//+==================================================================+
datetime FirstWeekdayOfTheMonth(datetime t, ENUM_DAY_OF_WEEK weekday = SUNDAY)
datetime LastWeekdayOfTheMonth(datetime t, ENUM_DAY_OF_WEEK weekday = SUNDAY)
datetime NthWeekdayOfTheMonth(datetime t, int Nth, ENUM_DAY_OF_WEEK weekday = SUNDAY)

//+==================================================================+
//| Add() 단위|
//+==================================================================+
datetime AddSeconds(datetime t, int amount)
datetime AddMinutes(datetime t, int amount)
datetime AddHours(datetime t, int amount)
datetime AddDays(datetime t, int amount)
datetime AddBusinessDays(datetime t, int amount)
datetime AddWeeks(datetime t, int amount)
datetime AddMonths(datetime t, int amount)
datetime AddYears(datetime t, int amount)

//+==================================================================+
//| Sub() 단위|
//+==================================================================+
datetime SubSeconds(datetime t, int amount)
datetime SubMinutes(datetime t, int amount)
datetime SubHours(datetime t, int amount)
datetime SubDays(datetime t, int amount)
datetime SubBusinessDays(datetime t, int amount)
datetime SubWeeks(datetime t, int amount)
datetime SubMonths(datetime t, int amount)
datetime SubYears(datetime t, int amount)

//+==================================================================+
//| DifferenceIn() 단위|
//+==================================================================+
int DifferenceInCalendarDays(datetime beginTime, datetime endTime)
int DifferenceInBusinessDays(datetime beginTime, datetime endTime)
int DifferenceInCalendarWeeks(datetime beginTime, datetime endTime, bool StartsOnMonday = false)
int DifferenceInCalendarMonths(datetime beginTime, datetime endTime)

//+==================================================================+
//| IsSame() 단위|
//+==================================================================+
bool IsSameMinute(datetime t1, datetime t2)
bool IsSameHour(datetime t1, datetime t2)
bool IsSameDay(datetime t1, datetime t2)
bool IsSameWeek(datetime t1, datetime t2, bool StartsOnMonday = false)
bool IsSameMonth(datetime t1, datetime t2)
bool IsSameYear(datetime t1, datetime t2)

//+==================================================================+
//| IsCurrent() 단위|
//+==================================================================+
bool IsCurrentMinute(datetime t)
bool IsCurrentHour(datetime t)
bool IsCurrentWeek(datetime t, bool StartsOnMonday = false)
bool IsCurrentMonth(datetime t)
bool IsCurrentYear(datetime t)
bool IsToday(datetime t)
bool IsTomorrow(datetime t)
bool IsYesterday(datetime t)

//+==================================================================+
//| 기타|
//+==================================================================+
bool IsLeapYear(int year)
int  DaysInMonth(int year, int month)
datetime GetNthWeekdayInYearMonth(iYear, iMonth, Nth, weekday = SUNDAY)
datetime GetNthSundayInYearMonth(iYear, iMonth, Nth)

//+==================================================================+
//| 시간을 문자열로 포맷|
//+==================================================================+
string t2s(datetime t, const int mode = TIME_DATE | TIME_MINUTES)
string SecondsToString(int seconds)
string TimeFormat(datetime t, string format = "YYYY.MM.DD hh:mm")


사용 가능한 모든 시간 형식 목록:

//+------------------------------------------------------------------+
//| 전달된 토큰 문자열에 따라 형식이 지정된 시간을 가져옵니다. |
//| 사용 가능한 모든 형식 목록:|
//| 포맷 출력 설명|
//| ------ ---------------- ------------------------------------- |
//| YY 18두 자리 연도 |
//| 2018년 네 자리 숫자 연도|
//| M 1-121부터 시작하는 월 |
//| MM 01-12 월, 2자리 |
//| MMM 1월~12월 약칭 월 이름, 3글자 |
//| MMMM 1월~12월 전체 월 이름|
//| D 1-31월의 요일 |
//| DD 01-31월의 요일, 2자리 |
//| DDD 일-토 요일의 짧은 이름 |
//| DDDD 일요일-토요일 요일 이름 |
//| h 0-23 시간|
//| hh-23 시간, 2자리 |
//| H 1-12시간, 12시간 시계 |
//| HH 01-12 시간, 12시간 시계, 2자리 | |
//| m 0-59 분|
//| mm 00-59 분, 2자리 |
//| s 0-59 두 번째|
//| ss 00-59 두 번째, 2자리 |
//| 오전 오후|
//| 오전 오후|
//+------------------------------------------------------------------+
//| 샘플 형식:|
//| "YYYY.MM.DD hh:mm" // "2024.12.08 22:05"(기본값) |
//| "DDD, YYYY.MM.DD hh:mm:ss" // "Sun, 2024.12.08 22:05:21" | "Sun, 2024.12.08 22:05:21
//| "D MMMM YYYY, HH:mm a" // "2024년 12월 8일, 오후 10시 5분" |
//| "dd/mm/yyyy" // "08/12/2024"|
//+------------------------------------------------------------------+
string TimeFormat(const datetime t, const string format = "YYYY.MM.DD hh:mm");


첨부된 두 개의 스크립트 "basic.mq5" 및 "advanced.mq5"는 기본 및 고급 사용 예제를 보여줍니다.

"advanced.mq5" 스크립트의 출력 예시:

/*
 출력 예시:

 1. CreateDateTime(2022, 03, 25) = 2022.03.25 00:00:00
 [년] [월] [일] [시] [분] [초] [요일_주] [일_년]
 [0] 2024 12 18 17 27 25 3 352
 2. t2s(t, TIME_DATE|TIME_SECONDS) = Wed, 2024.12.18 18:27:25
 3. GetYear(t) = 2024
 4. GetMonth(t) = 12
 5. GetDay(t) = 18
 6. GetHour(t) = 18
 7. GetMinute(t) = 27
 8. GetSecond(t) = 25
 9. DayOfWeek(t) = 3
 10. DayOfYear(t) = 352
 11. DayIndex(t) = 20075
 12. WeekOfMonth(t) = 3
 13. WeekOfYear(t) = 51
 14. WeekIndex(t) = 2868
 15. WeekOfMonth(t, true) = 4
 16. WeekOfYear(t, true) = 51
 17. WeekIndex(t, true) = 2868
 18. StartOfMinute(t) = 2024.12.18 18:27:00
 19. StartOfHour(t) = 2024.12.18 18:00:00
 20. StartOfDay(t) = 2024.12.18 00:00:00
 21. StartOfWeek(t) = 2024.12.15 00:00:00
 22. StartOfWeek(t, true) = 2024.12.16 00:00:00
 23. StartOfMonth(t) = 2024.12.01 00:00:00
 24. StartOfYear(t) = 2024.01.01 00:00:00
 25. EndOfMinute(t) = 2024.12.18 18:27:59
 26. EndOfHour(t) = 2024.12.18 18:59:59
 27. EndOfDay(t) = 2024.12.18 23:59:59
 28. EndOfWeek(t) = 2024.12.21 23:59:59
 29. EndOfWeek(t, true) = 2024.12.22 23:59:59
 30. EndOfMonth(t) = 2024.12.31 23:59:59
 31. EndOfYear(t) = 2024.12.31 23:59:59
 32. SecsElapsedOfMinute(t) = 25
 33. SecsElapsedOfHour(t) = 1645
 34. SecsElapsedOfDay(t) = 66445
 35. SecsElapsedOfWeek(t) = 325645
 36. SecsElapsedOfWeek(t, true) = 239245
 37. SecsElapsedOfMonth(t) = 1535245
 38. SecsElapsedOfYear(t) = 30479245
 39. RoundToMinute(t) = 2024.12.18 18:27:00
 40. RoundToHour(t) = 2024.12.18 18:00:00
 41. RoundToDay(t) = 2024.12.19 00:00:00
 42. RoundToWeek(t) = 2024.12.22 00:00:00
 43. RoundToWeek(t, true) = 2024.12.16 00:00:00
 44. CeilToMinute(t) = 2024.12.18 18:28:00
 45. CeilToHour(t) = 2024.12.18 19:00:00
 46. CeilToDay(t) = 2024.12.19 00:00:00
 47. CeilToWeek(t) = 2024.12.22 00:00:00
 48. CeilToWeek(t, true) = 2024.12.23 00:00:00
 49. NextSunday(t) = 2024.12.22 00:00:00
 50. NextMonday(t) = 2024.12.23 00:00:00
 51. NextTuesday(t) = 2024.12.24 00:00:00
 52. NextWednesday(t) = 2024.12.25 00:00:00
 53. NextThursday(t) = 2024.12.19 00:00:00
 54. NextFriday(t) = 2024.12.20 00:00:00
 55. 다음토요일(t) = 2024.12.21 00:00:00
 56. 이전 일요일(t) = 2024.12.15 00:00:00
 57. PreviousMonday(t) = 2024.12.16 00:00:00
 58. PreviousTuesday(t) = 2024.12.17 00:00:00
 59. PreviousWednesday(t) = 2024.12.11 00:00:00
 60. PreviousThursday(t) = 2024.12.12 00:00:00
 61. PreviousFriday(t) = 2024.12.13 00:00:00
 62. PreviousSaturday(t) = 2024.12.14 00:00:00
 63. FirstWeekdayOfTheMonth(t, SUNDAY) = 2024.12.01 00:00:00
 64. LastWeekdayOfTheMonth(t, SUNDAY) = 2024.12.29 00:00:00
 65. AddSeconds(t, 30) = 2024.12.18 18:27:55
 66. AddMinutes(t, 30) = 2024.12.18 18:57:25
 67. AddHours(t, 2) = 2024.12.18 20:27:25
 68. AddDays(t, 10) = 2024.12.28 18:27:25
 69. AddBusinessDays(t, 10) = 2025.01.01 18:27:25
 70. AddWeeks(t, 4) = 2025.01.15 18:27:25
 71. AddMonths(t, 2) = 2025.02.18 18:27:25
 72. AddYears(t, 5) = 2029.12.18 18:27:25
 73. SubSeconds(t, 30) = 2024.12.18 18:26:55
 74. SubMinutes(t, 30) = 2024.12.18 17:57:25
 75. SubHours(t, 2) = 2024.12.18 16:27:25
 76. SubDays(t, 10) = 2024.12.08 18:27:25
 77. SubBusinessDays(t, 10) = 2024.12.04 18:27:25
 78. SubWeeks(t, 4) = 2024.11.20 18:27:25
 79. SubMonths(t, 2) = 2024.10.18 18:27:25
 80. SubYears(t, 5) = 2019.12.18 18:27:25
 81. DifferenceInCalendarDays(t, AddWeeks(t, 9)) = 63
 82. DifferenceInBusinessDays(t, AddWeeks(t, 9)) = 45
 83. DifferenceInCalendarWeeks(t, AddWeeks(t, 9)) = 9
 84. DifferenceInCalendarWeeks(t, AddWeeks(t, 9), true) = 9
 85. DifferenceInCalendarMonths(t, AddWeeks(t, 9)) = 2
 86. IsSameMinute(t, AddHours(t, 25)) = false
 87. IsSameHour(t, AddHours(t, 25)) = false
 88. IsSameDay(t, AddHours(t, 25)) = false
 89. IsSameWeek(t, AddHours(t, 25)) = true
 90. IsSameWeek(t, AddHours(t, 25), true) = true
 91. IsSameMonth(t, AddHours(t, 25)) = true
 92. IsSameYear(t, AddHours(t, 25)) = true
 93. IsCurrentMinute(t) = false
 94. IsCurrentHour(t) = false
 95. IsCurrentWeek(t) = true
 96. IsCurrentWeek(t, true) = true
 97. IsCurrentMonth(t) = true
 98. IsCurrentYear(t) = true
 99. IsToday(t) = true
 100. IsTomorrow(t) = false
 101. IsYesterday(t) = false
 102. IsLeapYear(2100) = false
 103. DaysInMonth(2024, 2) = 29
 104. GetNthWeekdayInYearMonth(2024, 1, 1, SUNDAY) = 2024.01.07 00:00:00
 105. t2s(TimeCurrent()) = Wed, 2024.12.18 17:27
 106. SecondsToString(SecsElapsedOfDay(TimeCurrent())) = 17:27:25
 107. TimeFormat(TimeCurrent(), YYYY.MM.DD hh:mm) = 2024.12.18 17:27
 108. TimeFormat(TimeCurrent(), DDD, YYYY.MM.DD hh:mm:ss) = Wed, 2024.12.18 17:27:25
 109. TimeFormat(TimeCurrent(), D MMM YYYY, HH:mm a) = 18 Dec 2024, 05:27 pm

*/


업데이트

2024.12.03 - v.1.10 : 초기 릴리스.

2024.12.05 - v.1.15: 영업일 및 해당 월의 N번째() 요일에 대한 함수가 추가되었습니다. DaysInMonth() 함수의 계산을 최적화했습니다.

2024.12.09 - v.1.20 : 전달된 토큰 문자열에 따라 시간 형식을 지정하는 TimeFormat() 함수를 추가했습니다.

2024.12.09-v.1.25 : TimeToStructFast() 함수의 계산을 최적화했습니다.

2024.12.10-v.1.30 : TimeFormat(), StartOfYear() 및 EndOfYear() 함수가 최적화되었습니다. 일부 함수에 대한 설명이 업데이트되었습니다.

2024.12.15 - v.1.35 : GetNthWeekdayInYearMonth() 함수를 최적화했습니다.

2024.12.18 - v.1.40 : IsCurrentXXX(), IsToday(), IsTomorrow() 및 IsYesterday() 함수를 추가했습니다.

2024.12.19 - v.1.45 : AddMonths() 및 GetNthWeekdayInYearMonth() 함수를 최적화했습니다.

2024.12.20-v.1.50 : 코드 정리가 추가되었습니다.

2024.12.21-v.1.55: AddMonths()의 계산 간소화: 월과 연도를 조정하는 복잡한 로직을 더 간단한 총 월 계산으로 대체했습니다.



MetaQuotes Ltd에서 영어로 번역함.
원본 코드: https://www.mql5.com/en/code/53970

시메트릭 다바스 박스 시메트릭 다바스 박스

외환용 다바스 대칭 복도.

미세 프랙탈 미세 프랙탈

미세 프랙탈 표시기는 표준 프랙탈 표시기가 작동하지 않는 중요한 가격 굴곡, 최고점 및 최저점을 표시합니다.

iTrend iTrend

추세 강도와 방향성을 결합한 지표입니다.

ExCandles2 ExCandles2

ExCandles-v2 인디케이터는 차트에 화살표로 캔들 스틱 조합을 표시합니다.