一个使用python和TUShare进行股票分析的例子

(2021.1)这篇文章写成的时间较早,使用的读取数据的接口有更新,具体内容请查看:https://tushare.pro/register?reg=365021

 

 

(原内容:)

《利用Python进行数据分析(Python For Data Analysis中文版)》P286 中间有一个例子,使用标普500指数(SPX)和几支股票的收盘价,计算一个日收益率与SPX年度相关系数的DataFrame。

因为担心读取这些数据会存在障碍,其实我也没有真正去试,就萌生了用中国股市数据替代后再进行计算的想法。

在网上找了一些资料,发现使用TUShare读取股票数据较为方便,按https://tushare.pro/http://tushare.org/index.html上的步骤,安装了tushare。

下面介绍与这个例子相关的一些内容。

一、读取股票数据

import tushare as ts


# 读取上证指数
df = ts.get_hist_data('sh000001')
print(df)

# 另一种读法
df = ts.get_k_data('sh')
print(df)

# 当然可以指定读取的时间段,如读取2019年1月的数据
# 注意日期的写法,如写成'2019-1-1'会得到不正确的结果
df = ts.get_k_data('sh000001', '2019-01-01', '2019-01-31')
print(df)

二、模仿书中的例子,构造close_px

import tushare as ts
import pandas as pd
from pandas import DataFrame


# 股票集 代码:名称
ticks = {'sh601857': 'ZGSY',  # 中国石油
         'sh601398': 'GSYH',  # 工商银行
         'sh600519': 'GZMT',  # 贵州茅台
         'sh000001': '上证'}

close_px = DataFrame()  # 先建立一个空对象

for key, value in ticks.items():
    df = ts.get_k_data(key, '2003-01-01', '2011-12-31')  # 逐个读出股票数据

    # 构造一个中间对象,只使用日期和收盘价
    # 注意在这里需要把字符串表示的日期转换成日期对象
    df1 = DataFrame({'date':pd.to_datetime(df['date']),
                     value: df['close']})

    df1.set_index('date', inplace=True)  # 把日期列设为索引

    close_px = close_px.join(df1, how='outer')  # 把整理好的数据合并到close_px中

print(close_px)  # 构造后的成品,中间有一部分缺失数据,可以是因为2003年还没上市吧

三、完整的代码

import tushare as ts
import pandas as pd
from pandas import DataFrame


# 股票集 代码:名称
ticks = {'sh601857': 'ZGSY',  # 中国石油
         'sh601398': 'GSYH',  # 工商银行
         'sh600519': 'GZMT',  # 贵州茅台
         'sh000001': '上证'}

close_px = DataFrame()  # 先建立一个空对象

for key, value in ticks.items():
    df = ts.get_k_data(key, '2003-01-01', '2011-12-31')  # 逐个读出股票数据

    # 构造一个中间对象,只使用日期和收盘价
    # 注意在这里需要把字符串表示的日期转换成日期对象
    df1 = DataFrame({'date':pd.to_datetime(df['date']),
                     value: df['close']})

    df1.set_index('date', inplace=True)  # 把日期列设为索引

    close_px = close_px.join(df1, how='outer')  # 把整理好的数据合并到close_px中

print(close_px)  # 构造后的成品,中间有一部分缺失数据,可以是因为2003年还没上市吧

# 以下的代码是照书上抄的,当然根据股票名称做了相应的改动
rets = close_px.pct_change().dropna()
spx_corr = lambda x: x.corrwith(x['上证'])
by_year = rets.groupby(lambda x: x.year)

print("\n各支股票与上证指数的相关系数")
print(by_year.apply(spx_corr))

print("\n中国石油 与 贵州茅台 的相关系数:")
print(by_year.apply(lambda g: g['ZGSY'].corr(g['GZMT'])))

# 输出的内容与书上稍有区别,可能是中石油上市时间较晚的原因吧

运行结果:

==== RESTART: example03.py ====

             ZGSY   GSYH     GZMT       上证
date                                      
2003-01-02    NaN    NaN    4.319  1320.63
2003-01-03    NaN    NaN    4.312  1319.87
2003-01-06    NaN    NaN    4.343  1334.68
2003-01-07    NaN    NaN    4.303  1332.06
2003-01-08    NaN    NaN    4.420  1372.07
...           ...    ...      ...      ...
2011-12-26  8.235  2.881  138.340  2190.11
2011-12-27  8.210  2.881  135.410  2166.21
2011-12-28  8.286  2.895  136.269  2170.01
2011-12-29  8.303  2.902  137.688  2173.56
2011-12-30  8.261  2.930  138.468  2199.42

[2185 rows x 4 columns]

各支股票与上证指数的相关系数
          ZGSY      GSYH      GZMT   上证
2007  0.800647  0.789706  0.434432  1.0
2008  0.855625  0.839435  0.639594  1.0
2009  0.843779  0.808002  0.530355  1.0
2010  0.777748  0.608758  0.351867  1.0
2011  0.700398  0.613596  0.415294  1.0

中国石油 与 贵州茅台 的相关系数:
2007    0.355767
2008    0.488143
2009    0.385639
2010    0.138757
2011    0.258366
dtype: float64

初学乍到,欢迎指正。

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
和PTB17引脚为输出模式 GPIOB->PSOR |= (1 << 16); // 禁用显示器基金的风格分析可以用因子模型来实现,常用的因子模型有Fama-French复位 delay(100); GPIOB->PCOR |= (1 << 16); // 使能显示器复三因子模型和Carhart四因子模型。Python中有多个因子模型的工具包,比如pandas、statsmodels、pyfolio等,这里以pandas为例,介绍如何使用因子模型进行位 delay(100); GPIOB->PSOR |= (1 << 16); // 禁用显示器复位 基金的风格分析。 1. 获取基金和基准指数的历史数据,可以使用pandas-datareader write_command(0x30); // 初始化显示器 write_command(0x0C); // 关闭光标 或tushare等工具包。 ```python import pandas_datareader.data as web fund = web.DataReader("000001.SS", "yahoo", start="2019-01-01", end="2021-01-01")['Adj Close'] # write_command(0x01); // 清除显示器 delay(100); } void update_speed_distance(uint32_t wheel_cnt) 基金净值 benchmark = web.DataReader("000300.SS", "yahoo", start="2019-01-01", end { uint32_t current_time = timer_cnt / 2; current_distance = wheel_cnt * WHEEL_CIRCUMFERENCE="2021-01-01")['Adj Close'] # 基准指数净值 ``` 2. 计算收益_CM / 1000; total_distance += current_distance - last_distance; current_speed = (current_distance - last_distance率,并使用因子模型进行风格分析。 ```python import pandas as pd import numpy as np import statsmodels) * 3600 / (current_time - last_time); last_distance = current_distance; last_time = current_time.api as sm # 计算收益率 returns = pd.concat([fund, benchmark], axis=1).pct_change().dropna() # 定义因子 market_factor = returns.iloc[:, 1] size_factor = np.log(returns.iloc[:, 0].; char buffer[16]; sprintf(buffer, "S:%ukm/h", (unsigned int) current_speed); rolling(window=20).mean()) value_factor = 1 / (returns.iloc[:, 0].rolling(window=20).std()) # 进 int i; for (i = 0; i < strlen(buffer); i++) { write_data(buffer[i]); } 行因子回归 X = pd.concat([market_factor, size_factor, value_factor], axis=1) X = sm.add_constant(X) model = sm.OLS(returns.iloc[:, 0], X) result = model.fit() # 提取因子载荷和 write_command(0xC0); sprintf(buffer, "D:%ukm", (unsigned int) total_distance); for残差项 loadings = result.params[1:] residuals = returns.iloc[:, 0] - result.predict(X) print(' (i = 0; i < strlen(buffer); i++) { write_data(buffer[i]); } } int main(void) { Loadings:\n', loadings) print('Residuals:\n', residuals) ``` 在这个例子中,我们使用 init_timer(); init_gpio(); init_spi(); init_display(); while (1) { // 程序主循了市场因子、市值因子和价值因子,对基金的收益率进行了回归分析,得到了每个因子的载荷和残差项。 需要注意的是,因子模型是对基金环 } } void PIT_IRQHandler() { PIT->CHANNEL[0].TFLG = PIT_TFLG_TIF_MASK;业绩的一种解释,而不是真实的业绩表现。因此,在实践中,需要结合其他分析方法一起使用,才能更全面地评估基金的风格和表现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值