MetaTrader5 拥有基本日历事件的最新历史成交量,可以通过编程访问 其中的任何数据。
通过该库,您可以方便地使用这些数据。特别是在测试器和实际交易中使用它们。
示例源代码中的注释显示了如何使用该库。
获取历史数据。
// 脚本输出历史数据。 #include <fxsaber\Calendar\Calendar.mqh> // Calendar - 历史和实时基本面分析。 void OnStart() { CALENDAR Calendar; // 从重要性最低(无)的货币开始,获取所有(空)货币的事件。 const int Size = Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, D'2020.12.07', D'2020.12.08'); // 打印出来。 for (int i = 0; i < Size; i++) Print(Calendar[i].ToString()); }
结果。
2020.12.07 AllDay EUR 0 День Конституции(constitution-day), Испания(ES) | | | | 2020.12.07 00:00 AUD 3 Выступление председателя Резервного Банка Австралии Лоу(rba-governor-lowe-speech), Австралия(AU) | | | | 2020.12.07 01:50 JPY 1 Международные резервы(jp-foreign-reserves), Япония(JP) | $1384.6 B | | $1384.4 B | 2020.12.07 02:30 AUD 1 Количество объявлений о вакансиях от ANZ м/м(anz-job-advertisements-mm), Австралия(AU) | 13.9% | 0.8% | 9.4% | 2020.12.07 ≈05:00 CNY 1 Объем импорта USD г/г(imports-usd-yy), Китай(CN) | 4.5% | 4.4% | 4.7% | 2020.12.07 ≈05:00 CNY 1 Объем экспорта USD г/г(exports-usd-yy), Китай(CN) | 21.1% | 3.6% | 11.4% | 2020.12.07 ≈05:00 CNY 2 Торговый баланс(trade-balance), Китай(CN) | ¥507.1 B | ¥271.31 B | ¥401.75 B | 2020.12.07 ≈05:00 CNY 2 Торговый баланс USD(trade-balance-usd), Китай(CN) | $75.42 B | $52.55 B | $58.44 B | 2020.12.07 ≈05:00 CNY 1 Объем импорта г/г(imports-yy), Китай(CN) | -0.8% | -0.6% | 0.9% | 2020.12.07 ≈05:00 CNY 1 Объем экспорта г/г(exports-yy), Китай(CN) | 14.9% | 2.2% | 7.6% | 2020.12.07 07:00 JPY 1 Индекс совпадающих индикаторов(coincident-index), Япония(JP) | 89.7 | 81.8 | 81.1 | 84.8 2020.12.07 07:00 JPY 1 Индекс ведущих экономических индикаторов(leading-index), Япония(JP) | 93.8 | 92.7 | 92.5 | 93.3 2020.12.07 07:00 JPY 1 Индекс совпадающих индикаторов Японии м/м(coincident-index-mm), Япония(JP) | 4.9% | | 1.7% | 2.4% 2020.12.07 07:00 JPY 1 Индекс ведущих экономических индикаторов м/м(leading-index-mm), Япония(JP) | 0.5% | | 4.0% | 4.2% 2020.12.07 08:00 ZAR 1 Валовые международные резервы(gross-international-reserves), Южно-Африканская Республика(ZA) | $53.76 B | $54.129 B | $53.658 B | 2020.12.07 08:00 ZAR 1 Чистые международные резервы(net-international-reserves), Южно-Африканская Республика(ZA) | $51.257 B | $52.719 B | $51.364 B | 2020.12.07 09:00 EUR 2 Промышленное производство г/г(industrial-production-yy), Германия(DE) | -3.0% | -11.4% | -7.3% | -6.7% 2020.12.07 09:00 EUR 2 Промышленное производство м/м(industrial-production-mm), Германия(DE) | 3.2% | 7.7% | 1.6% | 2.3% 2020.12.07 09:00 NOK 1 Производство в обрабатывающей промышленности м/м(manufacturing-production-mm), Норвегия(NO) | 0.6% | 0.1% | -0.5% | 2020.12.07 09:00 NOK 1 Производство в обрабатывающей промышленности г/г(manufacturing-production-yy), Норвегия(NO) | -2.7% | -3.3% | -3.4% | 2020.12.07 09:00 NOK 1 Промышленное производство м/м(industrial-production-mm), Норвегия(NO) | -3.5% | 0.0% | -1.7% | -1.6% 2020.12.07 09:00 NOK 1 Промышленное производство г/г(industrial-production-yy), Норвегия(NO) | 0.0% | 6.9% | 6.3% |
您可以将其与 MT5 终端本身进行比较。
获取即将发生的事件。
// 脚本显示即将发生的事件。 #include <fxsaber\Calendar\Calendar.mqh> // Calendar - 历史和实时基本面分析。 void OnStart() { CALENDAR Calendar; string Currencies[2]; // 获取当前字符的货币。 Currencies[0] = ::SymbolInfoString(_Symbol, SYMBOL_CURRENCY_BASE); Currencies[1] = ::SymbolInfoString(_Symbol, SYMBOL_CURRENCY_PROFIT); // 按符号货币显示即将发生的重要事件。 Calendar.Set(Currencies); Print(Calendar.ToString()); // 打印出来。 }
在信息系统中嵌入该功能可在 Expert Advisor/指标中通知即将发生的重要日历事件。
基本面数据回溯测试。
下面是一个 Expert Advisor,通过比较当前值和预测值来交易非农就业数据。
// 用于 MT4/5 交易的智能交易系统--基本面数据历史记录测试仪。 #define CALENDAR_FILENAME "Calendar.bin" // 读/写日历的文件名。 #property tester_file CALENDAR_FILENAME // 指定 MT5-Tester 提取此文件。 #include <fxsaber\Calendar\Calendar.mqh> // Calendar - 历史和实时基本面分析。 input group "Calendar" input string inCurrency = "USD"; // 货币 input string inFilterName = "payrolls"; // 过滤器名称 input group "EA" input int inTP = 1000; // TakeProfit input int inSL = 1000; // 止损 input bool inReverse = true; // 贸易方向 CALENDAR Calendar; // 包含日历数据的对象。 int OnInit() { bool Res = false; if (MQLInfoInteger(MQL_TESTER)) // 如果在测试仪中工作 { Res = Calendar.Load(CALENDAR_FILENAME) && // 从文件中加载事件。 Calendar.FilterByCurrency(inCurrency) && // 应用货币过滤器。 Calendar.FilterByName(inFilterName); // 对事件名称进行过滤。 if (!Res) // 如果加载的数据有问题、 Print("Run the EA in the MT5-Terminal!"); // 报告说,您需要在 MT5 终端中运行 EA 才能获得它们。 } #ifdef __MQL5__ // 在终端机中工作。 else if (Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, 0, 0) && // 从 MT5 终端加载所有事件(历史+未来)。 Calendar.Save(CALENDAR_FILENAME)) // 将它们保存到文件中。 MessageBox("You can run the EA in the MT4/5-Tester."); // 报告我们现在可以在 MT4/5-Tester 中工作。 #endif // #ifdef __MQL5__ return(!Res); } void OnTick() { static int Pos = Calendar.GetPosAfter(TimeCurrent()); // 获取事件在日历中的位置,即当前时间之后的位置。 if ((Pos < Calendar.GetAmount()) && // 如果您还没有超越《日历》的范围 (Calendar[Pos].time < TimeCurrent())) // 当前时间已超过事件发生时间。 { const EVENT Event = Calendar[Pos]; // 接收到相应事件。 if ((Event.Actual != LONG_MIN) && (Event.Forecast != LONG_MIN)) // 如果设置了事件的当前值和预测值 { Print(Event.ToString()); // 打印整个事件。 if (Event.Actual > Event.Forecast) // 如果当前值大于预测值、 PositionOpen(inReverse, "Act.(" + Event.ActualToString() + ")>(" + Event.ForecastToString() + ")For."); // 打开一个方向的位置。 else PositionOpen(!inReverse, "Act.(" + Event.ActualToString() + ")<=(" + Event.ForecastToString() + ")For."); // 否则,换一个方向。 } Pos = Calendar.GetPosAfter(TimeCurrent(), Pos); // 获取事件在日历中的位置,即当前时间之后的位置。 } } #include <MT4Orders.mqh> //https://www.mql5.com/zh/code/16006 #define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID) #define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK) // 用指定的注释打开一个位置。 TICKET_TYPE PositionOpen( const int Type, const string comment ) { return(Type ? OrderSend(_Symbol, OP_SELL, 1, Bid, 0, Bid + inSL * _Point, Bid - inTP * _Point, comment) : OrderSend(_Symbol, OP_BUY, 1, Ask, 0, Ask - inSL * _Point, Ask + inTP * _Point, comment)); }
在 MT5 终端运行一次,保存所有历史数据(约 60 Mb)。之后,它们将在测试器中可用。
结果(六年来的 H1 开盘价)。
- 不使用 DLL,可在市场中运行。
- 跨平台操作:在 MT4 中从文件获取数据。
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/32430

测试仪的单程数据。

趨勢均衡指標 TrendEQ 透過結合動量和波動性來動態分析市場趨勢。透過根據市場走勢衡量動量,TrendEQ 提供了趨勢強度和方向的可靠衡量標準。