的确,标准 Calendar 函数很难理解。好在作者已经想通了,并在文章中提供了示例。
然而,所建议的高级日历 API 的简单性似乎并不明显。这很困难。
也许,我们应该列出一些日历应用最需要的场景。并尝试实现它们。
的确,标准日历函数很难理解。好在作者想通了这一点,并提供了示例。
然而,所建议的高级日历 API 的简单性似乎并不明显。这很困难。
也许,我们应该列出日历应用最需要的一些场景。并尝试实现它们。
感谢您的意见 :-)
在我看来,CiCalendarInfo 类 涉及三个实体:国家、事件和值,因此在 理解上存在一些困难 。如果我们将其与 SB 交易类 CAccountInfo、CSymbolInfo 等进行 比较 ,则每个类中都有一个对象--账户、符号等。也许应该建立一个类的层次结构,例如:基类 -CiCalendarBaseInfo,子类 -CiCalendarCountryInfo、CiCalendarEventInfo 和CiCalendarValueInfo。但后三种都有类似的结构形式。所以我放弃了这个想法。
也许,我们需要定义一个列表,列出一些最常用的日历使用场景。并尝试实现它们。
在使用日历数据方面,有多少想法就会有多少应用场景。您可以制作一个简单的事件发布通知器、日历面板、交易或考虑新闻发布时间的专家顾问等等。您可以从宏观经济指标中获取数据,利用神经网络研究它们对利率的影响。一句话,大数据
方便之处在于,您不需要去其他来源。一切都可以在 MQL5 环境中完成。
德米特里,这里有一个标准函数。
int CalendarValueLast( ulong& change_id, // 更改标识符 MqlCalendarValue& values[], // 用于获取值描述的数组 const string country_code=NULL, // 根据 ISO 3166-1 alpha-2 编制的国家代码名称 const string currency=NULL // 国家货币代码名称 );
它表明,change_id 是一个引用参数。也就是说,服务器会将其返回给我们。这是一个服务器常量。当值发生变化时,意味着日历数据库的状态发生了变化。文档中有一个 EA 示例。
是的,我们也可以发送change_id 的最后已知值。如果数据库状态发生变化,CalendarValueLast() 函数将返回新事件的数量,并用新值覆盖 我们发送的change_id。
- www.mql5.com
在帮助中找到的:
CalendarValueLast
如果向函数传递 change_id = 0,函数将始终返回 0,但会在 change_id 中返回 Calendar base 的当前状态。
是的,有这种情况。
当 prev_calculated == 0 时,我在指标示例中就有这样的行:
//----只是为了得到一个更改 ID MqlCalendarValue values[]; gPtrValuesInfo.ValueLastSelectByEvent(gChangeId, values);
在这里,gChangeId=0。它在初始化块中归零。不过更正确的做法可能是在 prev_calculated == 0时 重置gChangeId 。并将此变量设为本地变量。
新文章 MQL5 酷宝书 – 财经日历已发布:
本文着重于财经日历的编程特性,并研究创建一个类来简化访问日历属性和接收事件值。 运用 CFTC(商品期货交易委员会)的非商业净持仓规则来开发指标作为一个实际例子。
我们会在下面的示例中处理时间序列结构。 Test_TS.mq5 脚本接收自 2016 年 1 月 1 日到 2021 年 11 月 1 日之间的美国非农就业数据,并将其显示在特殊的图表上。 所以可令图表产生两条曲线 - 实际值和预测值。 我们将采用事件报告区间作为时间线。
脚本启动后,我们首先在日志里显示时间序列数值,然后在图表上绘制图表(图例 2)。
图例 2. 美国非农就业 (2016-2021)
作者:Denis Kirichenko