程序库: 日历 - 页 4 1234567891011...15 新评论 Drake 2021.05.09 22:54 #31 fxsaber:没有完成。请联系专家。 当然,我刚明白你的意思。谢谢 mqtrader 2022.05.28 18:58 #32 我注意到回溯测试 似乎仅限于 5 年左右(从 2017 年起),尽管所有新闻事件都已正确下载(BIN 文件为 67MB)。MT5 在进行回溯测试时内存可处理的事件数量是否有限制? fxsaber 2022.05.30 00:03 #33 mqtrader #: 我注意到回溯测试似乎仅限于 5 年左右(从 2017 年起),尽管所有新闻事件都已正确下载(BIN 文件为 67MB)。MT5 在进行回溯测试时内存可处理的事件数量是否有限制? #property script_show_inputs #include <fxsaber\Calendar\Calendar.mqh> //https://www.mql5.com/zh/code/32430 input bool inFromFile = false; #define CALENDAR_FILENAME "Calendar.bin" // 读/写日历的文件名。 void OnStart() { CALENDAR Calendar; if (inFromFile) Calendar.Load(CALENDAR_FILENAME); else { Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, 0, INT_MAX); // 用了整个日历。 Calendar.Save(CALENDAR_FILENAME); // > > 65 MB。 } Print(Calendar[0].ToString()); } 结果。 2007.01.06 23:30 USD 1 CFTC Crude Oil Non-Commercial Net Positions(cftc-crude-oil-non-commercial-net-positions), United States(US) | 2.2 K | | 19.8 K | 日历数据库中的第一个事件是 2007 年 1 月。 mqtrader 2022.05.30 02:17 #34 我刚刚意识到,"预测 "值从 2017.05.05 开始,这就是为什么运行示例时,回溯测试 只能从该日期开始。可以使用该日期之前的其他值。 再次感谢 fxsaber 提供这个非常有用的库! fxsaber 2022.06.15 11:42 #35 事件日历 是对未来的重大预测。这就是为什么您可以在 MT4 中使用提醒功能,事先保存 MT5 数据文件(例如一个月前)。 我在 MT4 中就是这样做的。 在 MT4 中使用日历的步骤。 1.在 MT5 中运行脚本,将日历保存到 Common 文件中。 #include <fxsaber\Calendar\Calendar.mqh> //https://www.mql5.com/zh/code/32430 #define CALENDAR_FILENAME "Calendar.bin" // 读/写日历的文件名。 void OnStart() { CALENDAR Calendar; Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, 0, INT_MAX); // 用了整个日历。 Calendar.Save(CALENDAR_FILENAME, true); // 录制日历。> 65 MB。 } 2.2. 将通用文件中的日历加载到 MT4 中。 下面是在 MT4 中使用当前符号货币的重要事件提醒的示例。 #include <fxsaber\Calendar\Calendar.mqh> //https://www.mql5.com/zh/code/32430 #define CALENDAR_FILENAME "Calendar.bin" // 读/写日历的文件名。 int OnInit() { return(!EventSetTimer(1)); } void OnTimer() { static CALENDAR Calendar; if (Calendar.GetAmount()) // 如果日历不是空的。 { static int Pos = 0; Pos = Calendar.GetPosAfter(TimeCurrent(), Pos); // Found Future Events. Comment(Calendar.ToString(Pos, 5, true)); // 打印出来。 } else if (Calendar.Load(CALENDAR_FILENAME, true)) // 从文件中加载日历。 { string Currencies[2]; // 获取当前字符的货币。 Currencies[0] = ::SymbolInfoString(_Symbol, SYMBOL_CURRENCY_BASE); Currencies[1] = ::SymbolInfoString(_Symbol, SYMBOL_CURRENCY_PROFIT); Calendar.FilterByCurrency(Currencies); // 留下符号货币上的事件。 Calendar.FilterByImportance(CALENDAR_IMPORTANCE_HIGH); // 只留下了重要事件。 } } 启动后,我们可以直接在 MT4 中看到该符号货币重要事件的图表更新(倒计时)提醒。 同样,日历也可以在 MT4-Tester 中运行。 fxsaber 2022.06.20 17:38 #36 Mark Taylor #:不过,我一直遇到一个问题,那就是我按标准下载日历文件时然后设置一个开始时间,并在此时间后循环获取每种货币的事件。 请尝试粘贴源代码,以便可以读取。 BillionerClub 2022.10.08 23:14 #37 感谢您的辛勤劳动,提供了有用的信息。当然,这样的工作应该得到发展和纠正,并描述文档、整个社区而不仅仅是一个人。但出于某种原因,管理部门本身并没有给出这样的规定,也没有插入链接到相同的 GitHub,以进行适当的组织。虽然有一些项目,但它们的使用几乎都在同一个 GitHub 上。 谢谢你的代码,阅读这样的代码非常有趣,老实说:重载模板缺乏注释))什么是值得这种创造力,5 分钟的思考是什么呢?总之,一切都有利于大脑开发。 CALENDAR Calendar; Calendar[i].time 当然,工作很酷,你只需了解它是如何工作的 BillionerClub 2022.11.04 02:52 #38 如果函数能在合并后对整个数组按时间排序就更好了 int operator +=( const CALENDAR &Value ) { const int Size1 = this.GetAmount(); const int Size2 = Value.GetAmount(); if (!Size1) for (int i = ::ArrayResize(this.Events, Size2) - 1; i >= 0; i--) this.Events[i] = Value.Events[i]; else if (Size2) { EVENT Array[]; ::ArrayResize(Array, Size1 + Size2); int i = 0; int j = 0; int k = 0; while ((i < Size1) && (j < Size2)) Array[k++] = (this.Events[i] < Value.Events[j]) ? this.Events[i++] : Value.Events[j++]; while (i < Size1) Array[k++] = this.Events[i++]; while (j < Size2) Array[k++] = Value.Events[j++]; #ifdef __MQL5__ ::ArraySwap(this.Events, Array); #else // #ifdef __MQL5__ ::ArrayFree(this.Events); ::ArrayCopy(this.Events, Array); #endif // #ifdef __MQL5__ #else } return(this.GetAmount()); } bool operator <( const EVENT &Value ) const { return(!Value.time || (this.time < Value.time)); } fxsaber 2022.11.04 07:09 #39 BillionerClub #:如果函数能在合并后对整个数组按时间排序就更好了 请举例说明它没有做到这一点。 BillionerClub 2022.11.04 07:43 #40 fxsaber #:请举例说明事实并非如此。 你的代码很难理解,但我认为上面的代码中存在最终排序,但代码很可能是错误的。合并数组时,最终数组会出现缺乏排序的错误,这并不常见,因为数组中最近的元素应该有更长的时间。 2022.11.04 07:05:33.053 EventsManager (FUTSP500CONT,M15) 2022.11.04 08:00 2022.11.04 07:05:33.053 EventsManager (FUTSP500CONT,M15) 2022.11.04 13:30 2022.11.04 07:05:33.053 EventsManager (FUTSP500CONT,M15) 2022.11.04 16:30 2022.11.04 07:05:33.053 EventsManager (FUTSP500CONT,M15) 2022.11.04 20:00 2022.11.04 07:05:33.053 EventsManager (FUTSP500CONT,M15) 2022.11.05 00:00 2022.11.04 07:05:33.053 EventsManager (FUTSP500CONT,M15) 2022.11.07 00:00 2022.11.04 07:05:33.053 EventsManager (FUTSP500CONT,M15) 2022.11.04 00:30 2022.11.04 07:05:33.053 EventsManager (FUTSP500CONT,M15) 2022.11.04 00:30 2022.11.04 07:05:33.053 EventsManager (FUTSP500CONT,M15) 2022.11.04 00:30 int totall = Calendar+=Calendar3; for(int i=0;i<totall;i++) { Print(TimeToString(Calendar[i].time)); } 1234567891011...15 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
没有完成。请联系专家。
我注意到回溯测试似乎仅限于 5 年左右(从 2017 年起),尽管所有新闻事件都已正确下载(BIN 文件为 67MB)。MT5 在进行回溯测试时内存可处理的事件数量是否有限制?
结果。
日历数据库中的第一个事件是 2007 年 1 月。
事件日历 是对未来的重大预测。这就是为什么您可以在 MT4 中使用提醒功能,事先保存 MT5 数据文件(例如一个月前)。
我在 MT4 中就是这样做的。
在 MT4 中使用日历的步骤。
1.在 MT5 中运行脚本,将日历保存到 Common 文件中。
2.2. 将通用文件中的日历加载到 MT4 中。
下面是在 MT4 中使用当前符号货币的重要事件提醒的示例。
启动后,我们可以直接在 MT4 中看到该符号货币重要事件的图表更新(倒计时)提醒。
同样,日历也可以在 MT4-Tester 中运行。
不过,我一直遇到一个问题,那就是我按标准下载日历文件时
然后设置一个开始时间,并在此时间后循环获取每种货币的事件。
请尝试粘贴源代码,以便可以读取。
感谢您的辛勤劳动,提供了有用的信息。
当然,这样的工作应该得到发展和纠正,并描述文档、整个社区而不仅仅是一个人。但出于某种原因,管理部门本身并没有给出这样的规定,也没有插入链接到相同的 GitHub,以进行适当的组织。虽然有一些项目,但它们的使用几乎都在同一个 GitHub 上。
谢谢你的代码,阅读这样的代码非常有趣,老实说:重载模板缺乏注释))什么是值得这种创造力,5 分钟的思考是什么呢?总之,一切都有利于大脑开发。 当然,工作很酷,你只需了解它是如何工作的如果函数能在合并后对整个数组按时间排序就更好了
如果函数能在合并后对整个数组按时间排序就更好了
请举例说明它没有做到这一点。
请举例说明事实并非如此。
你的代码很难理解,但我认为上面的代码中存在最终排序,但代码很可能是错误的。合并数组时,最终数组会出现缺乏排序的错误,这并不常见,因为数组中最近的元素应该有更长的时间。