Python株の分析を教えてあげる

50428 ワード

微信公衆番号:Python金融量子化の関心は、Pythonの乾物とより多くの金融を理解することができます.お役に立てば、いいねThanks♪(・ω・)ノ
前言
現在、株式データを取得するルートは多く、基本的には無料で、例えば、相場ソフトには同花順、東方富などがあり、ポータルサイトには新浪財経、テンセント財経、和信網などがある.Pythonにも、pandasが持参したライブラリ、tushare、baostockなど、無料のオープンソースapiが取引相場データを取得できるものが少なくありません.pandasライブラリはyahooデータベースをサポートしなくなった後、使いにくくなったが、baostockが最初に記録したデータは2006年であるため、本稿では主にtushareを使用して株式取引データを取得する方法と可視化分析について説明し、tushareは基本的に株式が上場した日からすべての日取引データを記録している.現在、国内A株(先物などの他の非株式相場データもサポート)を分析するのに使いやすいオープンソースインタフェースです.
本文を読む前に、「手を取って教える」シリーズの文章を勉強したり、振り返ったりして、pandas、tushare、numpy、matplotlibなどのパッケージの使い方を熟知しておくことをお勧めします.そうしないと、後ろのコードを読むのは難しいかもしれません.
株式データの取得
tushareパッケージを使用したget_k_data()関数は、株式取引データを取得します.具体的には、help(ts.get_k_data)コマンドで関数とパラメータの意味を理解できます.
#           (package)
import pandas as pd  
import numpy as np
import matplotlib.pyplot as plt
#            
from pylab import mpl
#          
mpl.rcParams['font.sans-serif']=['SimHei']
#       
mpl.rcParams['axes.unicode_minus']=False
import seaborn as sns  #    
import tushare as ts
#Jupyter Notebook   magic  
#         
%matplotlib inline    

小試験牛刀:上証指数の発表以来のデータを取得する
sh=ts.get_k_data(code='sh',ktype='D',
  autype='qfq', start='1990-12-20')
#code:    ,        , ‘600000’
#ktype:'D':   ;‘m’:   ,‘Y’:   
#autype:    ,  ‘qfq’   
#start:    
#end:      
#      5 
sh.head(5)

最初の列はインデックスで、pandasのデータ構造については、最後にインデックスを時間シーケンスに設定し、後で可視化分析を容易にします.
#        0 'date'     
sh.index=pd.to_datetime(sh.date) 
#            
sh['close'].plot(figsize=(12,6))
plt.title('    1990-2018    ')
plt.xlabel('  ')
plt.show()

上の指数の動き図はやはりはっきりと見ることができて、株価指数はそれぞれ2007年と2015年に2波の大牛市があって、それからまたピークから谷底に落ちて、現在下落の通路にあります.本当に辛かった28年、一夜にして解放前に戻りましたo(ㄛㄛ)o
記述統計
#pandas describe()             
#count:    ,mean:  ,std:   
sh.describe().round(2)

結果は次の表のとおりです.
open
close
high
low
volume
count
6645.00
6645.00
6645.00
6645.00
6.645000e+03
mean
1936.27
1937.52
1954.79
1916.32
7.017764e+07
std
1078.13
1079.51
1089.42
1065.40
1.018642e+08
min
105.50
105.50
105.50
105.50
1.000000e+01
25%
1174.77
1174.80
1185.98
1162.31
5.103069e+06
50%
1744.04
1741.62
1755.69
1725.16
2.047380e+07
75%
2743.16
2744.07
2773.28
2712.30
1.086010e+08
max
6057.43
6092.06
6124.04
6040.71
8.571328e+08
上記の結果から、上証指数は1990年12月20日から2018年11月7日まで(最終取引日は現在の運行時間)、合計6645サンプルで、平均値は1937.52点、標準差は1079.51点(変動は比較的大きい)、最大値は6092.06点だった.
#          
#2006      ,      ,   2007    
sh.loc["2007-01-01":]["volume"].plot(figsize=(12,6))
plt.title('    2007-2018      ')
plt.xlabel('  ')
plt.show()

上図の成約量は興味深い現象を反映しており、2014-2015年の大牛市は天量の取引が推進された可能性が高い.この間、実体経済が不景気だったため、中央銀行は何度も金利を下げ、通貨が緩和され、資金が株式市場に流入し、銀行財テクなどの影の銀行がこの間、狂ったように拡張し、場外プラスレバレッジと配資がこの牛市を主導した.興味のある友人は、通貨供給、実体経済指標、影銀行などのデータと結びつけて分析し、交差検証を行うことができる.
きんせんぶんせき
#              ,    20,52,252   
#     :
ma_day = [20,52,252]

for ma in ma_day:
    column_name = "%s   " %(str(ma))
    sh[column_name] =sh["close"].rolling(ma).mean()
#sh.tail(3)
#  2010          
sh.loc['2010-10-8':][["close",
"20   ","52   ","252   "]].plot(figsize=(12,6))
plt.title('2010-2018       ')
plt.xlabel('  ')
plt.show()

上証指数の収益率と変動率
#2005          ,    2005    
sh["    "] = sh["close"].pct_change()
sh["    "].loc['2005-01-01':].plot(figsize=(12,4))
plt.xlabel('  ')
plt.ylabel('   ')
plt.title('2005-2018         ')
plt.show()
###             
#(linestyle)       (marker)
sh["    "].loc['2014-01-01':].plot(figsize=
(12,4),linestyle="--",marker="o",color="g")
plt.title('2014-2018      ')
plt.xlabel('  ')
plt.show()

複数株価指数(または株)の場合
#            
stocks={'    ':'sh','    ':'sz','  300':'hs300',
        '  50':'sz50','    ':'zxb','   ':'cyb'}
stock_index=pd.DataFrame()
for stock in stocks.values():
    stock_index[stock]=ts.get_k_data(stock,ktype='D', 
autype='qfq', start='2005-01-01')['close']
#stock_index.head()
#             
tech_rets = stock_index.pct_change()[1:]
#tech_rets.head()
#        
tech_rets.describe()
#       
#       0
tech_rets.mean()*100 #   %

上記の株価指数間の相関を可視化分析する:
#jointplot             ”     “,          
sns.jointplot('sh','sz',data=tech_rets)

#                ,                
sns.pairplot(tech_rets.iloc[:,3:].dropna())
returns_fig = sns.PairGrid(tech_rets.iloc[:,3:].dropna())
###       
returns_fig.map_upper(plt.scatter,color="purple") 
###         
returns_fig.map_lower(sns.kdeplot,cmap="cool_d") 
###        
returns_fig.map_diag(plt.hist,bins=30)

収益率とリスク
金融分析では、平均値と基準を用いて株価指数の収益率とリスク(変動率)をそれぞれ描くことが多い.
#                  
#       '2005-01-01'
def return_risk(stocks,startdate='2005-01-01'):
    close=pd.DataFrame()
    for stock in stocks.values():
        close[stock]=ts.get_k_data(stock,ktype='D', 
     autype='qfq', start=startdate)['close']
    tech_rets = close.pct_change()[1:]
    rets = tech_rets.dropna()
    ret_mean=rets.mean()*100
    ret_std=rets.std()*100
    return ret_mean,ret_std

#    
def plot_return_risk():
    ret,vol=return_risk(stocks)
    color=np.array([ 0.18, 0.96, 0.75, 0.3, 0.9,0.5])
    plt.scatter(ret, vol, marker = 'o', 
    c=color,s = 500,cmap=plt.get_cmap('Spectral'))
    plt.xlabel("      %")     
    plt.ylabel("   %")
    for label,x,y in zip(stocks.keys(),ret,vol):
        plt.annotate(label,xy = (x,y),xytext = (20,20),
            textcoords = "offset points",
             ha = "right",va = "bottom",
            bbox = dict(boxstyle = 'round,pad=0.5',
            fc = 'yellow', alpha = 0.5),
                arrowprops = dict(arrowstyle = "->",
                    connectionstyle = "arc3,rad=0"))
stocks={'    ':'sh','    ':'sz','  300':'hs300',
        '  50':'sz50','     ':'zxb','     ':'cyb'}
plot_return_risk()
stocks={'    ':'601318','    ':'000651',
        '    ':'600036','    ':'600570',
        '    ':'600030','    ':'600519'}
startdate='2018-01-01'
plot_return_risk()

モンテカルロシミュレーション解析
モンテカルロシミュレーションは統計学的手法であり,データの発展傾向をシミュレートするために用いられる.モンテカルロシミュレーションは第二次世界大戦中、当時原子爆弾が開発したプロジェクトで、クラック物質の中性子ランダム拡散現象をシミュレートするために、米国の数学者フォン・ノイマンやウラムなどが発明した統計方法である.モンテカルロシミュレーションと名付けられたのは、モンテカルロがヨーロッパのポケット国家モナコの都市で、この都市は当時非常に有名な賭博城だったからだ.賭博の本質は確率であり、モンテカルロシミュレーションは確率に基づいた方法であるため、賭博城の名前をこの方法と命名した.モンテカルロシミュレーションは入力のたびにランダムに入力値を選択し,大量のシミュレーション回数により最終的に累積確率分布図を得た.
df=ts.get_k_data('sh',ktype='D', autype='qfq', start='2005-01-01')
df.index=pd.to_datetime(df.date)
tech_rets = df.close.pct_change()[1:]
rets = tech_rets.dropna()
#rets.head()
#       ,  95%   ,          0.0264...
rets.quantile(0.05)
-0.026496813699825043

モンテカルロシミュレーション関数の構築:

def monte_carlo(start_price,days,mu,sigma):
    dt=1/days
    price = np.zeros(days)
    price[0] = start_price
    shock = np.zeros(days)
    drift = np.zeros(days)
     
    for x in range(1,days):
        shock[x] = np.random.normal(loc=mu * dt,
                scale=sigma * np.sqrt(dt))
        drift[x] = mu * dt
        price[x] = price[x-1] + (price[x-1] *
                (drift[x] + shock[x]))
    return price
#    
runs = 10000
start_price = 2641.34 #     
days = 252
mu=rets.mean()
sigma=rets.std()
simulations = np.zeros(runs)

for run in range(runs):
    simulations[run] = monte_carlo(start_price,
      days,mu,sigma)[days-1]
q = np.percentile(simulations,1)
plt.figure(figsize=(8,6))
plt.hist(simulations,bins=50,color='grey')
plt.figtext(0.6,0.8,s="    : %.2f" % start_price)
plt.figtext(0.6,0.7,"      : %.2f" %simulations.mean())
plt.figtext(0.15,0.6,"q(0.99: %.2f)" %q)
plt.axvline(x=q,linewidth=6,color="r")
plt.title("   %s              " %days,weight="bold")
Text(0.5,1,'   252              ')

実際、モンテカルロシミュレーションはオプションの価格設定に役立ちます.私たちはオプション価格の中で未来の株の動きに対する仮定を借りてモンテカルロシミュレーションを行った.
import numpy as np
from time import time
np.random.seed(2018)
t0=time()
S0=2641.34
T=1.0; 
r=0.05; 
sigma=rets.std()
M=50;
dt=T/M; 
I=250000
S=np.zeros((M+1,I))
S[0]=S0
for t in range(1,M+1):
    z=np.random.standard_normal(I)
    S[t]=S[t-1]*np.exp((r-0.5*sigma**2)*dt+sigma*np.sqrt(dt)*z)
s_m=np.sum(S[-1])/I
tnp1=time()-t0
print('  250000   ,  1                :%.2f'%s_m)
  250000   ,  1                :2776.85
%matplotlib inline
import matplotlib.pyplot as plt
plt.figure(figsize=(10,6))
plt.plot(S[:,:10])
plt.grid(True)
plt.title('            10      ')
plt.xlabel('  ')
plt.ylabel('  ')
plt.show()
plt.figure(figsize=(10,6))
plt.hist(S[-1], bins=120)
plt.grid(True)
plt.xlabel('    ')
plt.ylabel('  ')
plt.title('          ')
Text(0.5,1,'          ')

CuteHandについて
あなたに毎日星座の运势を教えて、天気、近くのホテル、株の相场を调べて、冗谈を言って、小さいストーリを言って、チャットしてインタラクティブにチャットして、不定期にオリジナルの経済金融の干物を分かち合って、手を取ってあなたにPythonを使って金融のデータの分析をすることを教えます.知識を分かち合い、知恵を点灯し、CuteHandに注目し、一緒に勉強し、一緒に進歩することを歓迎します.
すばらしい回顧
  • Python金融データ分析シリーズ:
  • 【ハンドルを教える】Python金融財務分析【ハンドルを教える】Python財経データ取得と可視化分析【ハンドルを教える】Python量子化金融ツールを回すNumPy【ハンドルを教える】Python金融量子化利器のPandas
  • 経済金融分析の枠組みと思考:大勢の観瀾と論理経済危機の研究と判断–ミンスキーは常に困難を克服して、あなたは準備ができていますか?