##通过API获取股票的历史数据 id为股票的代号 def tiingo_history(id): headers = { 'Content-Type': 'application/json', 'Authorization' : 'Token dff6a6f94862a7ee9aaddb4748c3fd1739ab6bf5' } #获取股票历史信息 requestResponse = requests.get("https://api.tiingo.com/tiingo/daily/"+id+"/prices?startDate=2018-01-02&token=dff6a6f94862a7ee9aaddb4748c3fd1739ab6bf5",headers=headers) # {'date': '2020-04-03T00:00:00.000Z', 'close': 241.41, 'high': 245.7, 'low': 238.9741, 'open': 242.8, 'volume': 32470017, 'adjClose': 241.41, 'adjHigh': 245.7, 'adjLow': 238.9741, 'adjOpen': 242.8,'adjVolume': 32470017, 'divCash': 0.0, 'splitFactor': 1.0} # '2020-04-03T00:00:00.000Z', 'close': 30.78, 'high': 31.12, 'low': 30.13, 'open': 30.6, 'volume': 70059740, 'adjClose': 30.78, 'adjHigh': 31.12, 'adjLow': 30.13, 'adjOpen': 30.6, 'adjVolume': 70059740, 'divCash': 0.0, 'splitFactor': 1.0 #日期,该日期的收盘价,最高价,最低价,开盘价,交易股票数量,资产调整后的收盘价,资产调整后的最高价,资产调整后的开最低价,资产调整后的开盘价,资产交易的股票数量,在“日期”支付的股息(请注意,“日期”将是股息的“到期日”),公司拆分、反向拆分或支付分配时用于调整价格的因素。 # result 是list result = requestResponse.json() return result
##绘制股价区间天数总计柱状图:横坐标是价格区间,纵坐标为统计天数 def draw_frequency(id): data=tiingo_history(id) #list存放每天最高点和最低点的平均值 dict={} #keylist存放所有的价格区间分布 keylist=[] for i in range(len(data)): #每天的最高值与最低值的平均值 avg=(float(data[i]['high'])+float(data[i]['low']))/2 #价格区间 key=str(math.ceil(avg))+'-'+ str(math.ceil(avg)+1) # print(key) if(key in dict.keys()): dict[key] +=1 else: dict[key]=1 keylist.append(key) last_dict = sorted(dict.items(),key=lambda d:d[0]) index=sorted(keylist) #valuelist 存放所有的天数 valuelist=[] for j in range(len(last_dict)): valuelist.append(last_dict[j][1]) #price_days 最终按顺序整理统计出来的表[{price:'价格',days:'总计天数'},{}] price_days=[] for k in range(len(index)): dict={'price':index[k],'days':valuelist[k]} price_days.append(dict) # 使用pandas对数据进行清理 df=DataFrame(price_days,index=index,columns=['days']) df.plot(kind='bar',title='股价区间总计天数柱状图') plt.show()