Ichigowa

If you trade — or just hold anything denominated in dollars — you already know the drill: FOMC decisions, CPI prints, and NFP releases move markets in seconds, and the only warning you get is whatever tab you happened to leave open. This post walks through a small n8n workflow that polls an economic calendar every morning and pushes high-impact USD events straight to Telegram. Total build time: about 15 minutes. Total cost: $0 on free tiers.

ForexFactoryを手動で確認する問題点

ForexFactoryのカレンダーは小売トレーダーにとって事実上の標準ですが、人間向けに作られており、マシン向けではありません:

  • 公式APIがありません。 カレンダーはクライアントサイドでタイムゾーン処理が行われるHTMLで描画されています。非公式の週次XMLフィードがありますが、粗く、キャッシュされ、事前の通知なしに壊れたことがあります。
  • 手動での確認はスケールしません。 1週間は熱心に確認するものの、CPI発表が確認しなかった日に発表され、逃してしまうことがあります。
  • 自分でスクレイピングするのは面倒です。 サイトはCloudflare、セッション依存のタイムゾーンクッキー、頻繁に変更されるマークアップを使用しており、素朴なスクレイパーは定期的なメンテナンスが必要です。

商用経済カレンダーAPIに料金を支払うこともできますが、予測値/前回値を含むティアの場合、ほとんどの場合月額$30〜100から始まります。今日予定されている大きなイベントについて通知を受けたいだけなら、これはやり過ぎです。

アクター

事前開示:このチュートリアルで使用するアクターは私が構築したものですので、その点を考慮して推奨してください。

economic-calendar-pro はForexFactoryのカレンダーをスクレイピングし、クリーンなJSONを返すApifyアクターです。面倒な部分(タイムゾーン、セッションクッキー、マークアップのずれ)を処理し、通貨と影響度レベルのフィルター、任意のWebhookアラートを提供します。各イベントは以下のような形式で出力されます:

{
  "title": "CPI m/m",
  "country": "USD",
  "currency": "USD",
  "impact": "High",
  "date_utc": "2026-08-12T12:30:00Z",
  "forecast": "0.2%",
  "previous": "0.3%",
  "actual": "",
  "week": "this",
  "source": "forexfactory"
}

Enter fullscreen mode Exit fullscreen mode

Apify上で動作するため、何もホストする必要はありません。1つのHTTPエンドポイントを呼び出してデータセットアイテムを同期的に取得できます。

構築するもの

Schedule (weekdays 07:00)
  → HTTP Request (run actor, get this week's USD high-impact events)
  → Filter (belt-and-suspenders: impact == high, currency == USD)
  → Telegram (one message per event)

Enter fullscreen mode Exit fullscreen mode

該当するイベントがない場合、フィルターはすべてを除外し、何も送信されません。静かな日は静かなままです。

前提条件

  • n8nインスタンス(クラウドまたはセルフホスト — docker run -p 5678:5678 n8nio/n8n で動作します)
  • 無料の ApifyアカウントSettings → Integrations からAPIトークンを取得してください
  • Telegramボット:@BotFather にメッセージを送信し、/newbot を送信してトークンを保存します。その後、ボットに一度メッセージを送信し、https://api.telegram.org/bot<TOKEN>/getUpdates からチャットIDを取得します

ステップ1:スケジュールトリガー

Schedule Trigger ノードを追加します。cron式に切り替えます:

0 7 * * 1-5

Enter fullscreen mode Exit fullscreen mode

これは平日07:00で、08:30 ETのリリース(CPI、NFP)と午後のFOMC声明に十分間に合います。まだ設定していない場合は、n8n設定でインスタンスタイムゾーンを設定してください — cronはインスタンス時間で実行されます。

ステップ2:HTTP Requestノードでアクターを呼び出す

HTTP Request ノードを追加します(typeVersion 4.x):

  • Method: POST
  • URL:
https://api.apify.com/v2/acts/ichigowa~economic-calendar-pro/run-sync-get-dataset-items

Enter fullscreen mode Exit fullscreen mode

  • Headers:
Authorization: Bearer YOUR_APIFY_TOKEN
Content-Type: application/json

Enter fullscreen mode Exit fullscreen mode

  • Body (JSON):
{
  "weeks": ["this"],
  "currencies": ["USD"],
  "impacts": ["High"]
}

Enter fullscreen mode Exit fullscreen mode

run-sync-get-dataset-items エンドポイントがここで役立ちます:アクターを開始し、完了を待ち、データセットアイテムをレスポンスボディに直接返します。実行ステータスのポーリングや結果を取得するための2回目のリクエストは必要ありません。コールドアクターの実行に30〜60秒かかる可能性があるため、ノードのタイムアウトを約120秒に増やしてください。

Execute step をクリックします。CPI発表がある日には以下のような結果が得られます:

[
  {
    "title": "CPI m/m",
    "currency": "USD",
    "impact": "High",
    "date_utc": "2026-08-12T12:30:00Z",
    "forecast": "0.2%",
    "previous": "0.3%"
  },
  {
    "title": "Core CPI m/m",
    "currency": "USD",
    "impact": "High",
    "date_utc": "2026-08-12T12:30:00Z",
    "forecast": "0.3%",
    "previous": "0.3%"
  }
]

Enter fullscreen mode Exit fullscreen mode

n8nは配列を自動的に各イベントごとに1つのアイテムに分割します。これが下流で必要なものです。

ステップ3:フィルター(多層防御)

アクターはすでにサーバーサイドでフィルタリングを行っていますが、ここでFilterノードを追加するのが好みです — 後でアクターの入力をすべての通貨に広げ、このワークフローがTelegramにフィードすることを忘れた場合に保護します。ANDで結合された2つの条件:

  • {{ $json.impact }}High と等しい
  • {{ $json.currency }}USD と等しい

安価な保険、費用はゼロです。

ステップ4:Telegramメッセージ

Telegram ノードを追加し、操作をSend Messageにし、作成したボット認証情報を使用します。チャットIDを設定し、Markdown解析モードを有効にし、以下を使用します:

🔔 *{{ $json.title }}*
Currency: {{ $json.currency }} | Impact: {{ $json.impact }}
Time (UTC): {{ $json.date_utc }}
Forecast: {{ $json.forecast || 'n/a' }} | Previous: {{ $json.previous || 'n/a' }}

Enter fullscreen mode Exit fullscreen mode

フィルターは各イベントごとに1つのアイテムを出力するため、各イベントごとに1つのメッセージが得られます。FOMCの日には通常2〜3つのメッセージ(金利決定、声明、記者会見)が送信されます。ほとんどの日は0または1です。

実行する

ワークフロー全体を手動で一度実行してサニティチェックを行い、その後Activeに切り替えます。Telegramでのサンプル出力:

🔔 Consumer Price Index (CPI) m/m
Currency: USD | Impact: High
Time (UTC): 2026-08-12T12:30:00Z
Forecast: 0.2% | Previous: 0.3%

費用

  • n8n: セルフホストは無料。クラウドは約€20/月から始まりますが、このワークフローはどのティアにも収まります。
  • Apify: 無料プランには月額$5のプラットフォームクレジットが含まれます。このアクターの1日の実行は数セント程度です — 平日朝のスケジュールは快適に無料ティア内に収まります。クレジットカードは必要ありません。
  • Telegram: 無料。

トラブルシューティング

この正確な設定で人々が遭遇した失敗モードをいくつか:

  • ApifyからHTTP 401。 ヘッダーは文字通り Authorization: Bearer apify_api_xxx... である必要があります — よくある間違いはトークンをBearerプレフィックスなしで貼り付けるか、アカウントパスワードではなくAPIトークンを使用することです。
  • 同期エンドポイントでHTTP 408 / タイムアウト。 run-sync-get-dataset-items は待機時間を300秒に制限しています。アクターの実行がHTTPノードのタイムアウトを超える場合は、まずノードのタイムアウトを上げてください。アクター自体は1分以上かかることはほとんどありません。
  • イベントが期待されるのに空の配列。 weeks パラメータはカレンダー週全体("this"、"next"、"last")を取得するため、空の結果は通常フィルターが厳しすぎることを意味します — 例:中程度の影響度のUSDイベントしかない週に impacts: ["High"] を指定した場合。影響度の値は大文字です:HighMediumLowHoliday
  • Telegramが何も送信せず、エラーもない。 通常、ボットに最初にメッセージが送信されていない(ボットはチャットを開始できない)、またはチャットIDが先頭に - が欠けているグループIDです。
  • 編集後に重複アラート。 ワークフローを再アクティブ化すると、設定によってはn8nがキャッチアップ実行を行う可能性があります。予期しない午前2時のメッセージが表示される場合は、Workflow Settings → Timezone/Execution を確認してください。

試す価値のあるバリエーション

  • より広いネット: "currencies": ["USD", "EUR", "GBP"] を設定し、フィルターの通貨条件を削除します。
  • 同時間警告: 30分ごとに実行する2番目のスケジュールを追加し、{{ $json.date_utc }} が次の1時間以内であるようなFilter条件を追加して、リリース直前に通知を受け取るようにします。
  • 異なる送信先: TelegramノードをDiscord/Slackに置き換えます — アクターの出力は変更されません。
  • プルではなくプッシュ: アクターはWebhookアラートをネイティブにサポートしているため、スケジュールを完全にスキップしてn8n Webhookトリガーを使用できます。

リンク

質問や壊れたエッジケースがあれば、コメントを残してください — アクターは積極的にメンテナンスされており、問題報告は本当に役立ちます。