常听人说五穷六绝七翻身,然而实践是检验真理的唯一标准,顺便熟悉一下pandas对于时间序列的处理
选用上证指数近十年数据 所需lib tushare
import pandas as pd
import tushare as ts
上证指数十年观之月份涨跌
sh = ts.get_k_data(code='sh', start='2007-01-01', ktype='M')
sh.head()
image.png
ktype='M',直接选取月份的数据。
sh.dtypes
date object
open float64
close float64
high float64
low float64
volume float64
code object
dtype: object
date 现在是objec类型(可以简单的理解为字符串),我们需要先将其转换成pandas时间相关的类型
sh.date = pd.to_datetime(sh.date)
sh.dtypes
date datetime64[ns]
open float64
close float64
high float64
low float64
volume float64
code object
dtype: object
当date是datetime类型之后,我们便可以使用.dt 方法来自由转化时间显示的方式了。为了更加直观,我们将date转化为月份。
sh.date = sh.date.dt.month
sh.head()
image.png
接下来统计大盘月线收阳(close > open)的情况
up = sh[sh.close > sh.open].date.value_counts()
print up
7 8
2 8
10 7
9 7
11 6
8 6
3 6
12 5
6 5
5 5
4 5
1 5
Name: date, dtype: int64
sh[sh.close > sh.open] - 删选出所有符合条件的列
.date - 取出符合条件的列的月份
.value_counts - 计算各个月份出现的次数
从结果上,似乎真的有点五穷六绝七翻身...接下来转化成概率并且排序一下
per = up/sh.date.value_counts()
per.sort_values()
1 0.454545
4 0.454545
5 0.454545
6 0.454545
12 0.500000
3 0.545455
8 0.545455
11 0.600000
9 0.636364
10 0.700000
2 0.727273
7 0.727273
Name: date, dtype: float64
% matplotlib inline
per.plot(kind='bar')
image.png
不多说了。十一月开始减仓,来年一月份再加仓,继续看好九月、十月这收获的季节。
上证指数十年观之周几买入
weekday = ts.get_k_data(code='sh', start='2007-01-01', ktype='D')
weekday.head()
image.png
weekday.date = pd.to_datetime(weekday.date).dt.weekday_name
weekday.head()
image.png
per = weekday[weekday.close > weekday.open].date.value_counts()/weekday.date.value_counts()
per.plot(kind='bar')
image.png
周一最佳,周四最惨,当然,差别没月份那么明显,而且这是日内涨跌,涨了也有可能是假阳线。
网友评论