ライブラリ: カレンダー - ページ 14

 
mbjen #:

こんにちは。カレンダーを特定の時間に移動させることはできますか?


すべての機能は覚えていません。ALT+Mが 役立ちます。

 
fxsaber # :


すべての機能を覚えているわけではない。ALT+Mが 役に立つ。

いい提案がある:
Save():
Calendar -= Server_GMT_Offsetを引く;
これでカレンダーの時間がUTC時間で保存されます。

Load()時に
Calendar += Server_GMT_Offset を加える;
これにより、ある端末で保存したファイルを、異なるブローカーの GMT_OFFSET を持つ別の端末で再利用することができます(異なる端末での EA テスト)。

この機能をクラスのSave()メソッドとLoad()メソッドに追加することをお勧めします。また、保存/ロード時にカレンダーの時刻を修正できるようにするユーザーオプション(クラスプロパティ)を追加することも有用でしょう。


 
amrali #:
この機能をクラスのSave()メソッドとLoad()メソッドに追加することを提案します。また、保存/ロード時にカレンダーの時刻を修正できるようにするユーザー・オプション(クラスのプロパティ)を追加するのも便利でしょう。

これは合理的だ。残念ながら、私はまだ準備ができていません。

 
こんにちは - カレンダーEAのサンプルを使用したところ、カレンダーデータをダウンロードできないようです。5.0ビルド5200がリリースされる前はとてもうまくいっていました。何が問題なのか、または修正方法があれば教えてください。ありがとうございます。
 
v88 #:
こんにちは - カレンダーEAのサンプルを使用したところ、カレンダーデータを読み込んでいないようです。バージョン5.0ビルド5200以前は問題なく動作していました。何が問題なのか、または修正方法があれば教えてください。ありがとうございます。

確認しました。


これらのファイルは、すべての端末に対して単一のカレンダーを保存します。

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

チェックした。


これらのファイルは、すべての端末用の単一のカレンダーを保存します。

あなたのテストEAでは、2つの異なるターミナルで間違いなく動作していません。1つはmetaquotesから直接、もう1つは私のブローカーを通してです。下記を参照してください:



I see 3 files at \AppDataRoaming\MetaQuotes\Terminal ◇Calendar, events, countries and descriptions.


あなたのテストEAの行を見ると、calendar.binファイルは "RoamingMetaQuotesTerminal<identifier>MQL5¥Files "フォルダに "Calendar.bin "として保存されるべきですが、そこにはありません。ビルド5200以前は、正しくそこに置かれていた。何が間違っているのだろうか?


#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";        // 通貨
input string inFilterName = "payrolls"; // フィルター名

input group "EA"
input int inTP = 1000; // テイクプロフィット
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-Терминале.
  }
#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 FAKE
  int OnInit() { return(INIT_FAILED); }
#endif // #ifndef FAKE #else
 
v88 #:

あなたのテストEAでは、2つの異なるターミナルで間違いなく動作しません。1つはmetaquotesから直接、もう1つは私のブローカーを通してです。どちらもコード1のエラーが表示されます:



I see 3 files at \AppDataRoaming\MetaQuotes\Terminal\Community\Calendar, events, countries and descriptions.


あなたのテストEAの行を見ると、calendar.binファイルは "RoamingMetaQuotesTerminal<identifier>MQL5¥Files "フォルダに "Calendar.bin "として保存されるべきですが、そこにはありません。ビルド5200以前は、正しくそこに置かれていた。何が間違っているのだろうか?


これが私のセットアップではないことを確認するために、私は自分のネットワークの外にWindows VMをインストールした。ターミナルをダウンロードし、インクルードファイルとCalendar_Example EAをインストールしました。エラーコード1、calendar.binがダウンロードされていません:


 
v88 #:

何が問題なのか、何か思い当たることはある?

MQL5での変更が修正されるまでは、それを調べる意味があるとは思えない。以下のビルドを試してみてください。

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

最近、テスターで作業するためにカレンダー全体をファイルに保存すると、約50秒後にタイムアウトすることに気づきました。

Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, 0, 0); // <-- 5401 - ERR_CALENDAR_TIMEOUT (エラー終了)、

以前は問題なくカレンダー全体をファイルにダウンロードできました。端末のリリースの1つで、CalendarValueHistoryの タイムアウトが短縮されたのではないかと思います。

異なる端末、異なるサーバーで確認しましたが、端末はどこでもb5327でした。また、期間を短くしてみました。だから、1年間はタイムアウトもある。しかし、数日間は正常にダウンロードできます。

通話を短い期間に分割しないための回避策はありますか?

 
Denis Kislicyn CalendarValueHistoryの タイムアウトが短縮されたのではないかと思います。

異なる端末、異なるサーバーで確認しましたが、端末はどこでもb5327でした。また、期間を短くしてみました。だから、1年間はタイムアウトもある。しかし、数日間は正常にダウンロードされる。

通話を短い期間に分割しないための回避策はありますか?

少し調べてみました。CalendarValueHistoryに1ヶ月以上の期間を渡すと、関数は50秒ほどハングアップし、タイムアウトでクラッシュします。しかし、同じ呼び出しを1日だけ短くすると、70ミリ秒未満で実行され、約5,000のカレンダーイベントが完璧に保存されます。何かが確実に変わったのだ。

モデレーターによって自動翻訳が適用されました。ロシア語で投稿したい場合は、英語フォーラムではなく、ロシア語フォーラムで投稿してください。このトピックは多言語トピックですので、正しいフォーラムに投稿してください。