T+1またはT+2の決済日を計算する

2026年11月25日(水曜日)の取引では、11月26日(木曜日)が米国の祝日のため、米国株のT+1決済日は2026年11月27日(金曜日)、USD/JPYスポット取引のT+2決済日は11月30日(月曜日)です。決済日=取引日+N営業日とし、週末と関係国のいずれかが休業する日を除外します。

APIで決済日を計算する

T+1は取引日の1営業日後を意味します。米国株とETFは2024年5月28日からT+1で決済されています。FXスポット取引は通常T+2で決済されますが、日数は市場慣行によるため、取引先の規則に従って決済期間を選択してください。

  1. 決済期間を選択 daysに取引後の営業日数を設定します。この例では米国株にT+1、USD/JPYスポットにT+2を使用します。取引日は起点となり、その期間には数えません。
  2. APIキーを設定 無料のAPIキーを取得し、環境変数NARWHAL_API_KEYに保存します。スクリプトはその変数を読み取り、Authorization: Bearer YOUR_KEYとしてキーをhttps://api.narwhalapi.comに送信します。
  3. 国を選択 米国株の例にはUSAを、USD/JPYにはUSAとJPNの両方を使用します。スクリプトはGET /v1/calendars/holidays/{country}/{year}で祝日をリクエストします。リスト内のいずれかの国が祝日であれば、その日付は集計から除外します。
  4. 日付を計算 スクリプトに取引日、決済期間、国のリストを指定します。暦日で1日ずつ進め、平日かつリスト内の祝日に当たらない日だけを数えます。各国と年の祝日はキャッシュに保存されるため、ループで日付を進める際に再度リクエストする必要はありません。
    Python、株式と通貨ペアの決済日
    import os
    from datetime import date, timedelta
    from functools import cache
    import requests
    
    API = "https://api.narwhalapi.com"
    HEADERS = {"Authorization": f"Bearer {os.environ['NARWHAL_API_KEY']}"}
    
    @cache  # one request per country and year, however many days the loop walks
    def holidays(country: str, year: int) -> frozenset[str]:
        r = requests.get(f"{API}/v1/calendars/holidays/{country}/{year}", headers=HEADERS, timeout=10)
        r.raise_for_status()
        return frozenset(h["date"] for h in r.json()["holidays"])
    
    def settlement(trade: date, days: int, countries: list[str]) -> date:
        """The date `days` business days after the trade, skipping a day any listed country is closed."""
        day = trade
        while days > 0:
            day += timedelta(1)
            closed = any(day.isoformat() in holidays(c, day.year) for c in countries)
            if day.weekday() < 5 and not closed:
                days -= 1
        return day
    
    trade = date(2026, 11, 25)
    print("US stock, T+1:", settlement(trade, 1, ["USA"]))
    print("USD/JPY spot, T+2:", settlement(trade, 2, ["USA", "JPN"]))

祝日の検索には判定対象の日付の年を使うため、ループが別の年に進むと、その年に該当する国別リストをリクエストできます。祝日関数がキャッシュを保持し、決済関数は各取引の日付、日数、国を入力として受け取ります。祝日の日付はレスポンスのholidaysリストから取得します。関数は各dateの値を読み取ってループ内の日付と比較し、リスト内のいずれかの国で一致すれば、その日を決済までの日数に含めません。

スプレッドシートで決済日を計算する

ExcelとGoogle Sheetsでは、WORKDAYで同じ営業日計算ができます。休業日をHolidaysという名前の範囲に入力し、数式に取引日と決済期間を指定します。通貨ペアの場合は、両国の祝日リストをその範囲にまとめます。

2026年11月25日のT+1
=WORKDAY(DATE(2026,11,25), 1, Holidays)
2026年11月25日のT+2
=WORKDAY(DATE(2026,11,25), 2, Holidays)

Holidays範囲は、数式が週末に加えて除外する日付を指定します。米国株の例では米国のリストを使用します。USD/JPYには米国と日本のリストを含め、どちらかの国が休業する日を集計から除外します。

数式の決済期間と祝日の範囲はそれぞれ役割が異なります。期間をT+1からT+2に変更すると数える営業日数が変わり、範囲を変更すると集計対象となる日付が変わります。範囲を用意する際は、取引に関係する国を使用してください。

状況に応じた方法の選び方

状況適した方法理由
1件の取引統合した祝日リストを指定したスプレッドシートのWORKDAY数式は指定した休業日を使って決済期間を数えます。
取引台帳や毎晩の決済処理Pythonスクリプト国のリストで祝日を指定し、関数が取引日に対応する決済日を計算します。
聖金曜日や短縮取引を含む取引所固有のカレンダー取引所独自のカレンダーNarwhalのリストは祝日を含み、取引所の休場日とは異なる場合があります。

T+2では相手通貨の国の祝日も除外しますか?

はい。FXの慣行では両通貨の営業日を数えるため、どちらかの国の祝日を除外します。USD/JPYでは関数にUSAとJPNの両方を渡します。片方の国のリストだけを使うと、もう一方の国の祝日が計算に反映されません。

取引日と決済日の間に祝日があっても、決済期間はT+2のままです。祝日は営業日として数えないため、決済日が暦上で後にずれます。1営業日目を数えた後も、週末は除外します。

取引日自体が祝日の場合はどうなりますか?

取引日の後の最初の営業日が1日目です。スクリプトは指定された取引日から翌暦日に進み、国のリスト内で祝日に当たらない平日を探します。

指定日の直後が週末や別の祝日の場合も除外します。関数は指定された営業日数を数え終わるまで処理を続けます。スクリプトは指定された取引日をこのように扱い、決済期間は市場慣行と取引先の規則に従います。

祝日リストは取引所のカレンダーと一致しますか?

常に一致するとは限りません。Narwhalの祝日データは国別の祝日を含み、取引所の休場日は異なる場合があります。NYSEは2026年4月3日の聖金曜日に休場しますが、この日はAPIの米国連邦祝日リストには含まれません。

決済が取引所固有の休場日や短縮取引に左右される場合は、取引所独自のカレンダーを使用します。国別リストは計算に使う祝日を提供し、リストにない取引所の休場日は追加しません。

計算例:2026年11月25日(水曜日)の取引

2026年11月25日(水曜日)を起点とします。11月26日(木曜日)は米国の感謝祭なので、どちらの例でも営業日として数えません。11月27日(金曜日)が1日目となり、米国株はT+1に達してこの日に決済されます。

日付米国株、T+1USD/JPYスポット、T+2
2026年11月25日(水曜日)取引日取引日
2026年11月26日(木曜日)感謝祭を除外米国の感謝祭を除外
2026年11月27日(金曜日)1日目、決済1日目
2026年11月28日(土曜日)週末を除外
2026年11月29日(日曜日)週末を除外
2026年11月30日(月曜日)2日目、決済

USD/JPYでは金曜日が1営業日目です。土曜日と日曜日は数えないため、11月30日(月曜日)が2日目になります。2026年11月25日の取引のT+2決済日は、2026年11月30日(月曜日)です。

2026年11月25日の取引の決済日
US stock, T+1: 2026-11-27
USD/JPY spot, T+2: 2026-11-30

公開。