【コピペで動く!】株価の分布、銘柄の比較など、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|note
米国株のパフォーマンス・成績を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株価指数の時間変化

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

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

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

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

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

---

関連記事を紹介します。

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

Python高速化! for文は遅いので、”これ”を使うと30倍早いですよ!【Google ColabのPython:コピペで動く!】
【コピペで動く!】Pythonで1.5GBのcsvファイル読み込み高速化:1分5秒⇒4秒程度 DASK , pickle (Pythonコードあり)
デコピコミンが全国(47都道府県)で、どの施設に出てくるか地図(Google Maps)で確認!!【ピクミン ブルーム(Pikmin Bloom)】
【コピペで動く!】レイ・ダリオ推奨「オール・ウェザー戦略」をETFで構築するには? ETFの手軽さとそのパフォーマンスの高さとは!【違いをみつけろ!】
Windows10で機械学習環境チェック CPU/GPUでTensorflowの作業時間はどのくらい違うのか、Google Colabとも比較してみた。(CUDA Toolkit,cuDNN)
【解決】Google ColabのPythonでエクセル(Excel)ファイルやCSVファイルに出力・入力する方法【コピペで動く!】
【コピペで動く!】Google ColabでPython を用いての 効率的フロンティア と ポートフォリオの最適化 Efficient Frontier & Portfolio Optimization with Python [Part 2/2]
【解決】スクレイピングでHTTP Error 403: Forbiddenでアクセスできないときに試すべき方法【コピペで動く!】【Google Colab:Python:pd.read_html,selenium】
【コピペで動く!】20行で資産運用モデル作成 Google ColabのPythonで 米国株の株価を取得し、グラフ・チャートを表示
米国債のゼロクーポン債STRIPSについてのメモ
株価時系列データを分析する上で正規化を行う事の重要性について紹介する【違いをみつけろ!】
ConoHa WINGレンタルサーバーでPython! Webアプリcgiを動かす手順を紹介!3つの例あり【コピペで動く!】
Google Analytics にPython APIで接続してみた話【コピペで動く!】
【コピペで動く!】IB証券(インタラクティブ・ブローカーズ証券 )へのPythonでのAPI接続 ib_insync [自分が使っているPythonコード]
Google Data Portalを使ってWeb上のオープンデータを使って簡単に情報を可視化しようという話

コメント

  1. python便利 より:

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

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

    • tf より:

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

      https://worth2know.com/dd/

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

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

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