bookloveru2

2021年5月7日4 分

pythonで株価分析⑪【コピペで3秒。1クリック❕ ポートフォリオ管理】

最終更新: 2021年11月1日

皆様、こんにちは。

今回は、大人気シリーズ「pythonで株価分析してみた」の第11弾です❕

表題の通り、

『コピペで3秒。1クリック』でポートフォリオが管理できます('ω')ノ

ホールド中の銘柄をいくらで購入し、今いくらになっているのか?所有銘柄の相関は?などなど。

ご用意いただくのは、何の銘柄を何ドルで何株買ったのか❓を書いた紙だけです!

今回も、コピペで行ける様、しっかりとpythonコードの解説をしていきますので、グーグルコラボのご準備をお願い致します。

では、早速行ってみましょう!(^^)!


目次

コピペ用pythonコード

使い方


❶ コピペ用pythonコード

#@title コピペで3秒。1クリック❕ ポートフォリオ管理
 
import datetime
 
import fix_yahoo_finance as yf
 
import matplotlib.pyplot as plt
 
import requests
 
import argparse
 
import numpy as np
 
import seaborn as sns
 
%matplotlib inline
 
import warnings
 
warnings.filterwarnings('ignore')
 

 
#スタート日を決める
 
number = "2018-1-1" #@param {type:"string"}
 

 
#銘柄コード
 
start = number
 
end = datetime.date.today()
 
code1 = "DPZ" #@param ["AAPL"] {allow-input: true}
 
code2 = "MCD" #@param ["AMD"] {allow-input: true}
 
code3 = "GOOG" #@param ["MSFT"] {allow-input: true}
 
code4 = "KO" #@param ["FB"] {allow-input: true}
 
code5 = "BUD" #@param ["JNJ"] {allow-input: true}
 
code6 = "YUM" #@param ["JNJ"] {allow-input: true}
 
code7 = "BYND" #@param ["JNJ"] {allow-input: true}
 
codelist = [code1,code2,code3,code4,code5,code6,code7]
 
#終値取得(data2に終値を取り込み))
 
data2 = yf.download(codelist, start=start, end=end)["Adj Close"]
 
#取得単価
 
price1 = 0#@param {type:"number"}
 
price2 = 0#@param {type:"number"}
 
price3 = 0#@param {type:"number"}
 
price4 = 0#@param {type:"number"}
 
price5 = 95.46#@param {type:"number"}
 
price6 = 0 #@param {type:"number"}
 
price7 = 0#@param {type:"number"}
 
#保有数量
 
code1stock = 0#@param {type:"number"}
 
code2stock = 0#@param {type:"number"}
 
code3stock = 0#@param {type:"number"}
 
code4stock = 0#@param {type:"number"}
 
code5stock = 425#@param {type:"number"}
 
code6stock = 0#@param {type:"number"}
 
code7stock = 0#@param {type:"number"}
 
#取得価額。保有数量×取得単価
 
mypf1 = code1stock * price1
 
mypf2 = code2stock * price2
 
mypf3 = code3stock * price3
 
mypf4 = code4stock * price4
 
mypf5 = code5stock * price5
 
mypf6 = code6stock * price6
 
mypf7 = code7stock * price7
 
mypf = mypf1 + mypf2 + mypf3 + mypf4 + mypf5 + mypf6 + mypf7
 

 
#prに時価総額を格納 終値行列×保有数量
 
pr1 = data2[code1] * code1stock
 
pr2 = data2[code2] * code2stock
 
pr3 = data2[code3] * code3stock
 
pr4 = data2[code4] * code4stock
 
pr5 = data2[code5] * code5stock
 
pr6 = data2[code6] * code6stock
 
pr7 = data2[code7] * code7stock
 
pf = pr1 + pr2 + pr3 + pr4 + pr5 + pr6 +pr7
 
marketprice = pf.iloc[-1]
 

 
#損益状況
 
profit = marketprice - mypf
 

 
par = round(((1 - (marketprice / mypf)) * -100), 1)
 
#グラフの箱サイズ
 
pf.plot(label = "MY Portfolio", kind = 'area', alpha = 1, figsize = (8,6), fontsize = 16, stacked=True,cmap='cool',grid = True)
 

 

 
#パーセント表示変形
 
df_all=((1+data2.pct_change()).cumprod())
 
#グラフの箱サイズ
 
df_all.plot(figsize=(8,6),fontsize=16)
 
#凡例の位置
 
plt.legend(loc = 'upper left', bbox_to_anchor=(0, 1), borderaxespad=0, fontsize=16)
 
plt.grid(True)
 

 

 
# 株価を標準化
 
std = data2.apply(lambda x: (x-x.mean())/x.std(), axis=0).fillna(0)
 
std.plot(figsize=(4,4),fontsize=18)
 
plt.legend(loc = 'upper left', bbox_to_anchor=(0, 1), borderaxespad=0, fontsize=18)
 
plt.grid(True)
 

 

 
#データを対前日比の株価変動率に変換しstdpctに格納
 
stdpct = data2.pct_change().dropna() * 100
 
#営業日ごとの株価変動率をプロット 
 
stdpct.plot(label = True ,figsize = (8,6),marker = 'o',fontsize = 16)
 
plt.legend(loc = 'upper left', bbox_to_anchor=(0, 1), borderaxespad=0, fontsize=16)
 
plt.grid(True)
 

 

 
#株価変動率の基本統計量を取得 
 
stastics = round(stdpct.describe(),2)
 
#統計量をグラフ化
 
fig, ax = plt.subplots(figsize=(8,6))
 
ax.axis('off')
 
ax.axis('tight')
 
ax.table(cellText=stastics.values,
 
colLabels=stastics.columns,
 
rowLabels=stastics.index,
 
loc='center',
 
bbox=[0,0,1,1])
 

 
#seabornで箱ひげ図を作成 箱ひげ図は、ボックス内の線が平均値を表し、色がついたボックス内の値動きになる確率が50%であることを示しています。
 
#ボックスから突き出たヒゲの範囲まででほぼ100%の値動きを示していますが、髭の長さが箱の1.5倍を超えるようなデータは外れ値としてヒゲを突き抜けてプロットされています。
 
#ボックスが値0以上の場合、ほぼ値下がりがなく、上昇していることを意味する。
 
plt.figure(figsize=(10, 7))
 
sns.boxplot(data = stdpct,fliersize = 6,width = 0.5)
 
sns.set_context("talk",font_scale = 1)
 
plt.grid(True)
 

 
#ヒートマップにて相関関係を表示
 
plt.figure(figsize=(15, 6))
 
stdpct1 = stdpct.dropna()
 
sns.set(style="white")
 
sns.heatmap(stdpct1.corr(),annot = True)
 

 
print("元金は" + str(mypf) +"ドル。" + "現在の時価総額は、" + str(marketprice) +"ドルです。" + "評価損益は、" + str(profit) + "ドルです。" + str(par) + "%" )
 

❷ 使い方

下記の通りです(*^-^*)👇

①株の購入日か分析を開始したい日付を入力。

②銘柄と株数を入力。

③左上の三角の矢印▽を押す。

以上

すると、下記のグラフが自動で描画されます。👇

まず、元金。続いて時価総額。評価損益。

その次は各銘柄の値動き。

これは、株価を標準化した後のパーセント表示👇

標準化後の基本統計量と箱ひげ図。統計量はパーセント表記👇

最後に描画されるのが相関係数👇

以上です(`・ω・´)ゞ

pythonでプログラミングがしたい!!
 
pythonを学びたい!という方には、
 
オンラインプログラミング教室『Aidemy アイデミー』がお勧めです。
 
ご自身でプログラム環境を用意する必要は無く、サイトへアクセスするだけです。 創業者は東京大学工学部卒の石川聡彦さん。
 
著書に『人工知能プログラミングのための数学がわかる本』(KADOKAWA/2018年)など。
 
無料で、お試しもできますので安心です。
 
お時間ある方は下記リンクを覗いてみてはいかがでしょうか(*'ω'*)

    5580
    5