日中リターンとオーバナイトリターン

 本記事ではPython3ではじめるシステムトレード ──環境構築と売買戦略」で勉強したことやそれに関連して調べたことをまとめております。コロナショックについても合わせて考察しております。

トレンド判定に必要なデータの前処理

トレンドを判断するときは、価格自体の変化に着目する以外に、価格データを加工して判断することもあります。加工方法方としては、以下の4つがあります。

  • 価格の対数(lnp)
  • 価格の変化率(r)
  • 価格の対数の差(lndp)
  • 価格の差(dp)

対数を取ると変化率がどの価格帯でも同じスケールにすることができます。その為、価格の動きを長期で見るときには対数をとって確認する必要があるようです。

価格の差(dp)は、スケールの影響を受けやすい為、注意が必要です。
例えば、1000円の株価が前日比で100円上昇したというのと10000円の株価が100円上昇したのとでは、まったく意味合いが異なります。価格で見たら変化した価格は同じですが、%表記で比較したら一目瞭然です。(10%の上昇と1%の上昇)。

変化率の対数をとったものを対数収益率と言います。対数収益率は、ブラックショールズの価格モデルで用いられていることで有名です。特徴として、スケールの変化の自動平均補正機能を持つというものがあります。一般的に分析では、対数収益率が利用されます。

日経平均株価の分析:価格変化の落とし穴!

前回の記事では、過去の日経平均株価のグラフを書きました。今回は、対数収益率に変換してグラフを書いてみます。コードは、以下の通り。

import pandas_datareader.data as pdr
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
N225 = pdr.DataReader('NIKKEI225', 'fred', '1949/5/15').dropna() # 日経平均株価取得
states = ['recover', 'growth', 'stable', 'bubble', 'reform', 'covid-19']
dates = ['1949/5/16', '1954/12/1', '1972/1/1', '1986/12/1', '1993/11/1', '2019/12/1', '2020/11/25']
# グラフを表示
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
colors = ["m", "b", "c", "g", "r", "k"]
# 対数価格を計算
ln_N225 = np.log(N225)
for i in range(len(dates)-1):
    ax.plot(ln_N225[dates[i]:dates[i+1]], color=colors[i])
    ax.annotate(states[i], xy=(pd.to_datetime(dates[i]), ln_N225.asof(dates[i])-0.5), color=colors[i])

今回書いたグラフは左側になります。右は前回の価格ベースで図示したものになります。
スケールの違いからグラフの形状が少し異なるのがわかります。日経平均株価はバブル崩壊まで安定的にリターンを達成していることがわかります。左右でほぼ同一のグラフにも見てとれますが、対数に変換することでグラフが緩やかにやり安定している様子も見られます。一方で、右側のチャートだけ見ると、価格変化がかなり激しいように見えます。

このようなことから長期チャートを対数表示にする必要があることがわかります。

日中リターンとオーバナイトリターンの比較

株式市場は24時間取引されているわけではないです。
経済指標や政府の決定などは市場が閉じているときに行われることも少なくないです。また、投資家は市場が閉じている際も分析をしたり、タイムリーなニュースなどを参考に次の投資判断を検討していたりもします。
そのような市場参加者の行動をつかむ方法として、市場の寄り付きから引けまでの日中の価格変化と、市場の引けから翌日の寄り付きまでのオーバーナイトの価格の変化を比べることがあります。

そこで、ここでは実際に日経平均株価についてみてみます。
利用するデータは、 Yahoo Finance から取得しました。データ取得については、こちらにまとめております。

# リターンを計算
R_interday = np.log(N225.Close / N225.Open[1:]) # 日中リターン
R_overnight = np.log(N225.Open[1:] / N225.Close) # オーバナイトリターン
# 図示
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax2 = ax.twinx()
ax.plot(N225.Close, label='Close', linewidth=1, color='gray')
ax2.plot(R_interday.cumsum(), label='interday', linestyle=':', color='r')
ax2.plot(R_overnight.cumsum(), label='overnight', linestyle='--', color='b')
plt.legend()

青がオーバナイトリターン、赤が日中リターンです。
バブル崩壊後、次のような特徴が見られるます。

  • 終値の下落
  • オーバナイトでの指数は上昇

原因は定かではありませんが、短期の投資家が寄り付きでポジションを立て、引けでポジションを閉じることが要因として考えられます。

他の指数についても同じような特徴が見られるか確認してみます。

左がS&P500、右がダウ工業株価連動ETFです。指数ごとに特徴が異なることがわかります。
S&P500は、日中リターンとオーバーナイトリターンの差が解消されています。
一方、ダウ工業株連動ETFでは、日中リターンとオーバーナイトリターンが逆転しています。
これらの指数では、日中の終わりに買って、翌日の寄り付きで売るといった単純な戦略は機能しなさそうに見えます。

日経平均株価についてもう少し詳しく。。。

上で見てきたように、他の指数についてはオーバナイトリターンは狙えなさそうでしたが、日経平均株価は可能性が残されているようにも見えました。

ここでは更に期間を短くして、日中リターンとオーバーナイトリターンの様子を見てみます。

直近1年
直近5年
直近10年

左から順に直近1年、直近5年、直近10年になります。

期間が長くなれば日中リターンとオーバナイトリターンに差が見られますが、期間を短くすると差がなくなるどころか日中リターンの方がプラスに転じている様子が見れられます。

左のグラフについてみてみると、2020年2月~3月頃から日中リターンとオーバナイトリターンが逆転しています。新型コロナウイルスをWHOが確認したのが2020年1月14日で、1月30日にWHOが国際的な緊急事態宣言を発令しております。2月には国内で初の死亡者が出ました。他にも様々な出来事はありましたが、新型コロナウイルスの拡大に伴い、投資家は慎重になったことがこのグラフから読み取れます。寄り付き後に不安材料が無いことを確認し、ポジションを立てるような行動をする投資家が増えているのかもしれないです。

少し話が少し逸れましたが、日経平均株価についても、日中の終わりに買って、翌日の寄り付きで売るといった単純な戦略は機能しないように見えます。市場が効率的でない場合には、うまくいくのかもしれません。他の個別銘柄単位などで見てみると面白い結果が得られるかもしれないです。

まとめ

本記事では日中リターンとオーバーナイトリターンについて簡単な分析してみました。
直近についてみてみると、新型コロナウイルスのイベントをきっかけに両リターンが逆転しているという発見がありました。新型コロナウイルスの感染者数と株価の関係や、新型コロナウイルスのニュースとの関係性などについて分析してみるのも興味深いです。前回の記事でもふれたが、新型コロナウイルスによる確定的トレンドはあるように見えます。

コメント

タイトルとURLをコピーしました