Skip to main content

ドル円アノマリー追記:データが暴く「公務員の給料」も刈り取られる日

ドル円アノマリー追記:データが暴く「公務員の給料」も刈り取られる日


前回の記事では、「毎月25日の給料日」を起点としたシステム的な円売り・ドル買いアノマリーについて解説しました。今回はさらに解像度を上げ、「毎月1日〜31日の日付別」でドル円の平均変化率(リターン)を可視化してみました。

使用したPythonコードは以下の通りです。


‘’’Python

import yfinance as yf

import matplotlib.pyplot as plt

import pandas as pd

import seaborn as sns


# 分析期間の設定

dateStart = "2015-01-01"

dateEnd   = "2026-05-23"


ticker = "JPY=X"  # ドル円


df = yf.download(

    ticker,

    start=dateStart,

    end=dateEnd,

    auto_adjust=False,

    progress=False

)


if isinstance(df.columns, pd.MultiIndex):

    close = df["Close"][ticker].dropna()

else:

    close = df["Close"].dropna()


daily_return = close.pct_change() * 100

analysis_df = pd.DataFrame({"Return": daily_return})

analysis_df.index = pd.to_datetime(analysis_df.index)


analysis_df["Day_of_Month"] = analysis_df.index.day

analysis_df = analysis_df[analysis_df.index.dayofweek < 5]


pivot_table = analysis_df.groupby("Day_of_Month")["Return"].mean()

heatmap_data = pd.DataFrame(pivot_table).T


plt.figure(figsize=(20, 3))

sns.heatmap(heatmap_data, annot=True, cmap="coolwarm", center=0, fmt=".3f", 

            cbar_kws={'label': 'Average Daily Return (%)'}, linewidths=0.5)


plt.title("USD/JPY Average Daily Return by Day of the Month (1-31)\n(Positive[Red] = USD Buy / JPY Sell)")

plt.xlabel("Day of the Month")

plt.yticks([])

plt.tight_layout()

plt.show()

‘’’


出力された結果(1〜31日のヒートマップ)

結果は非常に示唆に富むものでした。

月末(民間サラリーマンの給料日起点)のドル買いとは別に、「毎月19日〜20日」にかけて強烈なドル買い(赤色)が点灯し、直後の「21日」に急落(青色)していることが分かります。

このサイクルの起点は何か?それは公務員の給料日および年金支給日(15日)です。

15日に振り込まれた巨大な資金が、NISAなどの自動積立システムを通じて約4営業日後(19日~20日)に為替市場に着弾します。そして、その機械的な「買い需要」をあらかじめ知っている海外の投機筋(スマートマネー)が、最高値でドルを売りつけ、弾が尽きた翌21日に一斉に利益確定をして価格を叩き落としているのです。