『python 金融应用』如何用 seaborn 包来分析股票 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
LittleUqeer
V2EX    Python

『python 金融应用』如何用 seaborn 包来分析股票

  •  
  •   LittleUqeer 2016-12-29 15:54:20 +08:00 2998 次点击
    这是一个创建于 3215 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天,我想和大家分享一下一些分析股票的方法。在这里以贴代码为主,大家感兴趣的话直接复制运行就可以生成相应的图表分析了。

    一、股票的基本信息

    分析股票示例(以 600050.XSHG 中国联通 为例),导入股票各项信息

    data = DataAPI.MktEqudGet(secID=u"",ticker=u"600050",beginDate=u"",endDate=u"",isOpen="",field=u"secID,secShortName,tradeDate,openPrice,highestPrice,lowestPrice,closePrice,turnoverVol",pandas="1") data_hou = DataAPI.MktEqudAdjAfGet(secID=u"",ticker=u"600050",tradeDate=u"",isOpen="",beginDate=u"",endDate=u"",field=u"secID,tradeDate,closePrice",pandas="1") data_hou = data_hou.rename(columns = {'closePrice':'Adj_closePrice'}) data_new = pd.merge(data,data_hou,on='tradeDate') data_new = data_new.set_index('tradeDate') data_new1 = data_new.copy() data_new1.head().append(data_new1.tail()) 

    简单统计分析,输入下方代码即可显示出股票的开盘价,最高价,最低价,收盘价,成交量,前复权收盘价。

    data_new1.describe() 

    股票收盘价走势

    data_new1['Adj_closePrice'].plot(legend=True,figsize=(14,6)) 

    成交量走势

    data_new1['turnoverVol'].plot(legend=True,figsize=(14,6)) 

    移动平均线走势图

    ma_day = [10,20,50] for ma in ma_day: column_name = "MA for %s days" %(str(ma)) data_new1[column_name]=pd.rolling_mean(data_new1['Adj_closePrice'],ma) 
    data_new1[['Adj_closePrice','MA for 10 days','MA for 20 days','MA for 50 days']].plot(subplots=False,figsize=(14,6)) 

    股票每天的百分比变化

    data_new1['Daily Return'] = data_new1['Adj_closePrice'].pct_change() data_new1['Daily Return'].plot(figsize=(14,6),legend=True,linestyle='--',marker='o') 

    平均收益直方图

    data_new1['Daily Return'].hist(color="#4878cf") 

    每日收益图

    sns.distplot(data_new1['Daily Return'].dropna(),bins=100, color="b") 

    分析多支股票示例(以 600050.XSHG , 000651.XSHG , 600158.XSHG,600115.XSHG 为例)

    将每个公司的每日收盘价的百分数变化,及涨幅或者降幅,可以评估其涨幅前景

    tech_rets = data_all2.pct_change() tech_rets.head() 

    然后看某一支股票自身的线性相关系

    sns.jointplot('000930','000930',tech_rets,kind='scatter',color='seagreen') 

    不同股票的线性相关系

    sns.jointplot('000930','600115',tech_rets,kind='scatter') 

    四个公司一起比较,该函数用于成对的比较不同数据集之间的相关性,而对角线则会显示该数据集的直方图

    sns.pairplot(tech_rets.dropna()) 

    对角线直方图

    returns_fig = sns.PairGrid(tech_rets.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) 

    原股票数据的分析

    returns_fig = sns.PairGrid(data_all2) 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) 

    四支股票相关系数

    sns.corrplot(tech_rets.dropna(),annot=True) 

    二、股票的风险信息

    推测最多亏多少钱

    rets = tech_rets.dropna() area = np.pi*20 plt.scatter(rets.mean(), rets.std(),alpha = 0.5,s =area) plt.xlabel('Expected returns') plt.ylabel('Risk') #分别以 rets 的平均值,标准差为 xy 轴 for label, x, y in zip(rets.columns, rets.mean(), rets.std()): plt.annotate( label, xy = (x, y), xytext = (50, 50), textcoords = 'offset points', ha = 'right', va = 'bottom', arrowprops = dict(arrowstyle = '-', cOnnectionstyle= 'arc3,rad=-0.3')) 

    运行一下可以看到图表中 600158.中体产业 的预计收益要高于其他三家公司,但是风险值也要高于其他三家公司。

    分析之前看一下基本信息,以 600050.XSHG 为例

    sns.distplot(data_new1['Daily Return'].dropna(),bins=100, color="b") 

    百位分数, 95%的置信

    rets['600050'].quantile(0.05) 

    一天的损失不会超过 0.0356, 如果我们有一百万的投资,我们一天 5% VaR 为 0.0356 * 1000000 = 35600 元

    三、基于风险价值的蒙特卡洛方法

    days = 365 dt = 1./days mu = rets.mean()['600050'] sigma = rets.std()['600050'] def stock_monte_carlo(start_price,days,mu,sigma): price = np.zeros(days) price[0] = start_price shock = np.zeros(days) drift = np.zeros(days) for x in xrange(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 
    start_price = 2.924 for run in xrange(100: plt.plot(stock_monte_carlo(start_price,days,mu,sigma)) plt.xlabel("Days") plt.ylabel("Price") 
    runs = 10000 simulatiOns= np.zeros(runs) np.set_printoptions(threshold=5) for run in xrange(runs): simulations[run] = stock_monte_carlo(start_price,days,mu,sigma)[days-1]; 
    q = np.percentile(simulations, 1) plt.hist(simulations,bins=200) plt.figtext(0.6, 0.8, s="Start price: %.2f" %start_price) plt.figtext(0.6, 0.7, "Mean final price: %.2f" % simulations.mean()) plt.figtext(0.6, 0.6, "VaR(0.99): %.2f" % (start_price - q,)) plt.figtext(0.15, 0.6, "q(0.99): %.2f" % q) plt.axvline(x=q, linewidth=4, color='r') plt.title(u"Final price distribution for 600050 after %s days" % days, weight='bold') 

    这种方法基本上是你购买的股票的风险将在 0.16 元 (约 99% 的时间里,蒙特卡洛模拟的结果) 如果想自己画股票的 K 线图,可以参考这篇帖子: https://uqer.io/community/share/57cac259228e5b5b831173c2

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1413 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 16:53 PVG 00:53 LAX 09:53 JFK 12:53
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86