こんにちは。システムトレーダーの卵ことKenKenです。本日は、「Python3ではじめるシステムトレード ──環境構築と売買戦略」で勉強したことやそれに関連することを調べたのでまとめていきたいと思います。今回のテーマは「トレンド」です。
トレンドとは、株式、債券、不動産市場などにおいて、価格が一定期間継続して上昇または下落する動きのこと。トレンドには、“確定的トレンド”と“確率的トレンド”がある。確定的トレンドとは、経済成長と関係があるもの。”確率的トレンド”とは、経済・経済活動の状態を示す基礎的な要因とは全く無縁でランダムに発生するトレンドである。シストレでは、この2つのトレンドをいかに切り分け、確定的トレンドに乗っていけるかが鍵になるのではないでしょうか。
トレンドの発生要因
市場にトレンドが発生する要因として、経済成長、景気循環、公共政策、自然・環境・エネルギー問題などがある。資本・貯蓄、技術革新、設備投資、個人消費などもトレンド発生要因となる。技術革新の例として、企業が新商品開発の開発をしたことで株価が高騰する現象に該当するのではないでしょうか。資本・貯蓄、個人消費がトレンドと関係あるということから、株価データだけでなく、マクロ指標データを取り入れる必要がありそう。そうすることで、確定的トレンドと確率的トレンドを分類につながっていくのかもしれない。また、天候、環境、エネルギーなどもトレンド発生要因となるそうだ。したがって、今後のモデル開発では、気象データ等も扱っていきたい。気象データとなると衛星画像とか?近年は、AIによる画像認識技術も発展してきており、実際の運用現場でも衛星画像を分析して運用に活かしているそうな。有名どころだと、ウォールマートの駐車場画像とか。ただ、個人で開発していくとなると、そういうデータはなかなか手に入らないor手に入れるのが面倒そう。。。
日本経済を景気循環ごとに分析してみた
景気循環期については、内閣府が公表しており、現時点までを16期に分類している。(詳細はこちら)今回は、以下の表に分類し、各循環期について簡単に分析してみた。日経平均株価のデータは、FREDのデータベースから取得。
循環期 | 景気 | 期間-始点 | 終点 |
1, 2 | 戦後復興期(recover) | 1949/5/16 | 1954/11/30 |
3, 4, 5, 6 | 高度経済成長気(growth) | 1954/12/1 | 1971/12/31 |
7, 8, 8, 10 | 安定期(stable) | 1972/1/1 | 1986/11/30 |
11 | バブル経済期(bubble) | 1986/12/1 | 1993/10/31 |
12, 13, 14, 15,16 | 経済変革期(reform) | 1993/11/1 | 2019/11/30 |
独自設定 | 新型コロナウィルス期(covid-19) | 2019/12/1 | 現在(2020/11/25) |
年間変化率・ボラティリティ
まずは、全期間のグラフと各循環期における年間変化率・ボラティリティを算出してみる。
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"] for i in range(len(dates)-1): ax.plot(N225[dates[i]:dates[i+1]], color=colors[i]) ax.annotate(states[i], xy=(pd.to_datetime(dates[i]), 6000*i), color=colors[i])

# 各期間の変化率とボラティリティを計算 results = [] for i in range(len(dates)-1): r = N225[dates[i]:dates[i+1]].pct_change().mean()[0] * 250 # 年率変換 vol = np.log(N225[dates[i]:dates[i+1]]).diff().std()[0] * np.sqrt(250) results.append((r, vol)) df = pd.DataFrame(results, index=states, columns=['Return(%)', 'Vol(%)']) * 100 pd.options.display.precision = 2 # 小数点以下2桁 df

新型コロナウイルス期以外について、ここまでの結果を見ると、戦後復興期、高度経済成長期、安定期の変化率が13~14%と大差はない。一方、バブル崩壊を含むバブル経済期やリーマンショックを含む経済変革期においては、2~3%とかなり低く、ボラティリティがかなり高いことがわかる。
新型コロナウイルス期においては、かつてない変化率とボラティリティを記録している。日経平均株価は、直近で26000円台まで上昇いる。新型コロナウイルスのワクチン開発が進み、景気回復期待から日本株の買いが増えているためだと思われる。ボラティリティに関しては、かつてない上昇率と新型コロナウイルスの拡大に伴う大幅な反落とのギャップから高い結果となっている。
上記で話したトレンドという観点に結び付けて考えてみる。新型コロナウイルスの拡大に伴い、全世界ではロックダウン措置が取られた。結果、飲食店や各店舗での営業中止や企業の営業活動縮小に伴い、個人消費は減少し、景気は縮小。一方、新技術開発(ワクチン開発)の発表に伴い、景気は反発し、最近は回復傾向にある。新型コロナウイルスにより、何かしらのトレンド(上昇・下落)は発生していたのだろう。
まとめ
今回は、トレンドについて簡単にまとめてみた。トレンドはシストレ開発におていも切っても切れない大切な概念だろう。今後開発予定のシストレにもトレンドをベースとしたものがメインになるであろうからこの辺については、理解を深めておきたい。