荒れるメジャーSQ週をPythonで分析したら・・・

2023年6月28日

よく「メジャーSQはあれる」と格言を聞くことがあるのですが、これ本当なんでしょうか。どうゆうふうにどのくらいあれるのかが分かればリターンんを得ることができるんじゃないでしょうか。

というわけで今回はメジャーSQのデータをダウンロードして分析してみたいと思います。

そもそもメジャーSQとは?

SQとは、特別清算指数(Special Quotation)の略語です。先物やオプションなどのデリバティブ商品は現物株とは違い“満期日”というものがあります。満期日の価格のことがSQと呼ばれていて、購入金額とSQの差額が利益/損失になります。

日経225やTOPIXなどのインデックスの満期日は月一回第二金曜日になっています。この中でも3月6月9月12月の満期日は決裁される商品が多く「メジャーSQ」と呼ばれています。

メジャーSQはなぜあれる?

メジャーSQがあれる理由はこの後の分析にはあんまり関係ないんで深堀しませんが、大きな理由は満期日にすべてのポジションが決裁されてしまうことにあるようです。その瞬間だけでも利益の出る方向へ動かして終わらせれば、株のように出口を考えなくても良いので、参加者は力ずくで価格を引っ張って終わらせようとします。

SQ値の決定は金曜日の寄り付きなので、売買の機会は第二木曜かその前日の第二水曜です。そのあたりに集中して大きな売買が行われるため、特に第二水曜日はあれる展開になりやすくなります。

Google Colabを使う

では実際はどうなっているのかデータを確認します。

私はいつもデータを見るときにGoogle ColabでPythonを使っています。ColabはGoogleが提供するプログラム作成環境です。GoogleやGmailアカウントを持っている人は無料で使えるので試してみてください。

使い方はGoogleにログインしたブラウザで次のリンクを開きます。

「ようこそ」ページを開くのでファイルメニューから新規作成を選んでください。空白のページが表示されます。

最初のブロックに次のコードを貼り付けてください。このコードは必要なツールをインストールしています。

import matplotlib.pyplot as plt 
%matplotlib inline
from pandas_datareader import data  as pdr
import datetime
import yfinance as yf 
yf.pdr_override() 

上記コードの"matplotlib"はグラフ関係のツールです。"pandas_datareader"は株価データをダウンロードするためのツール。"yf"はヤフーファイナンスのツールです。

ブロックの左の三角マークを押すと実行されます。これだけでは何も処理されませんが、エラーが出なければ準備OKです。

データを確認

試しにダウのデータをダウンロードします。ブロックをもう一つ開いて次のコードを貼り付けます。

DJI = pdr.get_data_yahoo('^DJI',  datetime.datetime(2022,1,1), datetime.date.today() ).loc[:,'Adj Close']

次に20年分のメジャーSQの日付を入力します。ちょっと多いですが、全部手打ちしてみました。

msqs = ['2003-03-14','2003-06-13','2003-09-12','2003-12-12',
       '2004-03-12','2004-06-11','2004-09-10','2004-12-10',
       '2005-03-11','2005-06-10','2005-09-09','2005-12-09',
       '2006-03-10','2006-06-09','2006-09-08','2006-12-08',
       '2007-03-09','2007-06-08','2007-09-14','2007-12-14',
       '2008-03-14','2008-06-13','2008-09-12','2008-12-12',
       '2009-03-13','2009-06-12','2009-09-11','2009-12-11',
       '2010-03-12','2010-06-11','2010-09-10','2010-12-10',
       '2011-03-11','2011-06-10','2011-09-09','2011-12-09',
       '2012-03-09','2012-06-08','2012-09-14','2012-12-14',
       '2013-03-08','2013-06-14','2013-09-13','2013-12-13',
       '2014-03-14','2014-06-13','2014-09-12','2014-12-12',
       '2015-03-13','2015-06-12','2015-09-11','2015-12-11',
       '2016-03-11','2016-06-10','2016-09-09','2016-12-09',
       '2017-03-10','2017-06-09','2017-09-08','2017-12-08',
       '2018-03-09','2018-06-08','2018-09-14','2018-12-14',
       '2019-03-08','2019-06-14','2019-09-13','2019-12-13',
       '2020-03-13','2020-06-12','2020-09-11','2020-12-11',
       '2021-03-12','2021-06-11','2021-09-10','2021-12-10',
       '2022-03-11','2022-06-10','2022-09-09','2022-12-09']

次にSQ当日の終値と火曜日の終値を比較してみます。SQ日の終値(msq_0)から火曜日の終値(msq_1)を引きます。それぞれ休みだった場合には一日ずらして計算します。

SQ日終値と火曜日終値の差を配列lに追加していきます。

l = []

for i in msqs:
  xdate = datetime.datetime.strptime(i,'%Y-%m-%d')

  try:
    msq_0 = dji.at[datetime.datetime.strftime(xdate,'%Y-%m-%d')]
  except:
    msq_0 = dji.at[datetime.datetime.strftime(xdate + datetime.timedelta(-1),'%Y-%m-%d')]

  try:
    msq_1 = dji.at[datetime.datetime.strftime(xdate + datetime.timedelta(-3),'%Y-%m-%d')]
  except:
    msq_1 = dji.at[datetime.datetime.strftime(xdate + datetime.timedelta(-4),'%Y-%m-%d')]

  l.append(msq_0 - msq_1) 

配列lをヒストグラムで表示してみました。

plt.hist(l, bins = 50)

20年分で80回メジャーSQがあったのですが、ヒストグラムを見るとその80回が下落して荒れたのか高騰して荒れたのかが分かります。

ヒストグラムの分析からわかること

メジャーSQをまたぐダウ平均の20年の動きは下のグラフのようになりました。

おお、二股のグラフになりました。

ヒストグラムは一般的に正規分布に近くなるのですが、このグラフの面白いところは、0付近の数値が低いことです。

つまり、”ほとんど値が動かないで終わる日が少ない”という事になります。

このデータからはやっぱりSQ前後はあれるんだなと、いう事が見て取れました。古いダウの値は安いのでデータ重みをつけるなどすればもっと違いがあるかもしれません。

ちなみにSQでない次の週のデータは下のようになります。

0の周りが一番大きいですね。一般的にはこの形になると思います。

メジャーSQはあれる

Pythonデータからの分析ではメジャーSQの前後はあれる!は正しそうです。でも200~300ポイントぐらいなので今の30000以上あるダウ平均から見たら1%以下でした。もっとあれる印象がありますけどね。