MT5のニュースフィルター:内蔵カレンダーとAPI、どちらを使う?
MetaTrader 5でEA(エキスパートアドバイザー)を作っているなら、MT4ユーザーにはない選択肢があります。ターミナルには経済指標カレンダーが内蔵されていて、MQL5のいくつかの関数で読み取れるのです。ダウンロードも、URLの許可も、データの解析もいりません。
では、なぜわざわざ外部のAPIを使うのでしょうか。内蔵カレンダーにはいくつか弱点があり、そのうち3つがニュースフィルターでは効いてくるからです。このガイドでは、まず内蔵カレンダーを使うコード、次にAPIを使うコードを紹介し、どちらを選べばよいかを説明します。
⚖️ 2つの方法を並べて比較
| MQL5の内蔵カレンダー | ShowMyTradesカレンダーAPI | |
|---|---|---|
| 準備 | 不要 | ツール → オプション → エキスパートアドバイザ(Tools → Options → Expert Advisors)でhttps://showmytrades.comを許可 |
| データの提供元 | MetaQuotes。ブローカーのサーバー経由で配信 | ShowMyTradesが複数の公開カレンダーを統合。主要な指標の発表日は、発表元の政府機関や中央銀行の情報と照合済み(confidence: official) |
| 使える環境 | カレンダーを有効にしているブローカー(大半は有効。一部のホワイトラベルのサーバーは非対応) | すべてのブローカー、インターネットにつながるすべてのターミナル |
| MT4対応 | いいえ | はい、同じファイルで |
| テスター対応 | はい、過去データあり | いいえ(テスターではネットワークが使えない) |
| タイムゾーン | 取引サーバーの時刻。UTCとの差は自分で割り出す必要あり | UTC(tsはUnixタイムの秒)。どのレスポンスにもサーバーの現在のUTC時刻が入っているため、EAがブローカーやVPSの時計に左右されることはありません |
| 値 | 予想、前回、結果(改定値あり) | 予想、前回、結果 |
| 費用 | 無料 | 無料、キー不要 |
🧱 方法A:内蔵カレンダー
次の関数は、チャートの銘柄を構成するどちらかの通貨について、重要度の高い指標発表が停止時間帯に入っているかどうかを返します。時刻は取引サーバーの時刻で、CalendarValueHistory()もこの時刻を前提にしています。
//--- MQL5の内蔵カレンダー:チャートの通貨について、重要度「高」の発表が
//--- 現在時刻の[-minutesBefore, +minutesAfter]の範囲にあるあいだtrueを返す
bool NativeNewsTime(const int minutesBefore, const int minutesAfter, string &reason)
{
reason = "";
datetime now = TimeTradeServer();
datetime from = now - minutesAfter * 60;
datetime to = now + minutesBefore * 60;
string currencies[2];
currencies[0] = SymbolInfoString(_Symbol, SYMBOL_CURRENCY_BASE);
currencies[1] = SymbolInfoString(_Symbol, SYMBOL_CURRENCY_PROFIT);
for(int c = 0; c < 2; c++)
{
if(c == 1 && currencies[1] == currencies[0]) break;
MqlCalendarValue values[];
if(CalendarValueHistory(values, from, to, NULL, currencies[c]) <= 0) continue;
for(int i = 0; i < ArraySize(values); i++)
{
MqlCalendarEvent ev;
if(!CalendarEventById(values[i].event_id, ev)) continue;
if(ev.importance != CALENDAR_IMPORTANCE_HIGH) continue;
reason = currencies[c] + ": " + ev.name;
return true;
}
}
return false;
}
ほかのフィルターと同じように、OnTick()から呼び出します。
string news;
if(NativeNewsTime(30, 30, news)) { Comment("News filter: ", news); return; }
頼る前に知っておきたい点が3つあります。
- ブローカー次第です。カレンダーは取引サーバーを通じてターミナルに届きます。使っているブローカーで
CalendarValueHistory()が-1を返し、エラーが5402なら、そのサーバーではカレンダーが有効になっていません。コードではどうにもなりません。 - UTCではなくサーバー時刻です。実際のチャートで動かす分には問題ありませんが、ほかのデータと突き合わせるときに苦労します。
- MT5専用です。MT4向けにも配布するEAでは、別の実装をもう1つ用意する必要があります。
🌐 方法B:カレンダーAPI
もう1つの方法は、無料のHTTPエンドポイントです。選んだ通貨と重要度について、今後数日分のニュースをCSVまたはJSONで返します。
https://showmytrades.com/api/public/calendar/v1?currency=EUR,USD&impact=high&days=2&format=csv
これを読み込むインクルードファイルSMT_NewsFilter.mqhは、MT4のガイドとAPIリファレンスに全文を載せています。MQL5でもそのままコンパイルできます。MQL5\Includeに保存し、ツール → オプション → エキスパートアドバイザでhttps://showmytrades.comを許可したら、次のように呼び出します。
#include <SMT_NewsFilter.mqh>
void OnTick()
{
string news;
if(SMT_IsNewsTime(news)) { Comment("News filter active: ", news); return; }
Comment("");
// ... エントリーのロジック ...
}
ダウンロードは15分に1回で、比較はTimeGMT()を使ってUTCで行います。入力パラメーター(SMT_Currencies、SMT_Impact、発表前と発表後の分数)は、EAの設定画面にそのまま並びます。
🎯 どちらを選ぶか
| 状況 | 選ぶもの |
|---|---|
| MT5だけで使う、ブローカーがカレンダーに対応している、フィルターをバックテストしたい | 内蔵 |
| 同じEAをMT4とMT5で使う | API:ファイル1つで、同じ動作 |
カレンダーに対応していないブローカー(5402) | API |
| cTraderでcBotも動かしている | API:cTraderでも同じデータ |
| あとで見直せるよう、ニュースを取引と一緒に記録したい | どちらでも。APIのタイムスタンプはUTCなので、ほかのログと時刻がそろいます |
両方を併用してもかまいません。内蔵カレンダーが応答すればそれを使い、応答しなければAPIを使う、という形です。ただ実際には、どちらか1つで十分です。
🧪 ニュースフィルターのバックテスト
2つのうち、ストラテジーテスターで使えるのは内蔵カレンダーだけです。テスターではインターネットが使えないからです。ただし、ニュースフィルターのバックテストで何が証明できるのかには注意が必要です。テストで使われるのは現在のカレンダーで、時刻は修正済み、あとから追加されたイベントも入っています。実運用のフィルターが知っているのは、その時点で予定されていた情報だけです。
❓ よくある質問
MT5の内蔵カレンダーは無料ですか?
はい。ターミナルの機能の一部で、ブローカーのサーバー経由で届きます。自分の側で有効にする設定はありません。
使っているブローカーでCalendarValueHistory()が何も返さないのはなぜですか?
一部のサーバー、特にホワイトラベルのサーバーは、カレンダーを中継していません。GetLastError()を確認し、5402ならカレンダーは利用できません。その場合はAPIを使ってください。
別の銘柄の通貨で絞り込めますか?
はい。_Symbolから読み取る代わりに、使いたい通貨コードを渡してください。API版では、EUR,USD,GBPのような文字列で入力パラメーターに指定します。
APIを使うのに会員登録は必要ですか?
不要です。キーもログインもいりません。上限はIPアドレスごとに毎分600リクエストで、15分に1回のリクエストなら、チャートをいくつ開いていても余裕で収まります。
🔗 関連ガイド
- MT4のEAにニュースフィルターを追加する方法:インクルードファイルの全文
- 経済指標カレンダーAPIのリファレンス:パラメーター、形式、上限
- cTraderのcBotにニュースフィルターを追加する
- EA(エキスパートアドバイザー)とは
どちらのカレンダーを選んでも、結果は運用実績に表れます。指標発表の急変動に飛び込むエントリーが減り、ドローダウンもなだらかになります。MT5口座を無料で連携して、チャートで確かめてください。
MT4のEAにニュースフィルターを追加する方法
MetaTrader 4には、EAから使える経済指標カレンダーがありません。無料のカレンダーAPI、インクルードファイル1つ、エントリー前に呼ぶ関数1つで、10分あれば組み込めます。MQL4のコードを全文掲載、APIキーは不要です。
cTrader cBotにニュースフィルターを組み込む方法(Cloud対応)
cTraderにはcBotから読める経済指標カレンダーのAPIがなく、cTrader CloudではHTTPリクエストも送れません。デスクトップでもクラウドでも動くニュースフィルターを、WebSocketで取得する無料のカレンダーとC#の全コードつきで紹介します。