程序库: 日历 - 页 7

 

谢谢 fxsaber、

脚本很棒。我是 MT5 的新手,正在使用您的日历脚本。对于历史数据,如何添加经济数据所属的时期?(例如,1 月份的发布数据属于 1 月份)?


谢谢,并致以最崇高的敬意、

埃德温

 
eapricorn 时期?(例如,1 月份的发布数据属于 1 月份)?
#include <fxsaber\Calendar\Calendar.mqh> //https://www.mql5.com/zh/code/32430

void OnStart()
{
  CALENDAR Calendar;
  
  Calendar.Set(NULL, CALENDAR_IMPORTANCE_HIGH, D'2023.01.01', D'2023.02.01');
  
  Print(Calendar.ToString());
}
 
fxsaber # :

你好 fxsaber、


感谢您的留言。很抱歉,我可能以错误的方式解释了我的问题。实际上,我指的是 MT5 中的 "日历窗口",该窗口的 "期间 "栏中通常有 "1 月",表示今天 "2023 年 2 月 2 日 "发布的经济数据实际上指的是 1 月份的经济数据(如附图)。但从脚本中,我看到只有数据发布日期,而没有指定 "期间"。(如附图)。

我试着搜索MqlCalendarValue,并使用 Value.period 来指定 "期间 "日期,但得到的值非常奇怪,是 1970.01.01(如附图)。

衷心希望知道是否可以使用周期,以及如何将其添加到您的脚本中?谢谢。

附加的文件:
Calendar.jpg  298 kb
MT5_calendar.jpg  414 kb
MetaEditor.jpg  465 kb
 
eapricorn #:

实际上,我指的是 MT5 中的 "日历窗口",该窗口的周期栏中通常有 "1 月",表示今天发布的经济数据 "2023 年 2 月 2 日 "实际上指的是 1 月份的经济数据(如附图)。

#include <fxsaber\Calendar\Calendar.mqh> //https://www.mql5.com/zh/code/32430

struct CALENDAR_EVENT : public EVENT
{
  string ToString() const
  {
    struct CALENDAR_VALUE : public MqlCalendarValue
    {
      string ToString( void ) const
      {
        static const string Month[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
        static const string Quarter[] = {"Q1", "Q2", "Q3", "Q4"};
        
        MqlDateTime Time;
    
        return((this.period && ::TimeToStruct(this.period, Time) ? (this.revision ? Quarter[(Time.mon - 1) / 3]
                                                                                  : Month[Time.mon - 1] + ((Time.day != 1) ? " " + (string)Time.day : NULL))
                                                                 : NULL));
      }
    } Value;

    return(this.EVENT::ToString() + (::CalendarValueById(this.id, Value) ? Value.ToString() : NULL));
  }
};

void OnStart()
{  
  CALENDAR Calendar;
  
  Calendar.Set();
  
  const int Size = Calendar.GetAmount();
  
  for (int i = 0; i < Size; i++)
  {
    const CALENDAR_EVENT Event = Calendar[i];
    
    Print(Event.ToString());
  }
}


2023.02.02 16:15 GBP 3 BoE Governor Bailey Speech (boe-governor-bailey-speech), United Kingdom (GB) |  |  |  |  
2023.02.02 17:15 EUR 3 ECB President Lagarde Speech (ecb-president-lagarde-speech), European Union (EU) |  |  |  |  
2023.02.02 20:30 EUR 3 ECB President Lagarde Speech (ecb-president-lagarde-speech), European Union (EU) |  |  |  |  
2023.02.03 15:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) |  | 16 K | 223 K |  Jan
2023.02.03 17:00 USD 3 ISM Non-Manufacturing PMI (ism-non-manufacturing-pmi), United States (US) |  | 53 | 49.6 |  Jan
2023.02.06 12:00 EUR 3 Retail Sales m/m (retail-sales-mm), European Union (EU) |  | 0.3% | 0.8% |  Dec
2023.02.06 17:00 CAD 3 Ivey PMI (ivey-pmi), Canada (CA) |  | 55.2 | 33.4 |  Jan
2023.02.07 05:30 AUD 3 RBA Interest Rate Decision (rba-interest-rate-decision), Australia (AU) |  |  | 3.1% |  
2023.02.07 19:30 CAD 3 BoC Governor Macklem Speech (boc-governor-macklem-speech), Canada (CA) |  |  |  |  
2023.02.08 06:30 INR 3 RBI Interest Rate Decision (rbi-interest-rate-decision), India (IN) |  |  | 6.25% |  
2023.02.08 17:30 USD 3 EIA Crude Oil Stocks Change (eia-crude-oil-stocks-change), United States (US) |  | -0.012 M | 4.140 M |  Feb 3
2023.02.09 AllDay EUR 3 EU Leaders Summit (eu-leaders-summit), European Union (EU) |  |  |  |  
2023.02.09 10:30 SEK 3 Riksbank Interest Rate Decision (riksbank-interest-rate-decision), Sweden (SE) |  |  | 2.5% |  
 

因为当前新闻值不是即时生成的?您的示例使用了 (Event.Actual!=LONG_MIN) && (Event.Forecast!= LONG_MIN) 方法,但这些值不被接受。

我需要做些什么,才能在实际测试中接受这个精确值,并执行您示例中的逻辑?

谢谢

 
AdrianR007 LONG_MIN) && (Event.Forecast!= LONG_MIN) 方法,但数值不被接受

我该怎么做才能在实际测试中接受该值,并执行您示例中的逻辑?

我不明白对话的上下文。

 
新闻的当前值没有更新,因此代码 (Event.Actual!=LONG_MIN) && (Event.Forecast!= LONG_MIN) 不起作用。有没有其他方法可以在事件发生时读取事件?
 
AdrianR007 LONG_MIN) && (Event.Forecast!= LONG_MIN) 不起作用。有没有其他方法可以在事件发生时读取事件?

您说得太简洁了,我无法理解您的意思。请提供简洁的代码,您可以运行这些代码并看到您想讨论的问题。

 
fxsaber #:

你说得太简洁了,让人无法明确理解你的意思。请提供简洁的代码,您可以运行这些代码并看到您想讨论的问题。

我正在使用您示例中的代码,但事件发生时当前值没有更新。
谢谢
附加的文件:
Capture.PNG  124 kb
 
AdrianR007 #:
我正在使用您示例中的代码,但事件发生时当前值没有更新。对此有什么建议吗? 谢谢

这不是自刷新库,使用日历中的 id 从 mql5 获取新数据。