Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
Calendar - библиотека для MetaTrader 5
- Просмотров:
- 7120
- Рейтинг:
- Опубликован:
- 2020.12.11 23:59
- Обновлен:
- 2024.04.13 06:53
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
В MetaTrader5 имеется обновляемая объемная история фундаментальных календарных событий, к любым данным которой реализован программный доступ.
Данная библиотека позволяет удобно работать с этими данными. В частности, применять их в Тестере и в реальной торговле.
Работа с библиотекой показана в виде комментариев исходного кода примеров.
Получение исторических данных.
// Скрипт выводит исторические данные. #include <fxsaber\Calendar\Calendar.mqh> // Календарь - фундаментальный анализ на истории и в реал-тайме. void OnStart() { CALENDAR Calendar; // Взяли события по всем (NULL) валютам начиная с самой низкой (NONE) важности. 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> // Календарь - фундаментальный анализ на истории и в реал-тайме. 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()); // Распечатали их. }
Подобное встраивание в информационные системы позволяет в советниках/индикаторах информировать о важных предстоящих календарных событиях.
Бэктест на фундаментальных данных.
Ниже советник, который торгует NonFarm Payrolls по данным сравнения текущего и прогнозного значений.
// Советник для торговли в MT4/5-Тестере на истории фундаментальных данных. #define CALENDAR_FILENAME "Calendar.bin" // Название файла для чтения/записи Календаря. #property tester_file CALENDAR_FILENAME // Указание, чтобы MT5-Тестер подхватывал данный файл. #include <fxsaber\Calendar\Calendar.mqh> // Календарь - фундаментальный анализ на истории и в реал-тайме. input group "Calendar" input string inCurrency = "USD"; // Currency input string inFilterName = "payrolls"; // FilterName input group "EA" input int inTP = 1000; // TakeProfit input int inSL = 1000; // StopLoss input bool inReverse = true; // Trade direction 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-Терминале. } #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-Тестере. #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/ru/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 получение данных из файла.
Он перебирает все инструменты счета, вычисляет у них корреляцию и выводит отсортированную информацию.
MA InputsИндикатор iMA с настройками линии из советника
Расширенные входные параметр для iMACD (Moving Average Convergence/Divergence, MACD)
ZigzagXМодификация стандартного индикатора ZigzagColor.