python 为什么 获取不了python 新浪股票数据据 datareader

随笔吧量化投资选股的python程序实践(附源码)
量化投资选股的python程序实践(附源码)
首先选取沪深股票市场,本人比较关注的12只股票:
0;万科A,0;济川药业,0;三五互联,0;黔源电力,0;中炬高新,300324旋极信息,0;宏发股份,0;广东明珠,0;泰和集团,0;游族网络,0;山大华特,0;海康威视
如果是基金经理,则会有研究部门推荐的股票选择池
程序运行的得到结论如下:
1.    当投资组合的sharp值最大时,投资组合为:
41.2%的万科A,10.5%的广东明珠,38.2%的山大华特,10.1%的海康威视
该组合的未来预期年化收益为:21.4%
该组合的预期年化波动率为:29.5%
该组合的sharp指数为0.725
2.    当投资组合的波动最小时,投资组合为:
34.5%的万科A,17.9%的济川药业,24.6%的黔源电力,2%的旋极信息,1%的宏发股份,9.4%的泰和集团,0.8%的游族网络,9.8%的海康威视
该组合的未来预期年化收益为:3.7%
该组合的预期年化波动率为:22.6%
该组合的sharp指数为0.163
相关输出图表如下:
图1:关注的12只股票从到的归一化股价走势
图2:10万次蒙特卡洛模拟计算,得到各种投资组合以及相应收益率和波动率
图3:有效前沿、最优投资组合的图
#叉号:构成的曲线是有效前沿(efficient
frontier,目标收益率下最优的投资组合)
#红星:夏普值最大的投资组合
#黄星:方差最小的投资组合
程序源代码以及详细注释说明如下:
# -*- coding: utf-8 -*-  
Created on Thu Dec  8 01:26:52 ;
@author: Administrator 
"""  
  
import pandas as pd  
import numpy as np  
#import statsmodels.api as sm #统计运算  
#import scipy.stats as scs #科学计算  
import matplotlib.pyplot as plt #绘图  
import pandas.io.data as web  
#import tushare as ts  
  
  
# 1.选取感兴趣的股票  
  
# 0;万科A,0;济川药业,0;三五互联,0;黔源电力,0;中炬高新,0;旋极信息,0;宏发股份,0;广东明珠,0;泰和集团,0;游族网络,0;山大华特,0;海康威视  
# 并比较一下数据(至)  
  
symbols = ['000002.sz','600566.ss','300051.sz','002039.sz','600872.ss','300324.sz','600885.ss','600382.ss','000732.sz','002174.sz','000915.sz','002415.sz']  
  
noa = len(symbols)  
  
data = pd.DataFrame()  
for sym in symbols:  
    data[sym] = web.DataReader(sym, data_source='yahoo',start='',  
                               end='')['Adj Close']  
data.columns = symbols  
  
data.head(5)  
  
(data / data.ix[0] * 100).plot(figsize=(16, 10), grid=True)  
  
  
#2.计算不同证券的均值、协方差  
#每年252个交易日,用每日收益得到年化收益。计算投资资产的协方差是构建资产组合过程的核心部分。运用pandas内置方法生产协方差矩阵。  
returns = np.log(data / data.shift(1))  
  
returns.mean()*252  
  
returns.cov()*252  
  
  
#3.给不同资产随机分配初始权重  
#由于A股不允许建立空头头寸,所有的权重系数均在0-1之间  
weights = np.random.random(noa)  
  
weights /= np.sum(weights)  
  
weights  
  
  
# 4.计算预期组合年化收益、组合方差和组合标准差  
np.sum(returns.mean()*weights)*252  
  
np.dot(weights.T, np.dot(returns.cov()*252,weights))  
  
np.sqrt(np.dot(weights.T, np.dot(returns.cov()* 252,weights)))  
  
  
# 5.用蒙特卡洛模拟产生大量随机组合  
#进行到此,我们最想知道的是给定的一个股票池(证券组合)如何找到风险和收益平衡的位置。  
#下面通过一次蒙特卡洛模拟,产生大量随机的权重向量,并记录随机组合的预期收益和方差。  
  
port_returns = []  
  
port_variance = []  
  
for p in range(100000):  
  
    weights = np.random.random(noa)  
      
    weights /=np.sum(weights)  
  
    port_returns.append(np.sum(returns.mean()*252*weights))  
  
    port_variance.append(np.sqrt(np.dot(weights.T, np.dot(returns.cov()*252, weights))))  
  
port_returns = np.array(port_returns)  
  
port_variance = np.array(port_variance)  
  
#无风险利率设定为3%  
  
risk_free = 0.03  
  
plt.figure(figsize = (16,8))  
  
plt.scatter(port_variance, port_returns, c=(port_returns-risk_free)/port_variance, marker = 'o')  
  
plt.grid(True)  
  
plt.xlabel('excepted volatility')  
  
plt.ylabel('expected return')  
  
plt.colorbar(label = 'Sharpe ratio')  
  
  
#6.投资组合优化1——sharpe最大  
#建立statistics函数来记录重要的投资组合统计数据(收益,方差和夏普比)  
#通过对约束最优问题的求解,得到最优解。其中约束是权重总和为1。  
  
  
def statistics(weights):  
  
    weights = np.array(weights)  
      
    port_returns = np.sum(returns.mean()*weights)*252  
      
    port_variance = np.sqrt(np.dot(weights.T, np.dot(returns.cov()*252,weights)))  
      
    return np.array([port_returns, port_variance, port_returns/port_variance])  
  
#最优化投资组合的推导是一个约束最优化问题  
  
import scipy.optimize as sco  
  
#最小化夏普指数的负值  
  
def min_sharpe(weights):  
  
    return -statistics(weights)[2]  
  
#约束是所有参数(权重)的总和为1。这可以用minimize函数的约定表达如下  
  
cons = ({'type':'eq', 'fun':lambda x: np.sum(x)-1})  
  
#我们还将参数值(权重)限制在0和1之间。这些值以多个元组组成的一个元组形式提供给最小化函数  
  
bnds = tuple((0,1) for x in range(noa))  
  
#优化函数调用中忽略的唯一输入是起始参数列表(对权重的初始猜测)。我们简单的使用平均分布。  
  
opts = sco.minimize(min_sharpe, noa*[1./noa,], method = 'SLSQP', bounds = bnds, constraints = cons)  
  
opts  
  
#得到的最优组合权重向量为:  
opts['x'].round(3)  
  
#sharpe最大的组合3个统计数据分别为:  
#预期收益率、预期波动率、最优夏普指数  
statistics(opts['x']).round(3)  
  
  
#7.投资组合优化2——方差最小  
#接下来,我们通过方差最小来选出最优投资组合。  
#但是我们定义一个函数对 方差进行最小化  
  
def min_variance(weights):  
  
    return statistics(weights)[1]  
  
optv = sco.minimize(min_variance, noa*[1./noa,],method = 'SLSQP', bounds = bnds, constraints = cons)  
  
optv  
  
  
#方差最小的最优组合权重向量及组合的统计数据分别为:  
optv['x'].round(3)  
  
#得到的预期收益率、波动率和夏普指数  
statistics(optv['x']).round(3)  
  
  
  
  
#8.组合的有效前沿  
#有效前沿有既定的目标收益率下方差最小的投资组合构成。  
#在最优化时采用两个约束,1.给定目标收益率,2.投资组合权重和为1。  
  
def min_variance(weights):  
  
    return statistics(weights)[1]  
  
#在不同目标收益率水平(target_returns)循环时,最小化的一个约束条件会变化。  
  
target_returns = np.linspace(0.0,0.5,50)  
  
target_variance = []  
  
for tar in target_returns:  
    cons = ({'type':'eq','fun':lambda x:statistics(x)[0]-tar},{'type':'eq','fun':lambda x:np.sum(x)-1})  
    res = sco.minimize(min_variance, noa*[1./noa,],method = 'SLSQP', bounds = bnds, constraints = cons)  
    target_variance.append(res['fun'])  
  
target_variance = np.array(target_variance)  
len(target_variance)  
  
#下面是最优化结果的展示。  
#叉号:构成的曲线是有效前沿(目标收益率下最优的投资组合)  
#红星:sharpe最大的投资组合  
#黄星:方差最小的投资组合  
  
plt.figure(figsize = (16,8))  
  
#圆圈:蒙特卡洛随机产生的组合分布  
  
  
  
plt.scatter(port_variance, port_returns, c = port_returns/port_variance,marker = 'o')  
  
#叉号:有效前沿  
len(target_variance),len(target_returns)  
plt.scatter(target_variance,target_returns, c = target_returns/target_variance, marker = 'x')  
  
#红星:标记最高sharpe组合  
  
plt.plot(statistics(opts['x'])[1], statistics(opts['x'])[0], 'r*', markersize = 15.0)  
  
#黄星:标记最小方差组合  
  
plt.plot(statistics(optv['x'])[1], statistics(optv['x'])[0], 'y*', markersize = 15.0)  
  
plt.grid(True)  
  
plt.xlabel('expected volatility')  
  
plt.ylabel('expected return')  
  
plt.colorbar(label = 'Sharpe ratio')  
  
#df = ts.get_hist_data(stock_set[0], '', '')['close'] 
#df.head(10) 
df = [[]]*noa 
data = [[]]*noa 
# type(df) 
for i in range(0, noa): 
    #print(stock_set[i]) 
    df[i] = ts.get_hist_data(stock_set[i], '', '') 
    data[i] = df[i]['close'] 
df[0]['close'].head(10) 
"""  
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。如何利用程序(如python) 从新浪财经或者雅虎财经获取到所有A股数据(历史日线数据,实时股票数据)?-石投金融
下载客户端
三步轻松贷款,贷款利率低
如何利用程序(如python) 从新浪财经或者雅虎财经获取到所有A股数据(历史日线数据,实时股票数据)?
匿名用户 |
浏览次数:1133
常见类似问题
回答共有11条
#导入必要的包,如果没有该包,请安装 import pandas_datareader.data as web import datetime as dt start = dt.datetime() end = dt.datetime() #定义一个代码列表,港股为.hk,A股为.ss ticker_list = ['0700.hk', '600000.ss'] #… 显示全部 #导入必要的包,如果没有该包,请安装import pandas_datareader.data as webimport datetime as dtstart = dt.datetime()end = dt.datetime()#定义一个代码列表,港股为.hk,A股为.ssticker_list = ['0700.hk', '600000.ss']#以下示例获取数据后存储为csvif not os.path.exists('stock_test'): os.makedirs('stock_test')for ticker in ticker_list: #为防止列表较大时连接出错,整了个续传 if not os.path.exists('stock_test/{}.csv'.format(ticker)): df = web.DataReader(ticker, "yahoo", start, end) df.to_csv('stock_test/{}.csv'.format(ticker)) else: print('Already have {}'.format(ticker))#数据示例,随机取5天的数据web.DataReader('600000.ss', "yahoo", start, end).sample(5)--------------------------------------------------------------
回答于日 00:00
用Python内置的Yahoo金融接口两行代码即可挖掘出股票交易数据。再用matplotlib 绘制出图表即可。 示例:1、获取苹果15/8/20的股票数据。 In [27]: import pandas.io.data as web In [28]: web.get_data_yahoo('AAPL','1/1/2014','20/8/2015') … 显示全部 用Python内置的Yahoo金融接口两行代码即可挖掘出股票交易数据。再用matplotlib 绘制出图表即可。示例:1、获取苹果15/8/20的股票数据。 In [27]: import pandas.io.data as web
In [28]: web.get_data_yahoo('AAPL','1/1/2014','20/8/2015')
Open High Low Close Volume \
555....71200
552....16900
537....152700
544....02300
538....32400
546....87200
539....44000
529....23200
538....40400
553....09700
554....19500
551....684900
540....31700
550....96300
549....809800
554....338700
550....719700
508....380800
503....702500
502....625400
495....199300
502....366000
505....70300
506....86200
510....41300
521....70100
518....89800
530....64200
536....25200
534....49500
... ... ... ... ... ...
123....95000
121....54500
125....40500
126....68100
125....49200
127....22400
129....64700
130....00200
132....56400
121....450600
126....99500
125....62300
123....55500
123....18100
123....11700
122....28300
122....85000
121....76000
117....138600
112....12600
115....03000
114....21400
116....38500
117....11900
112....217500
116....35500
114....93200
116....02200
116....61400
116....45700
119.528958
122.724493
125.093773
125.043995
126.248542
127.930922
129.035921
131.474893
130.160834
124.655753
124.596026
123.938997
122.216789
122.824041
122.435799
121.818597
120.753419
117.906306
114.123426
114.880003
115.129997
115.519997
119.720001
113.489998
115.239998
115.150002
115.959999
117.160004
116.500000
115.010002
示例2、获取国内股票数据:获取国内股市的方式“股票代码”+“对应股市”。上证股票是股票代码后面加上.ss,获取深市5年1月1日到的数据 In [30]: web.get_data_yahoo('300481.sz','1/1/2015','20/8/2015')
Open High Low Close Volume Adj Close
12.06 13.15 12.06 13.15
14.47 14.47 14.47 14.47
15.92 15.92 15.92 15.92
17.51 17.51 17.51 17.51
19.26 19.26 19.26 19.26
21.19 21.19 20.68 21.19 .19
19.07 23.31 19.07 22.51 .51
21.39 24.76 21.39 24.76 .76
27.24 27.24 27.24 27.24 .24
29.96 29.96 29.96 29.96
32.96 32.96 32.96 32.96 .96
36.26 36.26 30.28 33.20 .20
29.88 34.50 29.88 30.30 .30
30.81 33.00 28.85 31.65 .65
31.70 32.87 29.90 30.79 .79
31.90 33.87 30.50 33.87 .87
35.87 37.15 33.94 35.20 .20
34.41 38.72 34.41 38.72 .72
42.11 42.59 39.51 41.00 .00
37.51 42.85 36.90 36.90 .90
34.68 39.63 33.21 35.81 .81
37.31 39.39 34.80 39.39 .39
39.48 43.33 38.01 41.14 .14
41.31 45.25 41.30 45.25 .25
44.00 49.78 42.18 49.78 .78
49.78 54.00 44.80 44.80 .80
41.50 48.38 40.72 45.76 .76
43.70 45.00 41.18 41.18 .18
40.69 42.06 39.91 41.18 .18
41.25 44.50 41.20 43.00 .00
43.17 45.53 42.51 44.50 .50
44.22 44.43 41.95 42.60 .60
42.18 44.05 42.01 43.24 .24
43.89 43.89 42.22 42.80 .80
42.20 42.70 38.61 38.81 .81
38.18 41.25 35.30 36.40 .40
36.38 38.00 33.36 37.28 .28
获取 沪市 5/7/1-的数据 In [33]: web.get_data_yahoo('600624.ss','7/1/2015','8/20/2015')
Open High Low Close Volume Adj Close
24.180 25.116 22.100 22.217 .06022
22.360 22.750 19.994 19.994 .35320
18.902 20.397 17.992 17.992 .81588
19.786 19.786 16.198 16.536 .69783
16.380 17.290 14.885 14.885 .43005
13.403 14.404 13.403 13.403 .29203
13.403 13.403 13.403 13.403 0 10.29203
13.403 13.403 13.403 13.403 0 10.29203
14.742 14.742 14.742 14.742 .32024
16.211 16.211 16.211 16.211 .44827
17.836 17.836 17.511 17.823 .68611
16.484 19.188 16.484 18.759 .40485
19.097 20.631 19.097 20.631 .84235
20.670 21.736 20.280 21.307 .36144
20.787 22.438 20.371 22.230 .07020
22.087 23.205 21.528 23.127 .75900
13.910 14.870 13.660 14.600 .60000
14.380 14.510 13.780 14.000 .00000
13.510 13.930 12.600 12.600 .60000
11.600 12.830 11.340 11.830 .83000
12.220 13.050 11.300 13.050 .05000
12.800 13.600 12.450 12.680 .68000
12.100 12.750 11.530 12.010 .01000
11.850 11.940 10.820 11.070 .07000
11.060 12.170 11.060 12.170 .17000
12.350 12.750 11.850 12.280 .28000
11.900 12.850 11.730 12.580 .58000
12.700 13.310 12.520 13.300 .30000
13.480 14.300 13.210 14.030 .03000
13.920 14.080 13.560 13.750 .75000
13.740 14.190 13.550 13.870 .87000
13.730 14.590 13.680 14.470 .47000
14.780 14.840 14.130 14.190 .19000
14.020 14.580 13.810 14.530 .53000
14.410 14.570 13.080 13.080 .08000
12.590 13.570 11.810 13.460 .46000
上证股票是股票代码后面加上.ss,深证股票是股票代码后面加上.sz上证综指代码:000001.ss,深证成指代码:399001.SZ,沪深300代码:000300.ss; 香港为 0001.加拿大股指代码:cnu.新西兰股指代码为.nz新加坡股指代码为.台湾股指代码为.tw
回答于日 00:00
我的方法比较暴力,因为我matlab刚刚学,我用excel做了sina接口所有股票代码的url和webread(一个小时左右就能搞定),然后跑一遍(视配置和网速,大概需要两分钟左右),生成的所有str丢进excel…后续在excel搭建公式或者统计… 显示全部 我的方法比较暴力,因为我matlab刚刚学,我用excel做了sina接口所有股票代码的url和webread(一个小时左右就能搞定),然后跑一遍(视配置和网速,大概需要两分钟左右),生成的所有str丢进excel…后续在excel搭建公式或者统计…
回答于日 00:00
通过tushare财经数据接口包获取。 import tushare as ts ts.get_hist_data('600848') #一次性获取全部日k线数据 #一次性获取当前交易所有股票的行情数据 import tushare as ts ts.get_today_all() 显示全部 通过tushare财经数据接口包获取。 import tushare as ts
ts.get_hist_data('600848') #一次性获取全部日k线数据
#一次性获取当前交易所有股票的行情数据
import tushare as ts
ts.get_today_all()
回答于日 00:00
使用Python.matplotlib 中的 finance module 示例代码如下: from pylab import figure, show from matplotlib.finance import quotes_historical_yahoo from matplotlib.dates import YearLocator, MonthLocator, DateFormatter import datetime date1… 显示全部 使用Python.matplotlib 中的 finance module示例代码如下: from pylab import figure, show
from matplotlib.finance import quotes_historical_yahoo
from matplotlib.dates import YearLocator, MonthLocator, DateFormatter
import datetime
date1 = datetime.date(
date2 = datetime.date(
daysFmt = DateFormatter('%m-%d-%Y')
quotes = quotes_historical_yahoo('MSFT', date1, date2)
if len(quotes) == 0:
raise SystemExit
dates = [q[0] for q in quotes]
opens = [q[1] for q in quotes]
fig = figure()
ax = fig.add_subplot(111)
ax.plot_date(dates, opens, '-')
# format the ticks
ax.xaxis.set_major_formatter(daysFmt)
ax.autoscale_view()
# format the coords message box
def price(x): return '$%1.2f'%x
ax.fmt_xdata = DateFormatter('%Y-%m-%d')
ax.fmt_ydata = price
ax.grid(True)
fig.autofmt_xdate()
参考:利用Python中的matplotlib模块抓取yahoo finance里的历史数据并绘图
回答于日 00:00
可以用excel 写一个vba 给你查数据的端口:http://biz..cn/stock/flash_hq/kline_data.php?symbol=sh600519&begin_date=&end_date= 股票代码,开始结束日期自己填,股票代码要区分sh和sz 显示全部 可以用excel 写一个vba给你查数据的端口:http://biz..cn/stock/flash_hq/kline_data.php?symbol=sh600519&begin_date=&end_date=股票代码,开始结束日期自己填,股票代码要区分sh和sz
回答于日 00:00
通过dHydra可以对股票历史数据进行存储,并且实时获取股票10档盘口和Level2逐笔交易明细 GitHub - Emptyset110/dHydra: 股市量化交易分析框架,数据获取(新浪level2, 逐笔数据),tushare接口的mongodb存储解决方案 显示全部 通过dHydra可以对股票历史数据进行存储,并且实时获取股票10档盘口和Level2逐笔交易明细GitHub - Emptyset110/dHydra: 股市量化交易分析框架,数据获取(新浪level2, 逐笔数据),tushare接口的mongodb存储解决方案
回答于日 00:00
可以用excel 写一个vba给你查数据的端口:http://biz..cn/stock/flash_hq/kline_data.php?symbol=sh600519&begin_date=&end_date=股票代码,开始结束日期自己填,股票代码要区分sh和sz 显示全部 可以用excel 写一个vba给你查数据的端口:http://biz..cn/stock/flash_hq/kline_data.php?symbol=sh600519&begin_date=&end_date=股票代码,开始结束日期自己填,股票代码要区分sh和sz
回答于日 00:00
通过dHydra可以对股票历史数据进行存储,并且实时获取股票10档盘口和Level2逐笔交易明细GitHub - Emptyset110/dHydra: 股市量化交易分析框架,数据获取(新浪level2, 逐笔数据),tushare接口的mongodb存储解决方案 显示全部 通过dHydra可以对股票历史数据进行存储,并且实时获取股票10档盘口和Level2逐笔交易明细GitHub - Emptyset110/dHydra: 股市量化交易分析框架,数据获取(新浪level2, 逐笔数据),tushare接口的mongodb存储解决方案
回答于日 00:00
通过tushare财经数据接口包获取。import tushare as ts ts.get_hist_data('600848') #一次性获取全部日k线数据 #一次性获取当前交易所有股票的行情数据 import tushare as ts ts.get_today_all() 显示全部 通过tushare财经数据接口包获取。 import tushare as ts
ts.get_hist_data('600848') #一次性获取全部日k线数据
#一次性获取当前交易所有股票的行情数据
import tushare as ts
ts.get_today_all()
回答于日 00:00
使用Python.matplotlib 中的 finance module示例代码如下:from pylab import figure, show from matplotlib.finance import quotes_historical_yahoo from matplotlib.dates import YearLocator, MonthLocator, DateFormatter import datetime date1 =… 显示全部 使用Python.matplotlib 中的 finance module示例代码如下: from pylab import figure, show
from matplotlib.finance import quotes_historical_yahoo
from matplotlib.dates import YearLocator, MonthLocator, DateFormatter
import datetime
date1 = datetime.date(
date2 = datetime.date(
daysFmt = DateFormatter('%m-%d-%Y')
quotes = quotes_historical_yahoo('MSFT', date1, date2)
if len(quotes) == 0:
raise SystemExit
dates = [q[0] for q in quotes]
opens = [q[1] for q in quotes]
fig = figure()
ax = fig.add_subplot(111)
ax.plot_date(dates, opens, '-')
# format the ticks
ax.xaxis.set_major_formatter(daysFmt)
ax.autoscale_view()
# format the coords message box
def price(x): return '$%1.2f'%x
ax.fmt_xdata = DateFormatter('%Y-%m-%d')
ax.fmt_ydata = price
ax.grid(True)
fig.autofmt_xdate()
参考:利用Python中的matplotlib模块抓取yahoo finance里的历史数据并绘图
回答于日 00:00
对以上回答还不满意?您可以想我们的的专家咨询您的问题
*此回答内容仅代表网友个人观点供用户参考及研究用途,不构成任何投资理财建议
贷款相关计算器
大家都在问
热门银行贷款利率?}

我要回帖

更多关于 python抓取股票数据 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信