python股票数据分析
介绍
项目地址 https://github.com/zouxlin3/StockDataAnalysis
使用python分析csv格式的股票数据
使用方法如下
from StockData import StockData # 从源代码下载StockData.py和666666.SZ.csv虚拟数据
1 读取csv
虚拟数据的股票代码为000001
每个股票代码应对应一个csv文件
read(symbols: List[str])
stockdata = StockData('data') # 虚拟数据文件所在目录
symbols = ['000001'] # symbols为股票代码列表
stockdata.read(symbols)
stockdata.dataframes['000001'] # 查看内容
Unnamed: 0 | OBJECT_ID | S_INFO_WINDCODE | TRADE_DT | CRNCY_CODE | S_DQ_PRECLOSE | S_DQ_OPEN | S_DQ_HIGH | S_DQ_LOW | S_DQ_CLOSE | ... | S_DQ_ADJPRECLOSE | S_DQ_ADJOPEN | S_DQ_ADJHIGH | S_DQ_ADJLOW | S_DQ_ADJCLOSE | S_DQ_ADJFACTOR | S_DQ_AVGPRICE | S_DQ_TRADESTATUS | OPDATE | OPMODE | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 336601 | -488126 | 000001.SZ | 1991-04-03 | CNY | 61.49 | 49.00 | 49.00 | 49.00 | 49.00 | ... | 61.49 | 49.00 | 49.00 | 49.00 | 49.00 | 1.000000 | 50.0000 | ?? | 2016-12-27 10:24:33 | 0 |
1 | 336602 | -488127 | 000001.SZ | 1991-04-04 | CNY | 49.00 | 48.76 | 48.76 | 48.76 | 48.76 | ... | 49.00 | 48.76 | 48.76 | 48.76 | 48.76 | 1.000000 | 50.0000 | ?? | 2016-12-27 10:24:33 | 0 |
2 | 336603 | -488128 | 000001.SZ | 1991-04-05 | CNY | 48.76 | 48.52 | 48.52 | 48.52 | 48.52 | ... | 48.76 | 48.52 | 48.52 | 48.52 | 48.52 | 1.000000 | 50.0000 | ?? | 2016-12-27 10:24:33 | 0 |
3 | 336605 | -488130 | 000001.SZ | 1991-04-08 | CNY | 48.52 | 48.04 | 48.04 | 48.04 | 48.04 | ... | 48.52 | 48.04 | 48.04 | 48.04 | 48.04 | 1.000000 | 50.0000 | ?? | 2016-12-27 10:24:33 | 0 |
4 | 336606 | -488131 | 000001.SZ | 1991-04-09 | CNY | 48.04 | 47.80 | 47.80 | 47.80 | 47.80 | ... | 48.04 | 47.80 | 47.80 | 47.80 | 47.80 | 1.000000 | 47.5000 | ?? | 2016-12-27 10:24:33 | 0 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
6298 | 6864894 | {D1A958FC-E2CC-11E6-9220-6C0B84A6895D} | 000001.SZ | 2017-01-25 | CNY | 9.27 | 9.27 | 9.28 | 9.25 | 9.26 | ... | 971.11 | 971.11 | 972.16 | 969.01 | 970.06 | 104.758253 | 9.2633 | ?? | 2017-01-25 15:10:52 | 0 |
6299 | 1717817 | {1930026C-E396-11E6-9CA9-4437E6DAC6D1} | 000001.SZ | 2017-01-26 | CNY | 9.26 | 9.27 | 9.34 | 9.26 | 9.33 | ... | 970.06 | 971.11 | 978.44 | 970.06 | 977.39 | 104.758253 | 9.3138 | ?? | 2017-01-26 15:26:14 | 0 |
6300 | 3288514 | {518B8FC9-E9DF-11E6-84F4-6C0B84A6895D} | 000001.SZ | 2017-02-03 | CNY | 9.33 | 9.34 | 9.36 | 9.23 | 9.26 | ... | 977.39 | 978.44 | 980.54 | 966.92 | 970.06 | 104.758253 | 9.2756 | ?? | 2017-02-03 15:09:52 | 0 |
6301 | 6878988 | {D21CCA60-EC3A-11E6-85F7-6C0B84A6895D} | 000001.SZ | 2017-02-06 | CNY | 9.26 | 9.26 | 9.32 | 9.26 | 9.31 | ... | 970.06 | 970.06 | 976.35 | 970.06 | 975.30 | 104.758253 | 9.2967 | ?? | 2017-02-06 15:20:12 | 0 |
6302 | 1204979 | {0700EF99-ED04-11E6-A728-6C0B84A6895D} | 000001.SZ | 2017-02-07 | CNY | 9.31 | 9.31 | 9.32 | 9.27 | 9.30 | ... | 975.30 | 975.30 | 976.35 | 971.11 | 974.25 | 104.758253 | 9.2912 | ?? | 2017-02-07 15:12:19 | 0 |
6303 rows × 24 columns
2 根据条件查看数据
2.1 根据时间段查看
查看一个股票在时间段的open high low close四个标签的数据
get_data_by_symbol(symbol: str, start_date: str, end_date: str)
stockdata.get_data_by_symbol('000001', '19910409', '19910419')
date | open | high | low | close | |
---|---|---|---|---|---|
4 | 1991-04-09 | 47.80 | 47.80 | 47.80 | 47.80 |
5 | 1991-04-10 | 47.56 | 47.56 | 47.56 | 47.56 |
6 | 1991-04-11 | 47.56 | 47.56 | 47.56 | 47.56 |
7 | 1991-04-12 | 47.08 | 47.08 | 47.08 | 47.08 |
8 | 1991-04-16 | 46.38 | 46.38 | 46.38 | 46.38 |
9 | 1991-04-17 | 46.15 | 46.15 | 46.15 | 46.15 |
10 | 1991-04-18 | 45.92 | 45.92 | 45.92 | 45.92 |
11 | 1991-04-19 | 45.69 | 45.69 | 45.69 | 45.69 |
2.2 根据时间段查看
查看指定日期一些股票的open high low close四个标签的数据
get_data_by_date( adate: str, symbols: List[str])
stockdata.get_data_by_date('20170207', symbols)
symbols | open | high | low | close | |
---|---|---|---|---|---|
0 | 000001 | 9.31 | 9.32 | 9.27 | 9.3 |
2.3 根据时间段查看
查看一些股票指定标签的数据
get_data_by_field(field: str, symbols: List[str])
stockdata.get_data_by_field('open', symbols)
date | 000001 | |
---|---|---|
0 | 1991-04-03 | 49.00 |
1 | 1991-04-04 | 48.76 |
2 | 1991-04-05 | 48.52 |
3 | 1991-04-08 | 48.04 |
4 | 1991-04-09 | 47.80 |
... | ... | ... |
6298 | 2017-01-25 | 9.27 |
6299 | 2017-01-26 | 9.27 |
6300 | 2017-02-03 | 9.34 |
6301 | 2017-02-06 | 9.26 |
6302 | 2017-02-07 | 9.31 |
6303 rows × 2 columns
3 绘制走势图
需要指定一个标签,volume和turnover标签时绘制柱状图,其余为折线图
plot(symbol: str, field: str)
stockdata.plot('000001', 'open')
4 数据处理
4.1 价格复权计算
对open high low close四类价格从后往前复权
adjust_data(symbol: str)
stockdata.adjust_data('000001')
stockdata.dataframes['000001']
Unnamed: 0 | OBJECT_ID | S_INFO_WINDCODE | TRADE_DT | CRNCY_CODE | S_DQ_PRECLOSE | S_DQ_OPEN | S_DQ_HIGH | S_DQ_LOW | S_DQ_CLOSE | ... | S_DQ_ADJFACTOR | S_DQ_AVGPRICE | S_DQ_TRADESTATUS | OPDATE | OPMODE | forward_af | forward_adjust_open | forward_adjust_high | forward_adjust_low | forward_adjust_close | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 336601 | -488126 | 000001.SZ | 1991-04-03 | CNY | 61.49 | 49 | 49.00 | 49.00 | 49.00 | ... | 1.000000 | 50.0000 | ?? | 2016-12-27 10:24:33 | 0 | 0.01051 | 49.0 | 49.00 | 49.00 | 49.00 |
1 | 336602 | -488127 | 000001.SZ | 1991-04-04 | CNY | 49.00 | 48 | 48.76 | 48.76 | 48.76 | ... | 1.000000 | 50.0000 | ?? | 2016-12-27 10:24:33 | 0 | 0.01051 | 48.0 | 48.76 | 48.76 | 48.76 |
2 | 336603 | -488128 | 000001.SZ | 1991-04-05 | CNY | 48.76 | 48 | 48.52 | 48.52 | 48.52 | ... | 1.000000 | 50.0000 | ?? | 2016-12-27 10:24:33 | 0 | 0.01051 | 48.0 | 48.52 | 48.52 | 48.52 |
3 | 336605 | -488130 | 000001.SZ | 1991-04-08 | CNY | 48.52 | 48 | 48.04 | 48.04 | 48.04 | ... | 1.000000 | 50.0000 | ?? | 2016-12-27 10:24:33 | 0 | 0.01051 | 48.0 | 48.04 | 48.04 | 48.04 |
4 | 336606 | -488131 | 000001.SZ | 1991-04-09 | CNY | 48.04 | 47 | 47.80 | 47.80 | 47.80 | ... | 1.000000 | 47.5000 | ?? | 2016-12-27 10:24:33 | 0 | 0.01051 | 47.0 | 47.80 | 47.80 | 47.80 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
6298 | 6864894 | {D1A958FC-E2CC-11E6-9220-6C0B84A6895D} | 000001.SZ | 2017-01-25 | CNY | 9.27 | 9 | 9.28 | 9.25 | 9.26 | ... | 104.758253 | 9.2633 | ?? | 2017-01-25 15:10:52 | 0 | 1.00000 | 9.0 | 9.28 | 9.25 | 9.26 |
6299 | 1717817 | {1930026C-E396-11E6-9CA9-4437E6DAC6D1} | 000001.SZ | 2017-01-26 | CNY | 9.26 | 9 | 9.34 | 9.26 | 9.33 | ... | 104.758253 | 9.3138 | ?? | 2017-01-26 15:26:14 | 0 | 1.00000 | 9.0 | 9.34 | 9.26 | 9.33 |
6300 | 3288514 | {518B8FC9-E9DF-11E6-84F4-6C0B84A6895D} | 000001.SZ | 2017-02-03 | CNY | 9.33 | 9 | 9.36 | 9.23 | 9.26 | ... | 104.758253 | 9.2756 | ?? | 2017-02-03 15:09:52 | 0 | 1.00000 | 9.0 | 9.36 | 9.23 | 9.26 |
6301 | 6878988 | {D21CCA60-EC3A-11E6-85F7-6C0B84A6895D} | 000001.SZ | 2017-02-06 | CNY | 9.26 | 9 | 9.32 | 9.26 | 9.31 | ... | 104.758253 | 9.2967 | ?? | 2017-02-06 15:20:12 | 0 | 1.00000 | 9.0 | 9.32 | 9.26 | 9.31 |
6302 | 1204979 | {0700EF99-ED04-11E6-A728-6C0B84A6895D} | 000001.SZ | 2017-02-07 | CNY | 9.31 | 9 | 9.32 | 9.27 | 9.30 | ... | 104.758253 | 9.2912 | ?? | 2017-02-07 15:12:19 | 0 | 1.00000 | 9.0 | 9.32 | 9.27 | 9.30 |
6303 rows × 29 columns
4.2 日频数据重采样
按照时间窗口进行重采样,采样的时间取区间左端
resample(symbol: str, freq: int)
stockdata.resample('000001', 5)
date | open | close | high | low | volume | turnover | vwap | |
---|---|---|---|---|---|---|---|---|
0 | 1991-04-09 | 49 | 47.80 | 49.00 | 47.80 | 12.0 | 59.000 | 4.9167 |
1 | 1991-04-17 | 47 | 46.15 | 47.56 | 46.15 | 26.0 | 123.000 | 4.7308 |
2 | 1991-04-24 | 45 | 44.78 | 45.92 | 44.78 | 50.0 | 225.000 | 4.5000 |
3 | 1991-05-02 | 44 | 43.46 | 44.56 | 43.46 | 31.0 | 137.000 | 4.4194 |
4 | 1991-05-09 | 43 | 42.17 | 43.24 | 42.17 | 129.0 | 546.000 | 4.2326 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
1255 | 2016-12-28 | 9 | 9.06 | 9.16 | 9.02 | 1631209.0 | 1483308.481 | 0.9093 |
1256 | 2017-01-05 | 9 | 9.17 | 9.18 | 9.05 | 1894909.0 | 1729934.514 | 0.9129 |
1257 | 2017-01-12 | 9 | 9.15 | 9.17 | 9.11 | 1691727.0 | 1547168.777 | 0.9145 |
1258 | 2017-01-19 | 9 | 9.18 | 9.24 | 9.07 | 2675002.0 | 2447679.663 | 0.9150 |
1259 | 2017-01-26 | 9 | 9.33 | 9.34 | 9.17 | 2008986.0 | 1858492.536 | 0.9251 |
1260 rows × 8 columns
4.3 计算移动平均
计算滑动窗口内数据的平均值
moving_average(symbol: str, field: str, window: int)
stockdata.moving_average('000001', 'open', 5)
TRADE_DT
1991-04-03 NaN
1991-04-04 NaN
1991-04-05 NaN
1991-04-08 NaN
1991-04-09 48.0...
2017-01-25 9.0
2017-01-26 9.0
2017-02-03 9.0
2017-02-06 9.0
2017-02-07 9.0
Name: forward_adjust_open, Length: 6303, dtype: float64
5 相关指标计算
四类指标
ema(symbol: str, periods: int)
atr(symbol: str, periods: int)
rsi(symbol: str, periods: int)
macd(symbol: str, long: int, short: int, dea_periods: int)
stockdata.ema('000001', 5)
TRADE_DT
1991-04-03 NaN
1991-04-04 NaN
1991-04-05 NaN
1991-04-08 NaN
1991-04-09 49.500000...
2017-01-25 9.233294
2017-01-26 9.265529
2017-02-03 9.263686
2017-02-06 9.279124
2017-02-07 9.286083
Name: ema_5, Length: 6303, dtype: float64
stockdata.atr('000001', 5)
TRADE_DT
1991-04-03 NaN
1991-04-04 NaN
1991-04-05 NaN
1991-04-08 NaN
1991-04-09 2.738...
2017-01-25 0.064
2017-01-26 0.062
2017-02-03 0.076
2017-02-06 0.076
2017-02-07 0.070
Name: atr_5, Length: 6303, dtype: float64
stockdata.rsi('000001', 5)
TRADE_DT
1991-04-03 NaN
1991-04-04 NaN
1991-04-05 NaN
1991-04-08 NaN
1991-04-09 NaN...
2017-01-25 75.156853
2017-01-26 81.025235
2017-02-03 57.391103
2017-02-06 58.812990
2017-02-07 65.561024
Name: rsi_5, Length: 6303, dtype: float64
stockdata.macd('000001', 25, 9, 5)
TRADE_DT
1991-04-03 NaN
1991-04-04 NaN
1991-04-05 NaN
1991-04-08 NaN
1991-04-09 NaN...
2017-01-25 0.017994
2017-01-26 0.021877
2017-02-03 0.014808
2017-02-06 0.013298
2017-02-07 0.010009
Name: macd, Length: 6303, dtype: float64
6 回报计算
freq可选m、q、h、y,分别代表月、季度、半年、年的时间跨频率
6.1 回报率
calc_return(symbol: str, freq: str)
stockdata.calc_return('000001', 'q')
date | return_q | return | |
---|---|---|---|
0 | 1991-06-28 | NaT | -30.6327 |
1 | 1991-09-30 | NaT | -57.0462 |
2 | 1991-12-31 | NaT | 101.0274 |
3 | 1992-03-31 | NaT | -11.2436 |
4 | 1992-06-30 | NaT | 61.2284 |
... | ... | ... | ... |
99 | 2016-03-31 | NaT | -11.2594 |
100 | 2016-06-30 | NaT | -18.2331 |
101 | 2016-09-30 | NaT | 4.2529 |
102 | 2016-12-30 | NaT | 0.3308 |
103 | 2017-02-07 | NaT | 2.1978 |
104 rows × 3 columns
6.2 夏普比率
calc_sharpe_ratio(symbol: str, freq: str)
stockdata.calc_sharpe_ratio('000001', 'q')
0.04988574991791399
6.3 最大回撤率
calc_max_drawdown_ratio(symbol: str)
stockdata.calc_max_drawdown_ratio('000001')
91.63934426229508
本文最新版本
python股票数据分析相关推荐
- python股票数据分析_Python数据分析之股票走势
本篇文章讲了用python爬取六家公司的股票数据,分析股票走势.波动性.涨幅等,最终得出一点点结论. 一.包的安装 Python进行数据分析时,有几个包比较重要,所以需提前把这几个包安装好. pand ...
- python股票数据分析_用Python浅析股票数据
本文将使用Python来可视化股票数据,比如绘制K线图,并且探究各项指标的含义和关系,最后使用移动平均线方法初探投资策略. 数据导入 这里将股票数据存储在stockData.txt文本文件中,我们使用 ...
- python股票数据分析_用Python抓取新浪的股票数据
最近做数据分析,先是找到了Tushare这个免费开源的第三方财经包,但后来用了几天之后发现,它的日交易历史数据有时候有不准确的情况,查看源代码发现,这个包的数据源是凤凰财经,而对比凤凰网站其站点的数据 ...
- python股票数据分析_用Python进行股票数据分析
本篇运用Python进行自选股的数据分析,帮助进行投资决策,分析用到以下两个模块:pandas(数据分析包):pandas_datareader(可以查询雅虎的股票数据接口). 本篇参考了猴子老师的课 ...
- python股票数据分析实例_Python之简单股票数据分析
1.获取数据 #定义所需要的数据 gafataDict={"谷歌":"GOOG","亚马逊":"AMZN"," ...
- python股票数据分析_如何使用Python进行股票的金融数据量化分析
Python作为一门高ji语言是很好用的,语法简单,通俗易懂,非chang容易上手,丰富的第三方库支持使得开发速度快,相对于其他编程语言来说,初学者入门并不困难.它只是一门语言工具,zui终还是要将这 ...
- python股票数据分析_利用PYTHON全自动生成分析报告
日常工作当中,特别是金融行业当中,有不少人的工作是提取数据,分析数据,得到可视化图表,并加入自已的研究分析结论,最终生成分析报告,并且有不少报告是定期生成,存在不少重复手工劳动.本文通过一个简单实例, ...
- 毕设着急了吧?Python股票数据分析,制作动态柱状图
写在前面的一些屁话: 雪球成立于 2010 年,是北京雪球信息科技有限公司旗下推出的投资者社区.雪球一直致力于为中国投资者提供跨市场(沪深.香港.美国),跨品种(股票.基金.债券等)的数据查询.资讯获 ...
- python股票数据分析实验报告_Python实验报告
一. 实验原理 ( 要求.任务等 ) (一).Python的开发环境 Python诞生于20世纪90年代初,是一种解释型.面向对象.动态数据类型的高级程序设计语言,是最受欢迎的程序设计语言之一. 编写 ...
最新文章
- 神经网络要从原子抓起:原来白花花的银子才是神经芯片的未来
- WebMGA:超快的基因组序列聚类注释在线工具
- shell 语法格式
- 关于level_idc和Profile_IDC的解释
- 解决Unity3D导出apk失败:Failed to re-package resources
- 自动爬取中国大学mooc的pdf文档
- 男人最佳的生育年限,程序猿们,看看吧!!!
- elementui树状菜单tree_Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)...
- 【SpringBoot】SpringBoot最精简的设置
- UVM的factory机制
- ARM 指令集 比较指令
- M1 Mac上运行Windows 11
- python3 open打开文件_Python3基础 file open 打开txt文件并打印出全文
- Fragstats|单一土地利用类型景观格局指数
- android gps测速算法,GPS定位与测速算法研究
- SQL注入的严重危害之拖库实例
- 计算机中硬盘隐藏,如何隐藏电脑硬盘盘符,保护个人隐私 | 我爱分享网
- h2o java_java – 在h2o中加载大于内存大小的数据
- ruby on rails 分页gem kaminari,指定页码跳转
- R语言需要C语言基础吗,R语言入门(1)-初识R语言
热门文章
- 弘辽科技:拼多多怎么会判定为提升销量?会有什么处罚?
- Stack cookie instrumentation code detected a stack-based buffer overrun.
- 等保浅尝-网络安全等级保护/等保2.0
- win7分区导致硬盘分区表丢失的恢复方法[图文]
- 一文带你了解蓝牙产品相关认证
- 将U盘启动盘恢复成普通U盘的解决方法
- zabbix 监控部署(下)
- uni-app 顶部导航栏高度计算 + 胶囊高度计算
- 使用segyio模块打开segy格式数据时出现RuntimeError: unable to find sorting
- 关于前端Retina 屏幕兼容和基于Retina 屏幕兼容的雪碧图技巧