- 显示:
- 19
- 等级:
- 已发布:
-
需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
该库包含 80 多个处理时间变量的不同函数。其主要目的是提供高性能的时间函数。性能模式(可在编译时通过 #define 进行控制)默认为禁用。该模式并不是将该库包含到项目中的必要条件,因为不使用该模式也能正常包含该库。
timeutils_performance_mode
可选择在编译时 通过 #include 前的 #defines打开性能模式:
// 启用图书馆的性能模式 #define TIMEUTILS_PERFORMANCE_MODE #include "TimeUtils.mqh"
这将把所有对 MQL 内置TimeToStruct 和StructToTime 函数的调用重定向到更高效的替代函数。
您可以在编译脚本 "performance_mode.mq5 "时同时编译 TIMEUTILS_PERFORMANCE_MODE 和 TIMEUTILS_PERFORMANCE_MODE, 以 检查机器上的速度差异。这将有利于高性能程序执行繁重或与时间相关的任务(例如,在交易周开始时扫描所有报价历史记录以查找 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() //+==================================================================+ //| Break datetime To Components| //+==================================================================+ 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() Number| //+==================================================================+ int DayOfWeek(datetime t) int DayOfYear(datetime t) int DayIndex(datetime t) //+==================================================================+ //| Week() Number| //+==================================================================+ 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) //+==================================================================+ //| Previous() 平日| //+==================================================================+ 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两位数年份 //|YYYY 2018 四位数年份| //| M 1-12从 1 开始的月份 //| MM 01-12月份,两位数 //| MMM Jan-Dec 月份缩写名称,3 个字母。 //| MMMM 1 月-12 月 月份全称| //| D 1-31月的星期 //| DD 01-31月日,两位数 | | //| DDD 星期日-星期六 一周中一天的简称。 //| DDDD 星期日-星期六 星期天的名称 //| h 0-23 小时| //| hh 00-23小时,两位数 //| H 1-12小时,12 小时钟 //| HH 01-12 小时,12 小时钟,2 位数 //| m 0-59 分钟| //| 毫米 00-59分钟,两位数 //| s 0-59 秒| //| ss 00-59第二个 2 位数 //| A AM PM| //| a am pm| //+------------------------------------------------------------------+ //| 样本格式:| //| "YYYY.MM.DD hh:mm"//"2024.12.08 22:05"(默认) || "YYYY.MM.DD hh:mm"。 //| "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" //"8 December 2024, 10:05 pm" | //|"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 1817 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.下周三(t)= 2024.12.25 00:00:00
53.NextThursday(t) = 2024.12.19 00:00:00
54.下一个星期五(t)= 2024.12.20 00:00:00
55.下一个星期六(t) = 2024.12.21 00:00:00
56.上一个星期日(t) = 2024.12.15 00:00:00
57.上一个星期一(t) = 2024.12.16 00:00:00
58.上一个周二(t)= 2024.12.17 00:00:00
59.上一个星期三(t)= 2024.12.11 00:00:00
60.上一个星期四(t) = 2024.12.12 00:00:00
61.上一个星期五(t)= 2024.12.13 00:00:00
62.上一个星期六(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

大家下午好,我是 metatrader5 的新学员,我正在创建一个机器人,用于从模拟账户复制交易并将其保存到数据库中,我希望有人帮助我找出可能存在的问题、代码的最佳解决方案等。

适用于 MetaTrader 5 的 MarketPredictor MarketPredictor 是适用于 MetaTrader 5 的创新型智能交易系统 (EA),它利用正弦函数、快速傅立叶变换 (FFT)、sigmoid 函数和蒙特卡罗模拟等数学模型来分析和预测市场走势。本项目专为对技术和金融创新感兴趣的开发人员、数学爱好者和交易者设计。 欢迎直接在本主题中提出、讨论和实施代码创意。无论是新功能、改进建议还是策略,我们都欢迎您为进一步开发和优化 MarketPredictor 做出贡献。 我们也欢迎您添加我,私下澄清问题,在 GitHub 项目上进行合作,或直接向我发送您的反馈。让我们一起创造奇迹,让这个项目更上一层楼!