量化交易之股票数据的获取——Pandas API接口

前言

Pandas库提供了专门从财经网站获取金融数据的API接口,可作为量化交易股票数据获取的另一种途径,该接口在urllib3库基础上实现了以客户端身份访问网站的股票数据。需要注意的是目前模块已经迁徙到pandas-datareader包中,因此导入模块时需要由import pandas.io.data as web更改为import pandas_datareader.data as web


DataReader方法介绍

查看Pandas的手册可以发现,第一个参数为股票代码,苹果公司的代码为"AAPL",国内股市采用的输入方式“股票代码”+“对应股市”,上证股票在股票代码后面加上“.SS”,深圳股票在股票代码后面加上“.SZ”。DataReader可从多个金融网站获取到股票数据,如“Yahoo! Finance” 、“Google Finance”等,这里以Yahoo为例。第三、四个参数为股票数据的起始时间断。返回的数据格式为DataFrame。

start = datetime.datetime(2017,1,1)#获取数据的时间段-起始时间
end = datetime.date.today()#获取数据的时间段-结束时间
stock = web.DataReader("600797.SS", "yahoo", start, end)#获取浙大网新2017年1月1日至今的股票数据

数据分析

1、打印DataFrame数据前5行和尾部倒数5行(浙大网新因重大事件停牌至1月6日开始复牌)

print stock.head(5)
print stock.tail(5)

图片描述

2、打印DataFrame数据索引和列名,索引为时间序列,列信息为开盘价、最高价、最低价、收盘价、复权收盘价、成交量

print stock.index
print stock.columns

图片描述

3、打印DataFrame数据形状,index长度为248,columns数为6,即248个交易日,6项股票数据

print stock.shape

图片描述

4、打印DataFrame数据查看数据是否有缺失,以及每列数据的类型

print stock.info() 

图片描述

5、打印DataFrame数据每组的统计情况,如最小值、最大值、均值、标准差等

print stock.describe()

图片描述

6、DataFrame数据中增加涨/跌幅列,涨/跌=(当日Close-上一日Close)/上一日Close*100%

(1)添加一列change,存储当日股票价格与前一日收盘价格相比的涨跌数值,即当日Close价格与上一日Close的差值,1月3日这天无上一日数据,因此出现缺失

change = stock.Close.diff()
stock['Change'] = change
print stock.head(5)

图片描述

(2)对缺失的数据用涨跌值的均值就地替代NaN。

change.fillna(change.mean(),inplace=True)

图片描述

(3)计算涨跌幅度有两种方法,pct_change()算法的思想即是第二项开始向前做减法后再除以第一项,计算得到涨跌幅序列。

stock['pct_change'] = (stock['Change'] /stock['Close'].shift(1))#
stock['pct_change1'] = stock.Close.pct_change()

图片描述

7、DataFrame数据中增加跳空缺口数值序列,这里定义的缺口为上涨趋势和下跌趋势中的突破缺口,上涨趋势中今天的最低价高于昨天收盘价为向上跳空,下跌趋势中昨天收盘价高于今天最高价为向下跳空。遍历每个交易日后将符合跳空缺口条件的交易日增加缺口数值。

jump_pd = pd.DataFrame()
for kl_index in np.arange(1, stock.shape[0]):
today = stock.ix[kl_index]
yesday = stock.ix[kl_index-1]
today['preCloae'] = yesday.Close   
    if today['pct_change'] > 0 and (today.Low-today['preCloae']) > 0:
        today['jump_power'] = (today.Low-today['preCloae'])
    elif  today['pct_change'] < 0 and (today.High-today['preCloae']) < 0:
        today['jump_power'] = (today.High-today['preCloae'])
    jump_pd = jump_pd.append(today)        
    stock['jump_power'] = jump_pd['jump_power']
    print stock.loc["2017-04-26":"2017-06-15"]#默认打印全部列

图片描述

8、DataFrame数据保留两位小数显示

format = lambda x: '%.2f' % x
stock = stock.applymap(format)
print stock.loc["2017-04-26":"2017-06-15"]#默认打印全部列

图片描述

更多python量化交易内容互动请加微信公众号:PythonQT-YuanXiao
### 如何在量化交易获取股票的三因子 #### 使用PyTDX库读取通达信数据 为了实现量化交易中的三因子分析,通常会依赖于历史行情和财务数据。通过Python第三方库`pytdx`可以从通达信软件中提取所需的数据。 ```python from pytdx.crawler.history_financial_crawler import HistoryFinancialListCrawler import pandas as pd # 创建爬虫对象用于抓取财务报表列表 crawler = HistoryFinancialListCrawler() list_data = crawler.fetch_and_parse() # 将结果转换成DataFrame以便后续处理 df = pd.DataFrame(data=list_data) print(df.head()) ``` 这段代码展示了如何利用`HistoryFinancialListCrawler()`类来下载并解析包含公司季度报告在内的多个ZIP压缩包的内容[^2]。 #### 计算Fama-French三因子模型所需的变量 对于构建经典的Fama-French三因子模型来说,需要收集市场超额收益(Market Excess Return)、账面市值比(Book-to-Market Ratio, BM),以及规模效应(Size Effect)。具体操作如下: 1. **市场超额收益率**:可以通过计算个股的日度或月度回报率减去无风险利率得到; 2. **BM比率**:由公司的股东权益除以其总市值得出; 3. **规模效应**:一般采用流通股数量作为代理指标。 以上提到的因素都可以基于上述方式取得的基础数据进一步加工而来。 #### 实现示例 这里给出一段简单的Python脚本用来展示如何加载必要的模块,并准备相应的输入参数来进行三因子回归分析: ```python import numpy as np import statsmodels.api as sm def calculate_three_factors(mkt_ret, smb, hml): """ 对给定的时间序列执行三因子线性回归 参数: mkt_ret (array-like): 市场组合每日/每月收益率 smb (array-like): 规模因子(Small Minus Big) hml (array-like): 价值因子(High Minus Low) 返回值: regression_results : 回归统计量摘要 """ X = np.column_stack((smb,hml)) y = mkt_ret - rf_rate # 减掉无风险利率rf_rate形成超额收益 model = sm.OLS(y,X).fit() return model.summary() if __name__ == "__main__": # 这里应该替换为实际获取到的历史价格、财务信息等 market_returns = ... # 来自市场的日均回报率时间序列 small_minus_big = ... # SMB因子数值 high_minus_low = ... # HML因子数值 risk_free_rate = ... # 期间内的平均国债收益率或其他形式的无风险报酬率 result = calculate_three_factors( market_returns, small_minus_big, high_minus_low ) print(result) ``` 此段代码定义了一个名为`calculate_three_factors`的功能函数,它接受三个数组类型的参数——分别是代表市场整体表现、大小型企业和高低估值企业之间差异性的因素。最后调用了StatsModels库里的最小二乘法估计器完成拟合过程,并输出详细的诊断表格。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值