这是本人一直比较好奇的问题,网上没搜到,最近在看python数据分析,正好自己动手做一下试试。作者对于python是零基础,需要从头学起。

在写本文时,作者也没有完成这个小分析目标,边学边做吧。

================================================================

Python基础:

中国大学Mooc,南京大学,张莉老师 -《用Python玩转数据》

了解基本的语法和常用函数就行了,其他的用的时候再搜。

财经数据源:

TuShare - http://tushare.org/index.html

免费,开源Python财经数据接口包。

GitHub: https://github.com/waditu/tushare

基本的资料目前就看了这些,其他的都是网上即时搜的,以前的没保存,接下来会慢慢加。

================================================================

既然是新股发行后破板的表现,要设一个时间段,否则没意义,所以先以半年为时间段,统计破板后的数据,时间太久了也没用,次新股一年为限,但我们可以以一个月为限,本别分析,破板买入,30个交易日内每天的盈利概率。

要做的事情可以分为以下几步:

1. 获取近半年来的新股数据

2. 拿到每支股票上市后的数据

3. 筛选出破板后三十天的数据,并汇总

4. 计算整体上每天盈利的概率

-----

第一步:如何获取近半年的新股数据。

TuShare新股数据接口:

输入参数:retry_count, pause

返回数据较多,是Pandas DataFrame格式的数据,下面折叠的部分是测试输出结果,其中很多对于现在要做的没有用,需要筛选一下。

关心的返回值:code - 股票代码,name - 股票名称, issue_date - 上市日期

import tushare as ts
ts.new_stocks()
Last login: Fri Oct  :: on ttys001
localhost:~ shengtianhe$ python
Python 3.5. |Anaconda 4.2. (x86_64)| (default, Jul , ::)
[GCC 4.2. Compatible Apple LLVM 4.2 (clang-425.0.)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tushare as ts
>>> ts.new_stocks()
[Getting data:]######## code name ipo_date issue_date amount markets price pe \
湘油泵 -- NaN 2023.0 723.0 10.46 22.98
吴江银行 -- NaN 11150.0 3345.0 6.83 12.62
上海银行 -- NaN 60045.0 18000.0 17.77 8.26
国泰集团 -- NaN 5528.0 2028.0 0.00 0.00
海兴电力 -- NaN 9334.0 3734.0 23.63 21.32
国检集团 -- NaN 5500.0 2200.0 10.04 22.97
东方中科 -- NaN 2834.0 1124.0 4.96 22.95
快克股份 -- NaN 2300.0 2070.0 16.50 21.04
贝达药业 -- NaN 4100.0 3690.0 17.57 22.99
丝路视觉 -- NaN 2780.0 2502.0 5.54 22.99
富森美 -- NaN 4400.0 3960.0 23.49 22.99
海天精工 -- NaN 5220.0 4698.0 1.50 22.98
理工光科 -- NaN 1400.0 1400.0 13.91 22.99
中富通 -- NaN 1753.0 1753.0 10.26 22.99
塞力斯 -- -- 1274.0 1274.0 26.91 22.98
佳发安泰 -- NaN 1800.0 1800.0 17.56 22.99
新华网 -- -- 5190.0 4672.0 27.69 22.99
电魂网络 -- -- 6000.0 5400.0 15.62 18.16
杭州银行 -- -- 26175.0 23558.0 14.39 10.23
黄山胶囊 -- -- 2167.0 1950.0 13.88 22.98
五洲新春 -- -- 5060.0 4554.0 8.80 22.96
和科达 -- -- 2500.0 2250.0 8.29 22.98
能科股份 -- -- 2839.0 2555.0 7.54 22.97
万集科技 -- -- 2670.0 2403.0 12.25 20.91
集智股份 -- -- 1200.0 1200.0 14.08 22.99
和仁科技 -- -- 2000.0 2000.0 12.53 22.99
路通视信 -- -- 2000.0 2000.0 15.40 22.99
汇顶科技 -- -- 4500.0 4050.0 19.42 22.99
古鳌科技 -- -- 1836.0 1836.0 12.48 22.88
顾家家居 -- -- 8250.0 7425.0 24.66 22.99
.. ... ... ... ... ... ... ... ...
东方新星 -- -- 2534.0 2281.0 7.49 20.49
海利生物 -- -- 7000.0 6300.0 6.81 21.28
雪峰科技 -- -- 8235.0 7412.0 4.98 22.95
创业软件 -- -- 1700.0 1530.0 14.02 22.98
永兴特钢 -- -- 5000.0 4500.0 21.74 17.97
莱克电气 -- -- 4100.0 3690.0 19.08 22.99
惠伦晶体 -- -- 4208.0 3787.0 6.43 22.96
赢合科技 -- -- 1950.0 1755.0 12.41 20.34
山河药辅 -- -- 1160.0 1044.0 14.96 22.99
中光防雷 -- -- 2107.0 1896.0 14.74 13.24
山河药辅 -- -- 1160.0 1044.0 14.96 22.99
中光防雷 -- -- 2107.0 1896.0 14.74 13.24
普丽盛 -- -- 2500.0 2250.0 19.17 22.55
金石东方 -- -- 1700.0 1530.0 10.57 22.98
鹏辉能源 -- -- 2100.0 1890.0 14.87 22.99
易尚展示 -- -- 1756.0 1580.0 10.48 22.98
博济医药 -- -- 1667.0 1500.0 12.87 22.98
乐凯新材 -- -- 1540.0 1386.0 8.85 7.11
双杰电气 -- -- 3449.0 3104.0 12.13 22.89
山东华鹏 -- -- 2640.0 2376.0 8.73 22.97
鲍斯股份 -- -- 2112.0 1901.0 9.81 22.81
福鞍股份 -- -- 2500.0 2250.0 10.77 22.91
江苏有线 -- -- 59700.0 53730.0 5.47 22.98
浩云科技 -- -- 2000.0 1800.0 15.79 22.88
运达科技 -- -- 2800.0 2520.0 21.70 22.97
清水源 -- -- 1670.0 1503.0 10.53 19.30
珍宝岛 -- -- 6458.0 5812.0 23.60 22.91
大豪科技 -- -- 5100.0 4590.0 11.17 22.98
广生堂 -- -- 1750.0 1260.0 21.47 18.67
NaN NaN NaN NaN NaN NaN NaN limit funds ballot
0.70 2.116 0.00
3.30 7.615 0.00
18.00 106.700 0.00
0.00 3.566 0.00
3.70 22.065 0.00
2.20 5.522 0.00
1.10 1.406 0.00
0.90 3.795 0.03
1.20 7.204 0.04
1.10 1.540 0.03
1.30 10.336 0.04
1.50 4.305 0.05
1.40 1.947 0.01
1.75 1.799 0.02
1.20 3.428 0.02
1.80 3.161 0.02
2.00 14.372 0.04
2.40 9.372 0.05
7.80 37.666 0.13
0.85 3.008 0.02
2.00 4.453 0.04
1.00 2.072 0.03
1.10 2.141 0.03
1.05 3.271 0.03
1.20 1.690 0.01
2.00 2.506 0.02
2.00 3.080 0.02
1.30 8.739 0.05
1.80 2.291 0.02
2.40 20.345 0.06
.. ... ... ...
1.00 1.898 0.32
2.80 4.774 0.31
3.20 3.875 0.30
0.65 2.384 0.20
2.00 10.872 0.48
1.20 7.823 0.40
1.55 2.706 0.34
0.75 2.421 0.33
0.45 1.736 0.30
0.80 3.106 0.30
0.45 1.736 0.30
0.80 3.106 0.30
1.00 4.212 0.62
0.65 1.475 0.44
0.80 2.782 0.45
0.65 1.550 0.34
0.65 1.884 0.30
0.60 1.115 0.46
1.30 3.698 0.77
1.00 1.934 0.47
0.80 1.732 0.68
1.00 2.399 0.47
17.70 31.220 1.24
0.80 2.841 0.46
1.10 5.578 0.61
0.60 1.523 0.50
1.80 14.275 0.83
1.50 5.183 0.62
0.70 2.588 0.30
NaN NaN NaN [ rows x columns]

筛选规则:

issue_date 在半年之内。

Pandas API:

http://pandas.pydata.org/pandas-docs/stable/api.html

其中pandas.DataFrame.Sort可以带参数过滤DataFrame:

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sort.html

但觉得这样还得进一步过滤,搜了一下,发现可以直接操作。

import tushare as ts
df=ts.new_stocks()
df=df[df['issue_date']>'2016-06-01']

这样我们就直接取到了所有六月一日后上市的新股数据:

>>> import tushare as ts
>>> df=ts.new_stocks()
[Getting data:]########>>> df=df[df['issue_date']>'2016-06-01']
>>> df
code name ipo_date issue_date amount markets price pe \
塞力斯 -- -- 1274.0 1274.0 26.91 22.98
新华网 -- -- 5190.0 4672.0 27.69 22.99
电魂网络 -- -- 6000.0 5400.0 15.62 18.16
杭州银行 -- -- 26175.0 23558.0 14.39 10.23
黄山胶囊 -- -- 2167.0 1950.0 13.88 22.98
五洲新春 -- -- 5060.0 4554.0 8.80 22.96
和科达 -- -- 2500.0 2250.0 8.29 22.98
能科股份 -- -- 2839.0 2555.0 7.54 22.97
万集科技 -- -- 2670.0 2403.0 12.25 20.91
集智股份 -- -- 1200.0 1200.0 14.08 22.99
和仁科技 -- -- 2000.0 2000.0 12.53 22.99
路通视信 -- -- 2000.0 2000.0 15.40 22.99
汇顶科技 -- -- 4500.0 4050.0 19.42 22.99
古鳌科技 -- -- 1836.0 1836.0 12.48 22.88
顾家家居 -- -- 8250.0 7425.0 24.66 22.99
博创科技 -- -- 2067.0 1860.0 11.75 22.97
恒康家居 -- -- 6000.0 5400.0 15.41 22.66
路畅科技 -- -- 3000.0 2700.0 6.89 22.97
来伊份 -- -- 6000.0 5400.0 11.67 22.98
鼎信通讯 -- -- 4340.0 3906.0 14.02 22.99
崇达技术 -- -- 5000.0 4500.0 16.31 22.98
城地股份 -- -- 2460.0 2214.0 12.13 22.97
川环科技 -- -- 1495.0 1495.0 22.07 22.99
优德精密 -- -- 1667.0 1667.0 15.03 22.99
常熟银行 -- -- 22227.0 20005.0 4.28 9.89
雄帝科技 -- -- 1334.0 1334.0 20.43 22.99
泰晶科技 -- -- 1668.0 1668.0 16.14 22.99
联得装备 -- -- 1783.0 1783.0 13.50 22.98
无锡银行 -- -- 18481.0 16633.0 4.47 9.91
农尚环境 -- -- 2328.0 2095.0 9.06 18.12
.. ... ... ... ... ... ... ... ...
健帆生物 -- -- 4200.0 3780.0 10.80 22.98
中潜股份 -- -- 2125.0 1913.0 10.50 22.99
江苏银行 -- -- 115445.0 103900.0 6.27 7.64
三祥新材 -- -- 3355.0 3020.0 5.28 22.98
超讯通信 -- -- 2000.0 2000.0 11.99 22.98
博思软件 -- -- 1710.0 1710.0 11.68 22.99
华锋股份 -- -- 2000.0 2000.0 6.20 22.96
辰安科技 -- -- 2000.0 2000.0 21.92 22.99
海波重科 -- -- 2560.0 2304.0 10.04 22.97
吉宏股份 -- -- 2900.0 2610.0 6.37 22.84
海汽集团 -- -- 7900.0 7110.0 3.82 18.20
科大国创 -- -- 2300.0 2070.0 10.05 22.84
丰元股份 -- -- 2423.0 2181.0 5.80 22.97
爱司凯 -- -- 2000.0 2000.0 11.26 22.98
世名科技 -- -- 1667.0 1667.0 18.55 22.98
玲珑轮胎 -- -- 20000.0 18000.0 12.98 22.97
新宏泰 -- -- 3705.0 3335.0 8.49 19.30
洪汇新材 -- -- 2700.0 2430.0 9.52 22.98
哈森股份 -- -- 5436.0 4892.0 9.15 22.98
合诚股份 -- -- 2500.0 2250.0 10.55 21.00
盛讯达 -- -- 2334.0 2101.0 22.22 22.68
微光股份 -- -- 1472.0 1472.0 19.51 15.24
新光药业 -- -- 2000.0 2000.0 12.20 8.26
小康股份 -- -- 14250.0 12825.0 5.81 18.19
三德科技 -- -- 2500.0 2250.0 8.57 22.98
环球印务 -- -- 2500.0 2250.0 7.98 22.99
上海沪工 -- -- 2500.0 2250.0 10.09 22.98
中国核建 -- -- 52500.0 47250.0 3.47 15.60
久之洋 -- -- 3000.0 2700.0 22.50 22.98
三棵树 -- -- 2500.0 2250.0 15.94 18.09 limit funds ballot
1.20 3.428 0.02
2.00 14.372 0.04
2.40 9.372 0.05
7.80 37.666 0.13
0.85 3.008 0.02
2.00 4.453 0.04
1.00 2.072 0.03
1.10 2.141 0.03
1.05 3.271 0.03
1.20 1.690 0.01
2.00 2.506 0.02
2.00 3.080 0.02
1.30 8.739 0.05
1.80 2.291 0.02
2.40 20.345 0.06
0.80 2.429 0.03
2.40 9.246 0.05
1.20 2.067 0.03
2.40 7.002 0.05
1.30 6.085 0.05
1.50 8.155 0.04
0.90 3.647 0.03
1.45 3.299 0.02
1.65 2.506 0.02
6.60 9.513 0.12
1.30 2.725 0.01
1.60 2.692 0.02
1.75 2.407 0.02
5.50 8.261 0.10
0.90 2.110 0.03
.. ... ... ...
1.20 4.536 0.05
0.70 2.231 0.04
34.60 72.384 0.47
1.30 1.771 0.04
2.00 2.398 0.02
1.70 1.997 0.02
2.00 1.240 0.02
2.00 4.384 0.02
1.00 2.570 0.04
1.15 3.004 0.03
2.30 3.018 0.08
0.90 2.312 0.04
0.95 1.405 0.03
2.00 2.252 0.02
1.65 3.092 0.02
6.00 25.960 0.14
1.40 3.148 0.05
1.05 2.570 0.03
2.10 4.974 0.06
1.00 2.638 0.04
0.90 5.188 0.04
1.45 2.872 0.02
2.00 2.440 0.02
4.20 8.550 0.11
1.00 2.143 0.04
1.00 1.995 0.03
1.00 2.522 0.04
15.70 20.212 0.28
1.20 6.750 0.04
1.00 3.987 0.04 [ rows x columns]

但我们只需要code, name 和 issue_date的信息,所以再加一行:

import tushare as ts
df=ts.new_stocks()
df=df[df['issue_date']>'2016-06-01']
df=df[['code','name','issue_date']]

这是运行结果:

>>> df=df[['code','name','issue_date']]
>>> df
code name issue_date
塞力斯 --
新华网 --
电魂网络 --
杭州银行 --
黄山胶囊 --
五洲新春 --
和科达 --
能科股份 --
万集科技 --
集智股份 --
和仁科技 --
路通视信 --
汇顶科技 --
古鳌科技 --
顾家家居 --
博创科技 --
恒康家居 --
路畅科技 --
来伊份 --
鼎信通讯 --
崇达技术 --
城地股份 --
川环科技 --
优德精密 --
常熟银行 --
雄帝科技 --
泰晶科技 --
联得装备 --
无锡银行 --
农尚环境 --
.. ... ... ...
健帆生物 --
中潜股份 --
江苏银行 --
三祥新材 --
超讯通信 --
博思软件 --
华锋股份 --
辰安科技 --
海波重科 --
吉宏股份 --
海汽集团 --
科大国创 --
丰元股份 --
爱司凯 --
世名科技 --
玲珑轮胎 --
新宏泰 --
洪汇新材 --
哈森股份 --
合诚股份 --
盛讯达 --
微光股份 --
新光药业 --
小康股份 --
三德科技 --
环球印务 --
上海沪工 --
中国核建 --
久之洋 --
三棵树 -- [ rows x columns]

现在我们已经取到过去半年上市的新股的数据,包括股票代码,名称和上市日期。

-----

第二步:如何拿到每支股票上市后的数据。

TuShare历史交易数据接口:

输入参数:code, start, end, ktype(数据类型,默认是日K线), retry_count, pause

返回数据较多,同样也是Pandas DataFrame格式的数据,下面折叠的部分是测试输出结果,其中很多对于现在要做的没有用,需要筛选一下。

关心的返回值:date - 日期,open - 开盘价, close - 收盘价, p_change - 涨跌幅

我们以六月三日上市的新股三棵树(603737)为例:

import tushare as ts
df=ts.get_hist_data('')

测试运行如下:

>>> df=ts.get_hist_data('')
>>> df
open high close low volume price_change p_change \
date
-- 82.50 82.70 81.53 81.10 8990.79 -0.57 -0.69
-- 82.30 82.35 82.19 81.34 6959.08 0.24 0.29
-- 82.04 84.18 81.99 81.51 11004.83 -0.11 -0.13
-- 82.68 83.32 82.09 82.03 14014.53 -0.89 -1.07
-- 78.98 83.79 83.00 78.31 26251.55 3.93 4.97
-- 79.19 79.34 79.08 77.32 12459.65 -0.17 -0.21
-- 78.50 79.50 79.25 78.05 10224.54 0.75 0.95
-- 80.60 80.60 78.49 78.44 17851.50 -1.27 -1.59
-- 77.72 79.80 79.77 77.72 12765.18 1.76 2.26
-- 78.60 79.70 78.01 77.80 15855.89 -1.07 -1.35
-- 79.42 80.10 79.00 78.21 11452.91 -0.14 -0.18
-- 78.85 79.88 79.15 78.20 11277.68 0.18 0.23
-- 77.17 79.47 78.95 76.60 18557.77 0.90 1.15
-- 77.95 79.30 78.07 76.63 21518.05 0.05 0.06
-- 72.93 79.95 78.03 72.93 25128.50 5.11 7.01
-- 73.08 73.29 72.90 71.90 7940.73 -0.15 -0.20
-- 73.18 74.16 73.46 73.08 9711.11 0.05 0.07
-- 73.25 74.10 73.37 72.30 8694.66 0.10 0.14
-- 72.02 73.31 73.30 71.88 10588.05 0.78 1.08
-- 76.24 76.24 72.51 72.30 18983.21 -3.77 -4.94
-- 78.18 78.18 76.31 76.12 13200.18 -1.59 -2.04
-- 79.10 79.80 77.90 77.61 15900.57 -0.78 -0.99
-- 79.10 79.80 78.67 77.80 13804.02 -0.96 -1.21
-- 81.60 81.60 79.64 78.80 15751.28 -1.07 -1.33
-- 80.56 81.39 80.71 80.48 8901.68 0.12 0.15
-- 81.80 82.80 80.57 80.28 23667.66 -3.47 -4.13
-- 86.20 88.16 83.99 83.62 38293.43 -2.19 -2.54
-- 82.50 86.22 86.19 81.30 30861.92 1.55 1.83
-- 83.78 85.96 84.66 83.55 23143.33 0.95 1.14
-- 82.50 83.87 83.71 82.50 13567.35 0.90 1.09
... ... ... ... ... ... ... ...
-- 100.00 100.98 97.17 96.66 25811.42 -3.71 -3.68
-- 100.50 103.20 100.90 99.01 35970.92 1.18 1.18
-- 98.00 100.84 99.73 97.50 29597.28 0.87 0.88
-- 99.00 101.66 98.87 96.50 38939.97 -1.65 -1.64
-- 96.96 101.58 100.51 92.06 54520.75 1.13 1.14
-- 110.00 110.80 99.38 99.38 63645.73 -11.04 -10.00
-- 111.51 113.40 110.47 110.00 42732.83 -3.25 -2.86
-- 111.12 118.50 113.71 111.02 64406.13 0.96 0.85
-- 114.00 115.60 112.75 110.00 57436.00 -2.93 -2.53
-- 110.11 117.99 115.63 109.10 96591.87 5.25 4.76
-- 111.89 112.00 110.46 108.33 56773.07 -1.35 -1.21
-- 111.00 116.00 111.82 108.50 87725.18 -4.26 -3.67
-- 111.00 116.08 116.08 106.00 179909.75 10.55 10.00
-- 105.53 105.53 105.53 105.53 1748.55 9.59 10.00
-- 95.94 95.94 95.94 95.94 2631.18 8.72 10.00
-- 87.22 87.22 87.22 87.22 10737.11 7.93 10.00
-- 79.29 79.29 79.29 79.29 2013.69 7.21 10.00
-- 72.08 72.08 72.08 72.08 2413.01 6.55 9.99
-- 65.53 65.53 65.53 65.53 1152.33 5.96 10.01
-- 59.57 59.57 59.57 59.57 998.79 5.42 10.01
-- 54.15 54.15 54.15 54.15 1332.01 4.92 9.99
-- 49.23 49.23 49.23 49.23 1086.13 4.48 10.01
-- 44.75 44.75 44.75 44.75 257.15 4.07 10.01
-- 40.68 40.68 40.68 40.68 286.50 3.70 10.01
-- 36.98 36.98 36.98 36.98 627.34 3.36 9.99
-- 33.62 33.62 33.62 33.62 346.27 3.06 10.01
-- 30.56 30.56 30.56 30.56 158.75 2.78 10.01
-- 27.78 27.78 27.78 27.78 35.00 2.53 10.02
-- 25.25 25.25 25.25 25.25 22.00 2.30 10.02
-- 22.95 22.95 22.95 22.95 155.00 7.01 43.98 ma5 ma10 ma20 v_ma5 v_ma10 v_ma20 turnover
date
-- 82.160 80.540 78.207 13444.16 13637.75 14011.51 3.60
-- 81.670 80.287 77.946 14137.93 13883.97 14221.98 2.78
-- 81.082 79.983 77.732 14791.02 14315.83 14669.05 4.40
-- 80.382 79.679 77.566 16160.35 15071.12 14809.01 5.61
-- 79.918 79.277 77.443 15910.48 15821.47 14895.85 10.50
-- 78.920 78.780 77.329 13831.35 15709.17 14028.36 4.98
-- 78.904 78.162 77.403 13630.00 15257.28 14588.76 4.09
-- 78.884 77.583 77.640 13840.63 15205.93 15992.20 7.14
-- 78.976 77.071 78.025 13981.89 14290.25 16642.72 5.11
-- 78.636 76.424 78.270 15732.46 14072.54 17161.63 6.34
-- 78.640 75.874 78.555 17586.98 14385.27 17047.20 4.58
-- 77.420 75.605 78.744 16884.55 14559.99 16960.55 4.51
-- 76.282 75.480 78.975 16571.23 15022.28 17103.11 7.42
-- 75.166 75.452 79.172 14598.61 14546.91 16525.29 8.61
-- 74.212 75.609 79.420 12412.61 13970.23 15914.86 10.05
-- 73.108 75.877 79.673 11183.55 12347.55 15266.72 3.18
-- 73.790 76.644 80.274 12235.44 13920.24 15776.66 3.88
-- 74.678 77.697 80.795 13473.33 16778.47 15717.01 3.48
-- 75.738 78.979 81.333 14495.21 18995.20 15837.12 4.24
-- 77.006 80.115 81.848 15527.85 20250.73 16159.17 7.59
-- 78.646 81.235 82.447 13511.55 19709.14 16344.07 5.28
-- 79.498 81.883 82.944 15605.04 19361.10 16273.08 6.36
-- 80.716 82.470 83.386 20083.61 19183.94 16362.07 5.52
-- 82.220 82.891 83.768 23495.19 18503.67 17271.29 6.30
-- 83.224 83.231 84.417 24973.60 17859.48 17452.37 3.56
-- 83.824 83.469 85.042 25906.74 18185.89 18336.10 9.47
-- 84.268 83.905 85.753 23117.16 17633.07 18567.30 15.32
-- 84.224 83.894 86.355 18284.26 14655.54 18866.01 12.34
-- 83.562 83.686 86.659 13512.14 12679.05 19115.24 9.26
-- 83.238 83.580 86.929 10745.36 12067.61 19107.11 5.43
... ... ... ... ... ... ... ...
-- 99.436 104.912 97.632 36968.07 50965.29 42787.78 10.32
-- 99.878 106.241 95.481 44534.93 54061.45 41563.81 14.39
-- 101.792 107.333 92.898 45887.31 59236.88 39819.57 11.84
-- 104.588 108.968 90.149 52849.08 74268.13 38352.56 15.58
-- 107.364 109.634 87.239 56548.29 70548.99 36419.89 21.81
-- 110.388 109.177 84.063 64962.51 65360.03 33725.22 25.46
-- 112.604 107.961 80.774 63587.98 60069.17 30560.24 17.09
-- 112.874 104.843 76.779 72586.45 55997.25 28431.54 25.76
-- 113.348 100.680 72.483 95687.17 49797.94 25212.98 22.97
-- 111.904 95.958 68.108 84549.68 44169.57 22342.28 38.64
-- 107.966 90.352 63.474 65757.55 34610.27 17520.44 22.71
-- 103.318 84.721 61.001 56550.35 29066.16 15454.51 35.09
-- 96.812 78.462 58.177 39408.06 20402.25 11439.48 71.96
-- 88.012 71.329 54.771 3908.71 2437.00 1529.46 0.70
-- 80.012 64.844 51.599 3789.46 2290.79 1515.77 1.05
-- 72.738 58.948 48.643 3462.99 2090.41 1441.41 4.29
-- 66.124 53.588 45.887 1581.97 1051.32 777.43 0.81
-- 60.112 48.715 43.318 1396.45 865.83 682.33 0.97
-- 54.646 44.285 40.921 965.28 628.03 538.11 0.46
-- 49.676 40.257 38.684 792.12 514.99 482.27 0.40
-- 45.158 36.595 36.595 717.83 430.62 430.62 0.53
-- 41.052 34.644 34.644 520.68 330.46 330.46 0.43
-- 37.318 32.821 32.821 335.20 236.00 236.00 0.10
-- 33.924 31.117 31.117 290.77 232.98 232.98 0.11
-- 30.838 29.523 29.523 237.87 224.06 224.06 0.25
-- 28.032 28.032 28.032 143.40 143.40 143.40 0.14
-- 26.635 26.635 26.635 92.69 92.69 92.69 0.06
-- 25.327 25.327 25.327 70.67 70.67 70.67 0.01
-- 24.100 24.100 24.100 88.50 88.50 88.50 0.01
-- 22.950 22.950 22.950 155.00 155.00 155.00 0.06 [ rows x columns]

同样,按照第一步的思路对数据稍加处理:

df=df[['date','open','close','p_change']]

此时却出了问题,报错如下:

>>> df=df[['date','open','close','p_change']]
Traceback (most recent call last):
File "<stdin>", line , in <module>
File "/Users/shengtianhe/anaconda/lib/python3.5/site-packages/pandas/core/frame.py", line , in __getitem__
return self._getitem_array(key)
File "/Users/shengtianhe/anaconda/lib/python3.5/site-packages/pandas/core/frame.py", line , in _getitem_array
indexer = self.ix._convert_to_indexer(key, axis=)
File "/Users/shengtianhe/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py", line , in _convert_to_indexer
raise KeyError('%s not in index' % objarr[mask])
KeyError: "['date'] not in index"

检查打出来的数据名称没问题,就考虑,第一列会不会是其他的东西,搜到几个有用的命令:

from pandas import DataFrame #从pandas库中引用DataFrame

df_obj = DataFrame() #创建DataFrame对象
df_obj.dtypes #查看各行的数据格式
df_obj.head() #查看前几行的数据,默认前5行
df_obj.tail() #查看后几行的数据,默认后5行
df_obj.index #查看索引
df_obj.columns #查看列名
df_obj.values #查看数据值
df_obj.describe #描述性统计
df_obj.T #转置
df_obj.sort(columns = ‘’)#按列名进行排序
df_obj.sort_index(by=[‘’,’’])#多列排序,使用时报该函数已过时,请用sort_values
df_obj.sort_values(by=['',''])同上

运行index和columns,果然date是index:

>>> df.columns
Index(['open', 'high', 'close', 'low', 'volume', 'price_change', 'p_change',
'ma5', 'ma10', 'ma20', 'v_ma5', 'v_ma10', 'v_ma20', 'turnover'],
dtype='object')
>>> df.index
Index(['2016-10-28', '2016-10-27', '2016-10-26', '2016-10-25', '2016-10-24',
'2016-10-21', '2016-10-20', '2016-10-19', '2016-10-18', '2016-10-17',
'2016-10-14', '2016-10-13', '2016-10-12', '2016-10-11', '2016-10-10',
'2016-09-30', '2016-09-29', '2016-09-28', '2016-09-27', '2016-09-26',
'2016-09-23', '2016-09-22', '2016-09-21', '2016-09-20', '2016-09-19',
'2016-09-14', '2016-09-13', '2016-09-12', '2016-09-09', '2016-09-08',
'2016-09-07', '2016-09-06', '2016-09-05', '2016-09-02', '2016-09-01',
'2016-08-31', '2016-08-30', '2016-08-29', '2016-08-26', '2016-08-25',
'2016-08-24', '2016-08-23', '2016-08-22', '2016-08-19', '2016-08-18',
'2016-08-17', '2016-08-16', '2016-08-15', '2016-08-12', '2016-08-11',
'2016-08-10', '2016-08-09', '2016-08-08', '2016-08-05', '2016-08-04',
'2016-08-03', '2016-08-02', '2016-08-01', '2016-07-29', '2016-07-28',
'2016-07-27', '2016-07-26', '2016-07-25', '2016-07-22', '2016-07-21',
'2016-07-20', '2016-07-19', '2016-07-18', '2016-07-15', '2016-07-14',
'2016-07-13', '2016-07-12', '2016-07-11', '2016-07-08', '2016-07-07',
'2016-07-06', '2016-07-05', '2016-07-04', '2016-07-01', '2016-06-30',
'2016-06-29', '2016-06-28', '2016-06-27', '2016-06-24', '2016-06-23',
'2016-06-22', '2016-06-21', '2016-06-20', '2016-06-17', '2016-06-16',
'2016-06-15', '2016-06-14', '2016-06-13', '2016-06-08', '2016-06-07',
'2016-06-06', '2016-06-03'],
dtype='object', name='date')

所以选取列的语句应该是:

df=df[['open','close','p_change']]

结果如下:

>>> df=df[['open','close','p_change']]
>>> df
open close p_change
date
-- 82.50 81.53 -0.69
-- 82.30 82.19 0.29
-- 82.04 81.99 -0.13
-- 82.68 82.09 -1.07
-- 78.98 83.00 4.97
-- 79.19 79.08 -0.21
-- 78.50 79.25 0.95
-- 80.60 78.49 -1.59
-- 77.72 79.77 2.26
-- 78.60 78.01 -1.35
-- 79.42 79.00 -0.18
-- 78.85 79.15 0.23
-- 77.17 78.95 1.15
-- 77.95 78.07 0.06
-- 72.93 78.03 7.01
-- 73.08 72.90 -0.20
-- 73.18 73.46 0.07
-- 73.25 73.37 0.14
-- 72.02 73.30 1.08
-- 76.24 72.51 -4.94
-- 78.18 76.31 -2.04
-- 79.10 77.90 -0.99
-- 79.10 78.67 -1.21
-- 81.60 79.64 -1.33
-- 80.56 80.71 0.15
-- 81.80 80.57 -4.13
-- 86.20 83.99 -2.54
-- 82.50 86.19 1.83
-- 83.78 84.66 1.14
-- 82.50 83.71 1.09
... ... ... ...
-- 100.00 97.17 -3.68
-- 100.50 100.90 1.18
-- 98.00 99.73 0.88
-- 99.00 98.87 -1.64
-- 96.96 100.51 1.14
-- 110.00 99.38 -10.00
-- 111.51 110.47 -2.86
-- 111.12 113.71 0.85
-- 114.00 112.75 -2.53
-- 110.11 115.63 4.76
-- 111.89 110.46 -1.21
-- 111.00 111.82 -3.67
-- 111.00 116.08 10.00
-- 105.53 105.53 10.00
-- 95.94 95.94 10.00
-- 87.22 87.22 10.00
-- 79.29 79.29 10.00
-- 72.08 72.08 9.99
-- 65.53 65.53 10.01
-- 59.57 59.57 10.01
-- 54.15 54.15 9.99
-- 49.23 49.23 10.01
-- 44.75 44.75 10.01
-- 40.68 40.68 10.01
-- 36.98 36.98 9.99
-- 33.62 33.62 10.01
-- 30.56 30.56 10.01
-- 27.78 27.78 10.02
-- 25.25 25.25 10.02
-- 22.95 22.95 43.98 [ rows x columns]

现在我们已经取得了过去半年新上市的股票和他们上市后的数据。

-----

第三步:如何筛选出破板后三十天的数据,并汇总。

……此处省略长达二十分钟的思考与百度……想到这样一个办法取得第一次破板的日期:

import tushare as ts 
df=ts.get_hist_data('603737')
df=df[['open','close','p_change']]
start_date=df[df['p_change']<9.8].tail(1).index[0]

解释一下:df是一个DataFrame, 可以提取某一列中值小于9.8的所有行,提取结果仍然是DataFrame,DF有个方法叫tail()取最后几条数据,我们已经知道日期是index,所以取日期用index[0],由于本人python没基础…取日期的方法是试出来的……

接下来,用这个日期去过滤,我们只关心破板后的数据:

df=df[df.index>=start_date]

这里[]中的还是我试出来的……觉得应该这么写……

>>> import tushare as ts
>>> df=ts.get_hist_data('')
>>>
>>> df=df[['open','close','p_change']]
>>> start_date=df[df['p_change']<9.8].tail().index[]
>>> df=df[df.index>start_date]
>>> df
open close p_change
date
-- 82.50 81.53 -0.69
-- 82.30 82.19 0.29
-- 82.04 81.99 -0.13
-- 82.68 82.09 -1.07
-- 78.98 83.00 4.97
-- 79.19 79.08 -0.21
-- 78.50 79.25 0.95
-- 80.60 78.49 -1.59
-- 77.72 79.77 2.26
-- 78.60 78.01 -1.35
-- 79.42 79.00 -0.18
-- 78.85 79.15 0.23
-- 77.17 78.95 1.15
-- 77.95 78.07 0.06
-- 72.93 78.03 7.01
-- 73.08 72.90 -0.20
-- 73.18 73.46 0.07
-- 73.25 73.37 0.14
-- 72.02 73.30 1.08
-- 76.24 72.51 -4.94
-- 78.18 76.31 -2.04
-- 79.10 77.90 -0.99
-- 79.10 78.67 -1.21
-- 81.60 79.64 -1.33
-- 80.56 80.71 0.15
-- 81.80 80.57 -4.13
-- 86.20 83.99 -2.54
-- 82.50 86.19 1.83
-- 83.78 84.66 1.14
-- 82.50 83.71 1.09
... ... ... ...
-- 88.29 90.08 0.11
-- 89.00 90.16 -0.50
-- 87.18 90.58 3.70
-- 86.61 87.34 1.17
-- 85.00 86.35 1.41
-- 87.52 85.12 -3.47
-- 88.01 88.20 -0.68
-- 85.67 88.78 2.98
-- 84.93 86.21 1.51
-- 87.35 84.93 -4.30
-- 85.75 88.77 3.75
-- 86.10 85.53 -0.48
-- 91.50 85.95 -6.56
-- 87.90 91.97 4.54
-- 88.33 87.90 -0.66
-- 92.59 88.45 -4.69
-- 94.69 92.81 -1.91
-- 94.98 94.60 0.06
-- 97.00 94.56 -2.71
-- 100.00 97.17 -3.68
-- 100.50 100.90 1.18
-- 98.00 99.73 0.88
-- 99.00 98.87 -1.64
-- 96.96 100.51 1.14
-- 110.00 99.38 -10.00
-- 111.51 110.47 -2.86
-- 111.12 113.71 0.85
-- 114.00 112.75 -2.53
-- 110.11 115.63 4.76
-- 111.89 110.46 -1.21 [ rows x columns]

接下来,假设破板买入后最长持股10天,这样我们只取妹纸股票之后10天的数据,这样数据比较整齐,也便于后续处理。如果数据不满10天,则跳过。

df=df.tail(11)['close']
>>> import tushare as ts
>>> df=ts.get_hist_data('')
>>>
>>> df=df[['open','close','p_change']]
>>> start_date=df[df['p_change']<9.8].tail().index[]
>>> df=df[df.index>=start_date]
>>> df=df.tail()['close']
>>> df
date
-- 100.90
-- 99.73
-- 98.87
-- 100.51
-- 99.38
-- 110.47
-- 113.71
-- 112.75
-- 115.63
-- 110.46
-- 111.82
Name: close, dtype: float64

通过上一步,我们取到包含破板当日以及之后十天的收盘价,将数据转换为numpy.array数据。

close_array=df.values
>>> close_array=df.values
>>> close_array
array([ 100.9 , 99.73, 98.87, 100.51, 99.38, 110.47, 113.71,
112.75, 115.63, 110.46, 111.82])

进一步进行处理,如果破板后某个交易日收盘价格高于破板当天收盘价,则将array中的值置为1,否则为0。

import tushare as ts
import numpy as np df=ts.get_hist_data('') df=df[['open','close','p_change']]
start_date=df[df['p_change']<9.8].tail(1).index[0]
df=df[df.index>=start_date]
df=df.tail(11)['close'] close_array=df.values
for i in range(1,11):
if close_array[i]>close_array[0]:
close_array[i]=1
else:
close_array[i]=0 close_array[0]=0 print (close_array)

输出结果:

localhost:~ shengtianhe$ python find.py
[ . . . . . . . . . . .]

一只股票的数据组织好了,接下来把所有新股的数据取出来,这里需要用到合并array的方法numpy.concatenate,另外代码里还有一些小地方的处理,搜了一圈才知道怎么做,比如如何返回值判断非空:

import tushare as ts
import numpy as np
import pandas as pd df=ts.new_stocks()
df=df[df['issue_date']>'2016-06-01']
df=df[['code','name','issue_date']] df=df[['code']]
stock_code=df.values # print(stock_code) i=0
df_matrix = None for stock in stock_code:
detail=ts.get_hist_data(stock_code[i][0])
if detail is None:
i=i+1
continue detail=detail[['open','close','p_change']]
hasbreak=detail[detail['p_change']<9.8] if hasbreak.size==0:
i=i+1
continue start_date=hasbreak.tail(1).index[0]
hasbreak=hasbreak[hasbreak.index>=start_date]
hasbreak=hasbreak.tail(11)['close'] if hasbreak.size <11:
i=i+1
continue close_array=hasbreak.values
for day in range(1,hasbreak.size):
if close_array[day]>close_array[0]:
close_array[day]=1
else:
close_array[day]=0
close_array[0]=0 df_matrix_thisRound=pd.DataFrame(close_array)
df_matrix_thisRound=df_matrix_thisRound.T if df_matrix is None:
df_matrix=df_matrix_thisRound
else:
df_matrix=np.concatenate((df_matrix,df_matrix_thisRound.values)) i=i+1 print(df_matrix)

运行结果如下:

localhost:~ shengtianhe$ python proData.py
[Getting data:]########[[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]]

-----

第四步:如何计算整体上每天盈利的概率。

这一步就相对简单了,直接求每一列的均值即可,数值上就代表当天盈利的概率了。

http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.DataFrame.mean.html

加入代码如下:

mean=df_matrix.mean(0)
print(mean)

运行结果如下:

[ .          0.62686567  0.65671642  0.64179104  0.65671642  0.71641791
0.74626866 0.73134328 0.71641791 0.70149254 0.70149254]

结论:

就目前时间段来看,破板后买入十个交易日内赚钱的概率还是蛮高的。

这段程序只是第一次写,当然还有很多可以改进的地方,但想要的结果已经有了个大概了。下一步感兴趣可以把结果用可视化的输出表示出来,先去睡觉啦!

总体来说还是比较满足的!

哈哈哈

[Python数据分析]新股破板买入,赚钱几率如何?的更多相关文章

  1. 【Python数据分析】Python3多线程并发网络爬虫-以豆瓣图书Top250为例

    基于上两篇文章的工作 [Python数据分析]Python3操作Excel-以豆瓣图书Top250为例 [Python数据分析]Python3操作Excel(二) 一些问题的解决与优化 已经正确地实现 ...

  2. 【Python数据分析】Python3操作Excel(二) 一些问题的解决与优化

    继上一篇[Python数据分析]Python3操作Excel-以豆瓣图书Top250为例 对豆瓣图书Top250进行爬取以后,鉴于还有一些问题没有解决,所以进行了进一步的交流讨论,这期间得到了一只尼玛 ...

  3. 【搬砖】【Python数据分析】Pycharm中plot绘图不能显示出来

    最近在看<Python数据分析>这本书,而自己写代码一直用的是Pycharm,在练习的时候就碰到了plot()绘图不能显示出来的问题.网上翻了一下找到知乎上一篇回答,试了一下好像不行,而且 ...

  4. [saiku] 源码整合[maven整合]

    saiku源码的整合分为[普通web项目整合]和[maven整合]两种 本节主要是讲解如何整合为maven项目 转载自:http://blog.csdn.net/gsying1474/article/ ...

  5. [terry笔记]Oracle会话追踪(二):TKPROF

    接上一笔记[terry笔记]Oracle会话追踪(一):SQL_TRACE&EVENT 10046 http://www.cnblogs.com/kkterry/p/3279282.html ...

  6. [terry笔记]Oracle会话追踪(一):SQL_TRACE&EVENT 10046

      SQL_TRACE/10046 事件是 Oracle 提供的用于进行 SQL 跟踪的手段,在日常的数据库问题诊断和解决中是非常常用的方法.但其生成的trace文件需要tkprof工具生成一个可供人 ...

  7. Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识

    Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4 ...

  8. [ Bubble Sort ]& block

    [ Bubble Sort ] 冒泡排序!“预处理.block.预编译”!<环境:Terminal的gcc编译器> 简述:冒泡排序就是把小的元素往前调或者把大的元素往后调.比较是相邻的两个 ...

  9. Python数据分析(二): Numpy技巧 (1/4)

    In [1]: import numpy numpy.__version__ Out[1]: '1.13.1' In [2]: import numpy as np  

随机推荐

  1. Android ooVoo Apk附件关联分析

    为什么要分析附件关联 发送和接收的图片以及头像等从网上下载的存储在手机的sdcard上面以转换后的名字命名,需要分析数据库中的记录所对应的sdcard的文件才能关联.比如数据库存储是http://oo ...

  2. Xamarin.ios 调用接口

    NSString urlstring = new NSString("http://211.155.229.230:8585/api/users/postregister");  ...

  3. 10个常见的Node.js面试题

    如果你希望找一份有关Node.js的工作,但又不知道从哪里入手评测自己对Node.js的掌握程度. 本文就为你罗列了10个常见的Node.js面试题,分别考察了Node.js编程相关的几个主要方面. ...

  4. RocketMQ原理解析-Consumer

    consumer 1.启动 有别于其他消息中间件由broker做负载均衡并主动向consumer投递消息,RocketMq是基于拉模式拉取消息,consumer做负载均衡并通过长轮询向broker拉消 ...

  5. Linux可信计算机制模块详细分析之核心文件分析(8)tpm.c核心代码注释(中)

    /*设置TPM命令格式*/ ssize_t tpm_getcap(struct device *dev, __be32 subcap_id, cap_t *cap, const char *desc) ...

  6. web前端基础知识-(七)Django进阶

    通过上节课的学习,我们已经对Django有了简单的了解,现在来深入了解下~ 1. 路由系统 1.1 单一路由对应 url(r'^index$', views.index), 1.2 基于正则的路由 u ...

  7. Yii2.0 对的一些简单的操作

    1: 此方法返回 ['name' => 'daxia'] 的所有数据: User::find()->where(['name' => 'daxia'])->all(); 2: ...

  8. UI

    http://semantic-ui.com/introduction/getting-started.html

  9. 把代码搬到Git Hub 吧(一)

    作为码农的我们,应该都是知道Git Hub,因为git几乎是码农必备的技能啊,所以就不多介绍Git Hub了,直入主题,这篇博客主要讲解Git Hub网页端和客户端的操作. 网页端: 首页第一步自然是 ...

  10. jvm--4垃圾收集

    6. 垃圾收集GC (1)当需要排查各种内存溢出,内存泄漏等问题,当GC成为系统达到更高性能的瓶颈时,我们就需要对这些自动化的GC进行监控和调节. (2)PC计数器.本地方法栈.虚拟机栈,随方法或者线 ...