实时计算涨停板股票的封单资金与总流通市值的比例

来源:https://uqer.io/community/share/55a8cf52f9f06c57a11b53b9

申明: 本贴的思路来源于社区高人 @明轩 的启发 说明: 本人之前一直用Matlab/R研究策略,最近发现了“优矿”这个策略研究平台,感觉非常的方便,社区大神也很多,社区里也有很多优秀的帖子, 再加上一直想学python的这种冲动(毕竟python在量化界还是很有地位的),所以就萌生在此发帖写策略的冲动。现在看来,这一切都是值的。

策略介绍: 过去的几个星期里中国股市很不太平,市场基本就只有三种状态:涨停、跌停、停牌。在这种特殊行情下,一些平时不会考虑到的因素可能在 这段时间里很有效。论坛里 @明轩 有一个很不错的想法,计算涨停板股票的封单资金与流通市值的比例,用以反映该股票的热度,这一点在直观上 也是很好理解的,本篇做的也就是这件事情,只需要克隆并运行下面的代码,就可以得到实时的“封单资金流通市值比例”。 在@明轩的帖子中,代码实现的大部分都是C的思想,过程显得比较复杂,而且对于程序也没有太多的注释说明,对初学者来说还是有一些压力的。 作者也是上周才看到“优矿”社区,学python也就一周的时间,初看 @明轩 的代码还是很吃力的,由于作者是matlab出身,所以就用matlab的思想来 实现这个想法(主要是矩阵运算,代码中尽量不要用到for循环),同时对于代码也做到注释详尽,以便和我一样的初学者共同学习进步。 作者新人,初次发帖,难免会有疏忽,还望论坛各位大神予以指正。

  1. # 常量准备
  2. import pandas as pd
  3. from datetime import datetime as dt
  4. from pandas import DataFrame, Series
  5. today = dt.today().strftime('%Y%m%d') # 获得今天的日期
  6. # DataAPI取所有A股
  7. stocks = DataAPI.EquGet(equTypeCD='A',listStatusCD='L',field='secID,nonrestfloatA',pandas="1")
  8. universe = stocks['secID'].tolist() # 转变为list格式,以便和DataAPI中的格式符合
  9. # 取所有A股的最新行情
  10. fields = ['shortNM','lastPrice','bidBook','askBook','suspension']
  11. data = DataFrame()
  12. for i in range(0,len(universe),300): # 原则上可以性取完的,但是试验中作者发现会报错,估计是运算量太大,所以这里分批次取,每次300个
  13. t = DataAPI.MktTickRTSnapshotGet(securityID=universe[i:min(i+300,len(universe))],field=fields,pandas="1")
  14. tmp = DataFrame()
  15. tmp['secID'] = t['ticker']+'.'+t['exchangeCD']
  16. tmp[['shortNM','lastPrice','bidBook_price1','bidBook_volume1','askBook_volume1','suspension']] =t[['shortNM','lastPrice','bidBook_price1','bidBook_volume1','askBook_volume1','suspension']]
  17. data = pd.concat([data,tmp],axis=0) # 数据拼接
  18. # 去掉当日停牌的股票
  19. data['nonrestfloatA'] = stocks['nonrestfloatA']
  20. data = data[data['suspension']==0]
  21. # 去掉没有涨停板的股票
  22. data['suspension'][(data['bidBook_volume1']>0).values & (data['askBook_volume1']==0).values] = 1 # 若涨停盘,suspension则赋值1
  23. data = data[data['suspension']==1]
  24. data.drop(['suspension','askBook_volume1'],axis=1,inplace=True)
  25. # 计算封停板资金量、流通市值、两者比值
  26. data['stop_money'] = data['bidBook_price1'].values * data['bidBook_volume1'].values
  27. data['float_value'] = data['bidBook_price1'].values * data['nonrestfloatA'].values
  28. data['rate'] = data['stop_money']/data['float_value']*100 #百分之几
  29. data = data.sort(columns='rate',ascending=False).reset_index()
  30. data.drop('index',axis=1,inplace=True)
  31. # 重命名
  32. data.columns = ['代码','简称','最新成交价','买一价','买一量','非受限流通股','封停板资金','流通市值','封停资金流通市值比(百分之几)']
  33. data.head(30)
代码简称最新成交价买一价买一量非受限流通股封停板资金流通市值封停资金流通市值比(百分之几)
0600127.XSHG金健米业8.648.64310349321387562402.681418e+081.198854e+0922.366513
1002465.XSHE海格通信26.4926.49486812122328411281.289565e+096.167961e+0920.907480
2002451.XSHE摩恩电气10.1510.1520255795997204532.055963e+081.012163e+0920.312578
3600307.XSHG酒钢宏兴4.974.97418412002231748192.079508e+081.109179e+0918.748172
4601216.XSHG内蒙君正10.9710.97479363302561553185.258615e+082.810024e+0918.713775
5002220.XSHE天宝股份9.539.53363581802036384463.464935e+081.940674e+0917.854281
6000153.XSHE丰原药业8.918.91438253382966452003.904838e+082.643109e+0914.773655
7600363.XSHG联创光电11.9811.98398272192879857984.771301e+083.450070e+0913.829577
8600881.XSHG亚泰集团10.3210.32392199483240000004.047499e+083.343680e+0912.104922
9601989.XSHG中国重工12.9012.90355046903090436004.580105e+083.986662e+0911.488570
10002578.XSHE闽发铝业8.618.61187329031693744791.612903e+081.458314e+0911.060051
11002314.XSHE雅致股份8.518.51297862943310609002.534814e+082.817328e+098.997225
12002596.XSHE海南瑞泽19.7719.77131882881503608402.607325e+082.972634e+098.771092
13300245.XSHE天玑科技14.9914.99306092633581438464.588329e+085.368576e+098.546639
14600725.XSHG云维股份7.217.21103555831313237457.466375e+079.468442e+087.885537
15600635.XSHG大众公用8.458.45156938242032857221.326128e+081.717764e+097.720082
16000005.XSHE世纪星源5.965.96656532819137430073.912936e+085.445908e+097.185093
17000908.XSHE景峰医药13.7213.72222591003183068483.053949e+084.367170e+096.992969
18002392.XSHE北京利尔6.606.60182383162727207821.203729e+081.799957e+096.687542
19300315.XSHE掌趣科技15.4715.4784676401430555901.309944e+082.213070e+095.919126
20000733.XSHE振华科技17.5217.52253941934291588744.449063e+087.518863e+095.917201
21002492.XSHE恒基达鑫10.1510.15150390652585809381.526465e+082.624597e+095.815999
22000662.XSHE索芙特13.5213.52162843612879857982.201646e+083.893568e+095.654571
23002070.XSHE众和股份9.579.57163558863010762801.565258e+082.881300e+095.432472
24002582.XSHE好想你18.9418.94191007734000804053.617686e+087.577523e+094.774234
25600818.XSHG中路股份67.1267.1292037922135940426.177585e+081.433643e+104.309012
26600439.XSHG瑞贝卡6.906.90174111704291588741.201371e+082.961196e+094.057045
27002385.XSHE大北农16.1016.1084505582217213391.360540e+083.569714e+093.811342
28600839.XSHG四川长虹8.078.07211288395605617431.705097e+084.523733e+093.769226
29002176.XSHE江特电机18.4818.48137454983873575222.540168e+087.158367e+093.548530

应用: 只用将上述代码块拷到自己的notebook下运行,便可以得到实时的涨停板资金总流通市值比例。 后文: 得到上述比例表格可能暂时没有实际的用处,顶多指导一下明天投资的优先顺序。所以,接下来作者也会写一下更具实际价值的研究工具, 比如:实时更新昨天封停资金流通市值比例前20,但今天没有涨停的股票(对于市场遇到急跌的情况,一旦这些股票开板了,是非常好的投资机会)。 也希望通过多发一些帖子来进一步熟悉python和quartz。