程序库: 日历 - 页 8

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

此示例用于演示日历如何在 Tester 中运行。它附带了以下说明。

在 MT5 终端中运行一次,保存所有历史数据(约 60 Mb)。之后,它们就可以在 Tester 中使用了。

不幸的是,您总是语焉不详,让我不得不花时间假设 "他是什么意思?

 
fxsaber #:

本示例用于演示日历如何在 Tester 中运行。它附带了以下说明。

不幸的是,你总是语焉不详,让我不得不花时间去猜测 "他说的是什么意思"。

在新闻发生的瞬间,当前值并没有相对于预期值进行更新,因此操作没有执行。 我说的是实时新闻中的操作,而不是测试中的操作。 在测试模式下,它运行得非常好。
 
AdrianR007 #:
在新闻发生的瞬间,"当前值 "相对于 "预期值 "没有更新,因此操作没有执行。 我说的是实时新闻中的操作,而不是测试中的操作。 在测试模式下,它运行得非常好。

关于交易、自动交易系统和测试交易策略的论坛。

库:日历

BillionerClub, 2023.02.23 19:35

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


 
Enrique Dangeroux #:

谢谢你,恩里克。也许你有这样做的例子?
 
AdrianR007 #:
谢谢你,恩里克。也许你有这样做的例子?

我没有时间给你上基础编码课。您可以阅读文档或在论坛上提问。

顺便说一句。如果您想交易新闻,MQL 日历是没用的。会有几秒、几分钟甚至几小时的延迟。

 
AdrianR007 #:
在新闻发生的瞬间,"当前值 "相对于 "预期值 "没有更新,因此操作没有执行。 我说的是实时新闻中的操作,而不是测试中的操作。 在测试模式下,它运行得非常好。

我不知道你在运行什么。关于日历数据更新,请阅读下面的讨论


该库只提供日历选项卡中的数据。

MetaTrader5 calendar updates - I'm looking to improve my news trading robot for MT5 platform calendar updates: Is it possible the same broker-by-broker
MetaTrader5 calendar updates - I'm looking to improve my news trading robot for MT5 platform calendar updates: Is it possible the same broker-by-broker
  • 2022.07.14
  • www.mql5.com
I would like to ask about mt5 platform calendar updates: is platform's calendar updated about actual values in real time. Is it possible  updating time is not the same broker-by-broker. Yes, i'm looking how to improve my news trading robot
 
fxsaber #:

我不知道你在运行什么。关于日历数据更新,请阅读以下讨论


程序库只提供日历选项卡中的数据。

非常感谢。现在我明白了!!! ....
 

了解 MT5 日历 的唯一方法就是比较前后值。

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

void OnStart()
{
  CALENDAR Calendar;
  
  if (Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, 0, 0)) // 从 MT5 终端加载所有事件(历史+未来)。
  {
    const string FileName = "Calendars\\" + AccountInfoString(ACCOUNT_SERVER) + "\\Calendar_" +
                            AccountInfoString(ACCOUNT_SERVER) + "_" + TimeToString(TimeCurrent(), TIME_DATE) + ".bin";
    
    Calendar.Save(FileName); // 为将来美国/欧洲同步时进行比较而保存。
  }
}

显然,没有人会这么做。

 

关于交易、自动交易系统和交易策略测试的论坛

图书馆:日历

fxsaber, 2023.01.07 21:31.

看起来我们应该在日历日期中做一个自动校正器。

它似乎得到一个日历校正器匹配的交易服务器。

#property script_show_inputs

input ulong inEventID = 840030006; // 事件 ID
input string inName = ""; // 名称 -> 事件 ID(非农就业人数 -> 840030016)
input datetime inFrom = D'2020.01.01';
input bool inDST = true;

void OnStart()
{
  CALENDAR Calendar;
    
  if (inName == "")
  {
    Calendar.Set(inEventID);
    Calendar.FilterByTime(inFrom, TimeCurrent());
    
    Calendar.CorrectTime(); // 绕过 MQL 日历的特殊性: https://www.mql5.com/ru/forum/444094/page14#comment_46213385
    
    if (inDST)
      Calendar.DST(); // 如果交易服务器与欧洲时间同步,则调用。
  
    for (int i = Calendar.GetAmount() - 1; i >= 0; i--)
    {
      const EVENT Event = Calendar[i];    
      const datetime ChartNews = ChartNewsTime(Event.time); //https://www.mql5.com/ru/forum/357793/page5#comment_44225999
      
      if (Event.time != ChartNews)    
        Print("-" + (string)Event.EventID + ": " + TimeToString(ChartNews) + " != " + Event.ToString());
      else
        Print("+" + (string)Event.EventID + ": " + TimeToString(ChartNews) + " == " + Event.ToString());
    }
  }
  else // 根据名称获取事件 ID。
  {
    string Currencies[2];
    
    // 获取当前字符的货币。
    Currencies[0] = ::SymbolInfoString(_Symbol, SYMBOL_CURRENCY_BASE);
    Currencies[1] = ::SymbolInfoString(_Symbol, SYMBOL_CURRENCY_PROFIT);
    
    if (Calendar.Set(Currencies, CALENDAR_IMPORTANCE_MODERATE, inFrom) && Calendar.FilterByName(inName))
      for (int i = Calendar.GetAmount() - 1; i >= 0; i--)
        Print((string)Calendar[i].EventID + ": " + Calendar[i].ToString());
  }
}


结果。

+840030016: 2023.04.07 15:30 == 2023.04.07 15:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 236 K | -8 K | 311 K | 326 K
+840030016: 2023.03.10 15:30 == 2023.03.10 15:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 311 K | -35 K | 517 K | 504 K
+840030016: 2023.02.03 15:30 == 2023.02.03 15:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 517 K | 16 K | 223 K | 260 K
+840030016: 2023.01.06 15:30 == 2023.01.06 15:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 223 K | 57 K | 263 K | 256 K
+840030016: 2022.12.02 15:30 == 2022.12.02 15:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 263 K | -30 K | 261 K | 284 K
+840030016: 2022.11.04 14:30 == 2022.11.04 14:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 261 K | -97 K | 263 K | 315 K
+840030016: 2022.10.07 15:30 == 2022.10.07 15:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 263 K | 33 K | 315 K | 
+840030016: 2022.09.02 15:30 == 2022.09.02 15:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 315 K | 156 K | 528 K | 526 K

关于交易、自动交易系统和测试交易策略的论坛

新版本的MetaTrader 5构建3660:改进和修复

fxsaber, 2023.04.12 11:26 AM

现在,我们查看同一时区网络日历中的新闻。

它与网络日历一致。如果有人发现任何明显的差异,请告诉我。

这似乎是现在使用日历进行回溯测试的正确方法。

 
fxsaber #:

看来,它是一个与贸易服务器匹配的日历校正器。


结果。

与网络日历匹配。如果有人发现任何明显的差异,请告诉我。

现在看来,使用日历进行回溯测试是正确的。

但如果是其他国家的时间呢?我知道不同国家的时间有不同的日期。