Kütüphaneler: Takvim - sayfa 14

 
mbjen #:

Merhaba. Takvimi belirli bir zamana taşıma imkanı var mı?


Tüm işlevleri hatırlamıyorum. ALT+M yardımcı olur.

 
fxsaber # :


Tüm işlevleri hatırlamıyorum. ALT+M yardımcı olur.

Güzel bir önerim var:
On Save():
Calendar -= Server_GMT_Offset değerini çıkarın;
Bu, takvim zamanlarını UTC zamanında saklayacaktır.

On Load():
Calendar += Server_GMT_Offset ekleyin;
Bu, bir terminalden kaydedilen dosyanın farklı bir brokerin gmt_offset'i ile başka bir terminalde yeniden kullanılmasına izin verir (farklı terminallerde EA testi).

Bu işlevselliği sınıfın Save() ve Load() yöntemlerine eklemeyi öneriyorum. Ayrıca, kaydetme/yükleme sırasında takvim saatlerinin düzeltilmesine izin vermek için bir kullanıcı seçeneği (sınıf özelliği) eklemek de yararlı olacaktır.


 
amrali #:
Bu işlevselliği sınıfın Save() ve Load() yöntemlerine eklemeyi öneriyorum. Ayrıca, kaydetme/yükleme sırasında takvim zamanlarının düzeltilmesine izin vermek için bir kullanıcı seçeneği (sınıf özelliği) eklemek de yararlı olacaktır.

Bu makul. Ne yazık ki, henüz bunu yapmaya hazır değilim.

 
Merhaba - Takvim EA örneğinizi yeni kullandım ve takvim verilerini indirmiyor gibi görünüyor. Sürüm 5.0 yapı 5200'den önce harika çalışıyordu. Sorunun ne olduğuna dair bir fikriniz var mı? Teşekkürler
 
v88 #:
Merhaba - Takvim EA örneğinizi yeni kullandım ve takvim verileri yüklenmiyor gibi görünüyor. Sürüm 5.0 yapı 5200'den önce sorunsuz çalışıyordu. Neyin yanlış olduğu veya herhangi bir düzeltme hakkında bir fikriniz var mı? Teşekkürler

Kontrol edildi - çalışıyor.


Bu dosyalar tüm terminaller için tek bir takvim depolar.

...\AppData\Roaming\MetaQuotes\Terminal\Community\Calendar\*.dat
 
fxsaber #:

Kontrol edildi - çalışıyor.


Bu dosyalar tüm terminaller için tek bir takvim depolar.

Burada test EA'nızla, 2 farklı terminalle kesinlikle çalışmıyor. Biri doğrudan metaquotes'tan ve diğeri komisyoncum aracılığıyla. Aşağıya bakın, her ikisi de kod 1 hatası gösteriyor:



AppData\Roaming\MetaQuotes\Terminal\Community\Calendar, events, countries ve descriptions adresinde 3 dosya görüyorum.


Test EA'nızdaki satırlar, calendar.bin dosyasının "Roaming\MetaQuotes\Terminal\<identifier>\MQL5\Files" klasöründe "Calendar.bin" olarak kaydedilmesi gerektiğini gösteriyor, ancak orada değil. Yapı 5200'den önce, oraya doğru şekilde yerleştirilirlerdi. Neyin yanlış olabileceğine dair bir fikriniz var mı?


#define  FAKE // Уберите эту строку, чтобы советник заработал. Нужно для прохождения автоматической проверки КБ.

#ifndef  FAKE

// Советник для торговли в 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";        // Para Birimi
input string inFilterName = "payrolls"; // FilterName

input group "EA"
input int inTP = 1000; // TakeProfit
input int inSL = 1000; // StopLoss
input bool inReverse = true; // Ticaret yönü

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.AutoDST() &&                                 // Синхронизировали календарь с котировками.
           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));
}

#else // #ifndef SAHTE
  int OnInit() { return(INIT_FAILED); }
#endif // #ifndef SAHTE #else
 
v88 #:

Burada test EA'nızla, 2 farklı terminalle kesinlikle çalışmıyor. Biri doğrudan metaquotes'tan ve diğeri komisyoncum aracılığıyla. Aşağıya bakın, her ikisi de kod 1 hatası gösteriyor:



AppData\Roaming\MetaQuotes\Terminal\Community\Calendar, events, countries ve descriptions adresinde 3 dosya görüyorum.


Test EA'nızdaki satırlar, calendar.bin dosyasının "Roaming\MetaQuotes\Terminal\<identifier>\MQL5\Files" klasöründe "Calendar.bin" olarak kaydedilmesi gerektiğini gösteriyor, ancak orada değil. Yapı 5200'den önce, oraya doğru şekilde yerleştirilirlerdi. Neyin yanlış olabileceğine dair bir fikriniz var mı?


Bunun benim kurulumum olmadığından emin olmak için, kendi ağımın dışında bir Windows sanal makinesi kurdum, her şey temizdi. Terminali indirdim, Dahil Edilen Dosyaları ve Calendar_Example EA'yı yükledim. Hala aynı sorun, hata kodu 1, calendar.bin indirilemiyor:


 
v88 #:

Neyin yanlış olabileceğine dair bir fikriniz var mı?

MQL5'teki değişiklikler düzeltilene kadar, bunu araştırmanın bir anlamı olduğunu düşünmüyorum. Aşağıdaki derlemeyi deneyin.

Новая версия платформы MetaTrader 5 build 5200: расширение OpenBLAS и усиление контроля в MQL5 - Проверил логин во вкладке Сообщество в MetaEditor
Новая версия платформы MetaTrader 5 build 5200: расширение OpenBLAS и усиление контроля в MQL5 - Проверил логин во вкладке Сообщество в MetaEditor
  • 2025.08.04
  • www.mql5.com
----------------- Открываю Метатрейдер, который давно вообще не открывал. Иду в MetaEditor - там не подключено к Git - ----------------- Проверил логин во вкладке Сообщество. То есть - пока я глядел на вкладку Сообщество в MetaEditor е - этот MetaEditor сам все сделал
 

Kısa süre önce, test cihazında çalışmak için takvimin tamamını bir dosyaya kaydetmenin yaklaşık 50 saniye sonra zaman aşımına uğramaya başladığını fark ettim.

Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, 0, 0); // <-- тут падает на 5401 - ERR_CALENDAR_TIMEOUT (превышен лимит времени запроса),

Önceden her şey yolunda gidiyordu ve takvimin tamamı sorunsuz bir şekilde bir dosyaya indiriliyordu. Terminal sürümlerinden birinde CalendarValueHistory için zaman aşımının azaltıldığından şüpheleniyorum.

Terminal her yerde b5327 olmasına rağmen farklı terminallerde ve farklı sunucularda kontrol ettim. Ayrıca süreyi azaltmayı da denedim. Yani, bir yıl için de bir zaman aşımı var. Ancak birkaç gün boyunca normal indiriyor.

Çağrıların kısa sürelere bölünmesini önlemek için herhangi bir geçici çözüm var mı?

 
Denis Kislicyn CalendarValueHistory için zaman aşımının azaltıldığından şüpheleniyorum.

Terminal her yerde b5327 olmasına rağmen farklı terminallerde ve farklı sunucularda kontrol ettim. Ayrıca süreyi azaltmayı da denedim. Yani, bir yıl boyunca da zaman aşımı var. Ancak birkaç gün boyunca normal bir şekilde indiriliyor.

Çağrıları kısa sürelere bölmekten kaçınmak için herhangi bir geçici çözüm var mı?

Küçük bir araştırma yaptım. CalendarValueHistory'ye bir aydan daha uzun bir süre aktarırsanız, işlev yaklaşık 50 saniye boyunca takılmaya başlıyor ve ardından zaman aşımı nedeniyle çöküyor. Bununla birlikte, aynı çağrı, ancak yalnızca bir gün daha kısa bir süre için, <70 ms'de çalışır ve yaklaşık 5.000 takvim etkinliğini mükemmel bir şekilde kaydeder. İçinde kesinlikle bir şeyler değişti.

Moderatör tarafından uygulanan otomatik çeviri. Rusça mesaj göndermek istiyorsanız, lütfen bunu İngilizce forumda değil, Rusça forumda yapın. Bu çok dilli bir konudur, bu nedenle lütfen doğru foruma gönderin, aksi takdirde otomatik çeviri düzgün çalışmayacaktır.