#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"inputstring inCurrency = "USD"; // 通貨inputstring inFilterName = "payrolls"; // フィルター名input group "EA"inputint inTP = 1000; // テイクプロフィットinputint inSL = 1000; // ストップロスinputbool inReverse = true; // トレードの方向性
CALENDAR Calendar; // Объект с данными календаря.intOnInit()
{
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__// Работаем в Терминале.elseif (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);
}
voidOnTick()
{
staticint 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( constint Type, conststring 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 FAKEintOnInit() { return(INIT_FAILED); }
#endif // #ifndef FAKE #else
----------------- Открываю Метатрейдер, который давно вообще не открывал. Иду в MetaEditor - там не подключено к Git - ----------------- Проверил логин во вкладке Сообщество. То есть - пока я глядел на вкладку Сообщество в MetaEditor е - этот MetaEditor сам все сделал
こんにちは。カレンダーを特定の時間に移動させることはできますか?
取引、自動取引システム、取引戦略のテストに関するフォーラム。
ライブラリ: カレンダー
fxsaber, 2023.04.13 11:46 am.
これは1行で解決します。
Calendar += 3600.すべての機能は覚えていません。ALT+Mが 役立ちます。
すべての機能を覚えているわけではない。ALT+Mが 役に立つ。
これは合理的だ。残念ながら、私はまだ準備ができていません。
こんにちは - カレンダーEAのサンプルを使用したところ、カレンダーデータを読み込んでいないようです。バージョン5.0ビルド5200以前は問題なく動作していました。何が問題なのか、または修正方法があれば教えてください。ありがとうございます。
確認しました。
これらのファイルは、すべての端末に対して単一のカレンダーを保存します。
チェックした。
これらのファイルは、すべての端末用の単一のカレンダーを保存します。
あなたのテスト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以前は、正しくそこに置かれていた。何が間違っているのだろうか?
あなたのテスト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がダウンロードされていません:

何が問題なのか、何か思い当たることはある?
MQL5での変更が修正されるまでは、それを調べる意味があるとは思えない。以下のビルドを試してみてください。
最近、テスターで作業するためにカレンダー全体をファイルに保存すると、約50秒後にタイムアウトすることに気づきました。
以前は問題なくカレンダー全体をファイルにダウンロードできました。端末のリリースの1つで、CalendarValueHistoryの タイムアウトが短縮されたのではないかと思います。
異なる端末、異なるサーバーで確認しましたが、端末はどこでもb5327でした。また、期間を短くしてみました。だから、1年間はタイムアウトもある。しかし、数日間は正常にダウンロードできます。
通話を短い期間に分割しないための回避策はありますか?
異なる端末、異なるサーバーで確認しましたが、端末はどこでもb5327でした。また、期間を短くしてみました。だから、1年間はタイムアウトもある。しかし、数日間は正常にダウンロードされる。
通話を短い期間に分割しないための回避策はありますか?
少し調べてみました。CalendarValueHistoryに1ヶ月以上の期間を渡すと、関数は50秒ほどハングアップし、タイムアウトでクラッシュします。しかし、同じ呼び出しを1日だけ短くすると、70ミリ秒未満で実行され、約5,000のカレンダーイベントが完璧に保存されます。何かが確実に変わったのだ。