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: 0OBJECT_IDS_INFO_WINDCODETRADE_DTCRNCY_CODES_DQ_PRECLOSES_DQ_OPENS_DQ_HIGHS_DQ_LOWS_DQ_CLOSE...S_DQ_ADJPRECLOSES_DQ_ADJOPENS_DQ_ADJHIGHS_DQ_ADJLOWS_DQ_ADJCLOSES_DQ_ADJFACTORS_DQ_AVGPRICES_DQ_TRADESTATUSOPDATEOPMODE
0336601-488126000001.SZ1991-04-03CNY61.4949.0049.0049.0049.00...61.4949.0049.0049.0049.001.00000050.0000??2016-12-27 10:24:330
1336602-488127000001.SZ1991-04-04CNY49.0048.7648.7648.7648.76...49.0048.7648.7648.7648.761.00000050.0000??2016-12-27 10:24:330
2336603-488128000001.SZ1991-04-05CNY48.7648.5248.5248.5248.52...48.7648.5248.5248.5248.521.00000050.0000??2016-12-27 10:24:330
3336605-488130000001.SZ1991-04-08CNY48.5248.0448.0448.0448.04...48.5248.0448.0448.0448.041.00000050.0000??2016-12-27 10:24:330
4336606-488131000001.SZ1991-04-09CNY48.0447.8047.8047.8047.80...48.0447.8047.8047.8047.801.00000047.5000??2016-12-27 10:24:330
..................................................................
62986864894{D1A958FC-E2CC-11E6-9220-6C0B84A6895D}000001.SZ2017-01-25CNY9.279.279.289.259.26...971.11971.11972.16969.01970.06104.7582539.2633??2017-01-25 15:10:520
62991717817{1930026C-E396-11E6-9CA9-4437E6DAC6D1}000001.SZ2017-01-26CNY9.269.279.349.269.33...970.06971.11978.44970.06977.39104.7582539.3138??2017-01-26 15:26:140
63003288514{518B8FC9-E9DF-11E6-84F4-6C0B84A6895D}000001.SZ2017-02-03CNY9.339.349.369.239.26...977.39978.44980.54966.92970.06104.7582539.2756??2017-02-03 15:09:520
63016878988{D21CCA60-EC3A-11E6-85F7-6C0B84A6895D}000001.SZ2017-02-06CNY9.269.269.329.269.31...970.06970.06976.35970.06975.30104.7582539.2967??2017-02-06 15:20:120
63021204979{0700EF99-ED04-11E6-A728-6C0B84A6895D}000001.SZ2017-02-07CNY9.319.319.329.279.30...975.30975.30976.35971.11974.25104.7582539.2912??2017-02-07 15:12:190

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')
dateopenhighlowclose
41991-04-0947.8047.8047.8047.80
51991-04-1047.5647.5647.5647.56
61991-04-1147.5647.5647.5647.56
71991-04-1247.0847.0847.0847.08
81991-04-1646.3846.3846.3846.38
91991-04-1746.1546.1546.1546.15
101991-04-1845.9245.9245.9245.92
111991-04-1945.6945.6945.6945.69

2.2 根据时间段查看

查看指定日期一些股票的open high low close四个标签的数据
get_data_by_date( adate: str, symbols: List[str])

stockdata.get_data_by_date('20170207', symbols)
symbolsopenhighlowclose
00000019.319.329.279.3

2.3 根据时间段查看

查看一些股票指定标签的数据
get_data_by_field(field: str, symbols: List[str])

stockdata.get_data_by_field('open', symbols)
date000001
01991-04-0349.00
11991-04-0448.76
21991-04-0548.52
31991-04-0848.04
41991-04-0947.80
.........
62982017-01-259.27
62992017-01-269.27
63002017-02-039.34
63012017-02-069.26
63022017-02-079.31

6303 rows × 2 columns

3 绘制走势图

需要指定一个标签,volume和turnover标签时绘制柱状图,其余为折线图
plot(symbol: str, field: str)

stockdata.plot('000001', 'open')

image

4 数据处理

4.1 价格复权计算

对open high low close四类价格从后往前复权
adjust_data(symbol: str)

stockdata.adjust_data('000001')
stockdata.dataframes['000001']
Unnamed: 0OBJECT_IDS_INFO_WINDCODETRADE_DTCRNCY_CODES_DQ_PRECLOSES_DQ_OPENS_DQ_HIGHS_DQ_LOWS_DQ_CLOSE...S_DQ_ADJFACTORS_DQ_AVGPRICES_DQ_TRADESTATUSOPDATEOPMODEforward_afforward_adjust_openforward_adjust_highforward_adjust_lowforward_adjust_close
0336601-488126000001.SZ1991-04-03CNY61.494949.0049.0049.00...1.00000050.0000??2016-12-27 10:24:3300.0105149.049.0049.0049.00
1336602-488127000001.SZ1991-04-04CNY49.004848.7648.7648.76...1.00000050.0000??2016-12-27 10:24:3300.0105148.048.7648.7648.76
2336603-488128000001.SZ1991-04-05CNY48.764848.5248.5248.52...1.00000050.0000??2016-12-27 10:24:3300.0105148.048.5248.5248.52
3336605-488130000001.SZ1991-04-08CNY48.524848.0448.0448.04...1.00000050.0000??2016-12-27 10:24:3300.0105148.048.0448.0448.04
4336606-488131000001.SZ1991-04-09CNY48.044747.8047.8047.80...1.00000047.5000??2016-12-27 10:24:3300.0105147.047.8047.8047.80
..................................................................
62986864894{D1A958FC-E2CC-11E6-9220-6C0B84A6895D}000001.SZ2017-01-25CNY9.2799.289.259.26...104.7582539.2633??2017-01-25 15:10:5201.000009.09.289.259.26
62991717817{1930026C-E396-11E6-9CA9-4437E6DAC6D1}000001.SZ2017-01-26CNY9.2699.349.269.33...104.7582539.3138??2017-01-26 15:26:1401.000009.09.349.269.33
63003288514{518B8FC9-E9DF-11E6-84F4-6C0B84A6895D}000001.SZ2017-02-03CNY9.3399.369.239.26...104.7582539.2756??2017-02-03 15:09:5201.000009.09.369.239.26
63016878988{D21CCA60-EC3A-11E6-85F7-6C0B84A6895D}000001.SZ2017-02-06CNY9.2699.329.269.31...104.7582539.2967??2017-02-06 15:20:1201.000009.09.329.269.31
63021204979{0700EF99-ED04-11E6-A728-6C0B84A6895D}000001.SZ2017-02-07CNY9.3199.329.279.30...104.7582539.2912??2017-02-07 15:12:1901.000009.09.329.279.30

6303 rows × 29 columns

4.2 日频数据重采样

按照时间窗口进行重采样,采样的时间取区间左端
resample(symbol: str, freq: int)

stockdata.resample('000001', 5)
dateopenclosehighlowvolumeturnovervwap
01991-04-094947.8049.0047.8012.059.0004.9167
11991-04-174746.1547.5646.1526.0123.0004.7308
21991-04-244544.7845.9244.7850.0225.0004.5000
31991-05-024443.4644.5643.4631.0137.0004.4194
41991-05-094342.1743.2442.17129.0546.0004.2326
...........................
12552016-12-2899.069.169.021631209.01483308.4810.9093
12562017-01-0599.179.189.051894909.01729934.5140.9129
12572017-01-1299.159.179.111691727.01547168.7770.9145
12582017-01-1999.189.249.072675002.02447679.6630.9150
12592017-01-2699.339.349.172008986.01858492.5360.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')
datereturn_qreturn
01991-06-28NaT-30.6327
11991-09-30NaT-57.0462
21991-12-31NaT101.0274
31992-03-31NaT-11.2436
41992-06-30NaT61.2284
............
992016-03-31NaT-11.2594
1002016-06-30NaT-18.2331
1012016-09-30NaT4.2529
1022016-12-30NaT0.3308
1032017-02-07NaT2.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

本文最新版本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酒桶在你野区

感谢支持!????

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值