python 计算走势角度

  • 2019 年 11 月 1 日
  • 筆記

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_44580977/article/details/102215439

使用tushare 获取所有上市股票, 通过daily函数获取股票信息, 再使用np.rad2deg()方法转换为角度值

import tushare as ts  token='......'  #初始化pro接口  pro = ts.pro_api(token)  #查询当前所有正常上市交易的股票列表  data = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date')  print(data.head())  """       ts_code  symbol  name area industry list_date  0  000001.SZ  000001  平安银行   深圳       银行  19910403  1  000002.SZ  000002   万科A   深圳     全国地产  19910129  2  000004.SZ  000004  国农科技   深圳     生物制药  19910114  3  000005.SZ  000005  世纪星源   深圳     环境保护  19901210  4  000006.SZ  000006  深振业A   深圳     区域地产  19920427  """  print(list(data.ts_code)[:20])#只打印20个股票代码  """  ['000001.SZ', '000002.SZ', '000004.SZ', '000005.SZ', '000006.SZ', '000007.SZ', '000008.SZ', '000009.SZ', '000010.SZ', '000011.SZ', '000012.SZ', '000014.SZ', '000016.SZ', '000017.SZ', '000018.SZ', '000019.SZ', '000020.SZ', '000021.SZ', '000023.SZ', '000025.SZ']  """  code_data = pro.daily(ts_code=code, start_date=start, end_date=end)  code_data.fillna(method='bfill', inplace=True) # 后一个数据填充NAN1  code_data.index = pd.to_datetime(code_data.trade_date)  code_data.sort_index(inplace=True)  code_data.drop(axis=1, columns='trade_date',inplace=True)    # 计算走势角度 , 就是斜率对应的度数  def stocks_data_to_deg(stocklist,start,end):      deg_data={}      for code in stocklist:          code_data = pro.daily(ts_code=code, start_date=start, end_date=end)          code_data.fillna(method='bfill', inplace=True) # 后一个数据填充NAN1          code_data.index = pd.to_datetime(code_data.trade_date)          code_data.sort_index(inplace=True)          code_data.drop(axis=1, columns='trade_date',inplace=True)          print(code_data.head())          print(code_data.info())          try:              y_arr = code_data.close.values              x_arr = np.arange(0, len(y_arr))              x_b_arr = sm.add_constant(x_arr)  # 添加常数列1              model = regression.linear_model.OLS(y_arr, x_b_arr).fit()  # 使用OLS做拟合              rad = model.params[1]  # y = kx + b :params[1] = k              deg_data[code] = np.rad2deg(rad)  # 弧度转换为角度          except:              pass      return deg_data    all_data = stocks_data_to_deg(list(data.ts_code),'20181001','20190401')  print(all_data)  #截取部分数据  """  {'000001.SZ': 1.0748324272579852, '000002.SZ': 3.39547471012723, '000004.SZ': 1.5199149426182201, '000005.SZ': 0.48470466772102005, '000006.SZ': 0.6827509040282749, '000007.SZ': -0.2520083986815976, '000008.SZ': 0.2210732091541942, '000009.SZ': 1.0666473158989738, '000010.SZ': -0.5253119599667251, '000011.SZ': 0.8463307217664522, '000012.SZ': 0.6486313122116967, '000014.SZ': 1.163285490089819, '000016.SZ': 0.7006226825688889, '000017.SZ': 0.4274007275784671, '000018.SZ': 0.3153512046323943, '000019.SZ': 0.17441713367513342, '000020.SZ': 0.9886561800484499, '000021.SZ': 1.6740796902283464, '000023.SZ': 2.61835428690094, '000025.SZ': 2.5748214089900228}  """  print(all_data['000002.SZ'])  #3.39547471012723