【コピペで動く!】株価の分布、銘柄の比較など、Pythonの数理統計関数(標準偏差、中央値など)による分析 【Google Colabで違いをみつけろ!】

スポンサーリンク
投資

Pythonの数理統計関数などの資料をまとめます。また、実際にどのように自分が使っているかを示したいと思います。

この記事でできる事

この記事で行えることは銘柄を
ダウンロードし、
チャートを表示し、
数理統計関数で特性を調べ(mean, std, median など)、
株価分布を調べ(ヒストグラムと箱ひげ図)、
ドローダウンを調べることとなります。



以下のようにツイートを拝見しました。

Webサービスで入手できるものなのか、できないとしたら、Pythonで簡単に調べることができるのか、確認したいと思います。

下準備

いつも通りGoogle Colaboratoryのpythonを使うことにより、無料で、簡単に調査します。

Google Colaboratory については以下の記事を参考にして下さい。

検証対象と検証期間

以下のコードにより、データを取得します。今回データを取得するのは
QYLD (Nasdaq 100 Covered Call ETF),
QQQ (Invesco QQQ Trust),
SPY (SPDR S&P 500 ETF Trust)
とし、検証期間は 2014-12-31 から 2021-08-20 までとします。

ETFreplay.com でのデータは以下のようになっています。

出典 ETFreplay.com

Pythonでのデータ取得とWebサービスとの比較

上記チャートと同じものを得るには以下のコードとなります。

!pip install yfinance --upgrade --no-cache-dir

import datetime
import yfinance as yf
import matplotlib.pyplot as plt
%matplotlib inline

start = datetime.date(2014,12,31)
end = datetime.date.today()

codelist = ["QYLD","QQQ","SPY"]

data2 = yf.download(codelist, start=start, end=end)["Adj Close"]
display(data2.head(2).append(data2.tail(2)))

df_pct=100*data2.pct_change().dropna()
display(df_pct[codelist].head(2).append(df_pct[codelist].tail(2)))

df=(1+data2.pct_change()).cumprod()
df.plot(figsize=(8,6),fontsize=18)
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5), fontsize=18)  

plt.grid(True)
plt.show()

QYLDはナスダック100のカバードコールを行うETFのようですが、おそらく近すぎる位置のCallを売っているのか、ナスダック100の上昇分をあまり取り切れていないようにも思いますが、この部分は本題ではありませんので、ここでは割愛します。

分布、数理統計値を調べる

Pythonにはよく使う数理統計関数は多数あります。基本的なものを使い方も含めご紹介します。

plt.figure(figsize=(10,6))
plt.hist(df_pct.values, label=df_pct.columns,align='mid',bins=25)
plt.legend()

print(df_pct.std())
print(df_pct.mean())
print(df_pct.median())

今回は全区間の分散、算術平均、中央値を出してみました。

基本統計量の算出について、どのような関数があるかは以下のサイトが参考になります。

Python 統計量の算出
マーケティングセールスデータを用いてPythonでの基本統計量の算出方法についてご説明します。

調査区間を区切りたい場合

もし、年ごと、月ごとなど期間を区切りたい場合は以下のようなgroup関数を使う手もあります。

analyse=df_pct.groupby([lambda x: x.year,lambda x: x.month])
display(analyse.std())

箱ひげ図

全区間の箱ひげ図は以下のようになります。

df_box=df_pct.dropna()

plt.figure(figsize=(10,6))
plt.boxplot(df_box.values,labels=df_box.columns)
plt.show()

pyfolioを使いたいのですが、、、

以前、pyfolioというモジュールを紹介したりしたのですが、残念ながら現在その更新が行われておらず、一部エラーが起こっているようです。

米国株のパフォーマンス・成績をPythonで早く、綺麗に調べる [Python 米国株 pyfolio コードあり]|TF
米国株のパフォーマンス・成績をPythonで簡単に調べることのできるモジュール pyfolio をご紹介したいと思います pyfolio というものですが、まずは、どのようなことができるのか先に画像を見てもらったほうが早いと思います。 高値更新からのドローダウンを出してみてたり、月ごと、年毎の成績を出したり、期...

ですが、一部の機能は動くようなので、紹介します。

!pip install pyfolio

import pyfolio as pf

plt.figure(figsize=(10,5))

pf.plot_return_quantiles(0.01*df_pct["QYLD"]);

日次、週次、月次の変化の分布が簡単に出せるようです。

pf.plot_drawdown_underwater(0.01*df_pct["QYLD"]);

また、高値からのドローダウンも簡単に出すことができます。

駆け足ではありますが、株価の分布、銘柄の比較など、Pythonの数理統計関数による分析方法についてご紹介しました。

---

関連動画

なお、箱ヒゲ図をトレードで使う方法やオプションの減価について、片岡先生の説明動画を紹介しておきます。

日経225株価指数の時間変化

2017年の動画ですが、価格の時間変化で平方根を使う理由やオプション価格の減価について簡単に説明されていらっしゃいます。今でも有効です。

片岡先生の紹介&一番わかりやすい オプション売り戦略(カレンダースプレッドショート戦略)について。

日経225先物・オプション マーケットスピードRSS活用術(講師:片岡俊博氏)

---

関連記事を紹介します。

Pytho,投資関係に関する記事をご紹介します。

Python高速化! for文は遅いので、”これ”を使うと30倍早いですよ!【Google ColabのPython:コピペで動く!】
【コピペで動く!】日本株、米国株で個別銘柄ベータ値(β値)を簡単に調べる方法 Python 米国株 Webサービス&コード 【Google Colabで違いをみつけろ!】
【コピペで動く!】Pythonで1.5GBのcsvファイル読み込み高速化:1分5秒⇒4秒程度 DASK , pickle (Pythonコードあり)
【コピペで動く!】20行で資産運用モデル作成 Google ColabのPythonで 米国株の株価を取得し、グラフ・チャートを表示
【コピペで動く!】Google ColabでPython を用いての 効率的フロンティア と ポートフォリオの最適化 Efficient Frontier & Portfolio Optimization with Python [Part 2/2]
【解決】Google ColabのPythonでエクセル(Excel)ファイルやCSVファイルに出力・入力する方法【コピペで動く!】
過去50年間のS&P500の季節性の値動きから負けにくいポジション構築はできるのか考える・大統領選挙のアノマリー対応!【コピペで動く!】Google ColabのPythonで自分で調べてみよう!
【解決】スクレイピングでHTTP Error 403: Forbiddenでアクセスできないときに試すべき方法【コピペで動く!】【Google Colab:Python:pd.read_html,selenium】
曜日による米国株指数(S&P500)のパフォーマンスに違いはあるのか?有利なポジション取りはできるのか?【Google ColabのPython:コピペで動く!】Twitterで出てくる知見は本当か自分で調べてみよう。
米国債のゼロクーポン債STRIPSについてのメモ
【違いをみつけろ!】StockChartsの使い方を紹介します!12枚のミニチャート表示や、 米国株配当分考慮パフォーマンスや配当・逆イールド・相対比較が可能です!
IB証券(インタラクティブ・ブローカーズ証券)に マイクロ E-mini 先物が登場 その驚きの手数料の安さ と 建玉に必要とされる証拠金は?
【コピペで動く!】IB証券(インタラクティブ・ブローカーズ証券 )へのPythonでのAPI接続 ib_insync [自分が使っているPythonコード]
【コピペで動く!】20行で資産運用モデル作成 長期、中期、短期の3区分の期間チャートをGoogle ColabのPythonで作成 【違いをみつけろ!】
自動化・効率化でなにができるのか!Google FinanceやYahoo Financeからデータ取得して年初来パフォーマンスや週次騰落率のファクターチェック

コメント

  1. python便利 より:

    ドローダウンの部分が非常に参考になりました。
    ありがとうございます。

    ドローダウンの部分をグラフでなく、データフレーム型で表示させたいときは、どのようにコードを打てばいいのですか?

    • tf より:

      python便利 様
      コメントをいただき大変ありがとうございます。
      ドローダウンの部分をpythonのデータフレーム型で表示という事でしたので、以前書いたコードが手元にありましたので、こちらの記事でご紹介させていただきます。

      https://worth2know.com/dd/

      python便利様のお役に立つようなものであれば幸いです。
      ご参考にしていただければと思います。

      今後もよろしくお願いします。
      TF