实用代码Python(一):使用tushare 获取股票信息

需要安装的第三方库

tushare

代码

import tushare as ts
import matplotlib.pyplot as plt
import numpy as np
import datetime as dt

def _get_today():
	"""
	获取今天的日期
	"""
	today = dt.datetime.today()
	return str(today.strftime("%Y-%m-%d"))

def _get_data(code):
	"""
	获取并返回股票代码为code的历史数据
	"""
	today = _get_today()
	#cols = ['open','high','close','low','price_change']
	d = ts.get_hist_data(code,end=today) #[cols]
	d.to_excel(r'D:\file\office2016\Excel\stock\%s.xlsx' %code) #保存历史数据
	return d

def _describe_data(code):
	"""
	返回历史数据统计信息
	"""
	cols = ['open','high','close','low','price_change']
	return print(_get_data(code).describe()[cols]) 

def _recent_data(code,n):
	"""
	返回最近n条的数据
	"""
	cols = ['open','high','close','low','price_change']
	return _get_data(code)[cols].head(n).sort_values(by='date',ascending=True)

def _show_recent(code,n):
	"""
	显示最近n条数据
	"""
	return print(_recent_data(code,n))

def _draw_trends(code,n):
	"""
	绘制最近n条数据的开盘价、最高价、最低价、收盘价的趋势图
	"""
	#获取最近一个月的数据
	data = _recent_data(code,n)
	#获取开盘价、最高价、最低价、收盘价及其平均值
	open_price = data['open']
	high_price = data['high']
	close_price = data['close']
	low_price = data['low']
	mean_open = [np.mean(open_price)]*n
	mean_high = [np.mean(high_price)]*n
	mean_close = [np.mean(close_price)]*n
	mean_low = [np.mean(low_price)]*n
	price_change = data['price_change'] + mean_open[0]
	#绘制属性设置
	plt.style.use('ggplot')
	#plt.grid(False)
	plt.rcParams['font.sans-serif']=['SimHei']
	ax = plt.gca()
	ax.spines['top'].set_visible(False)
	ax.spines['right'].set_visible(False)
	ax.spines['bottom'].set_visible(False)
	#绘制最近n条数据的开盘价、最高价、最低价、收盘价的趋势图
	plt.title('股票代码: %s' %code)
	time = np.arange(n)
	plt.plot(time,open_price,'ro-',alpha=0.4,label='开盘价')
	plt.plot(time,high_price,'y^-',alpha=0.8,label='最高价')
	plt.plot(time,close_price,'go-',alpha=0.4,label='收盘价')
	plt.plot(time,low_price,'bv-',alpha=0.8,label='最低价')
	#绘制平均值
	plt.plot(time,mean_open,'r--',alpha=0.4,label="平均开盘价: {:.3f}".format(mean_open[0]))
	plt.plot(time,mean_high,'y--',alpha=0.4,label="平均最高价: {:.3f}".format(mean_high[0]))
	plt.plot(time,mean_close,'g--',alpha=0.4,label="平均收盘价: {:.3f}".format(mean_close[0]))
	plt.plot(time,mean_low,'b--',alpha=0.4,label="平均最低价: {:.3f}".format(mean_low[0]))
	#绘制涨跌曲线
	plt.plot(time,price_change,'cs--',alpha=0.2,label='涨跌曲线(以平均开盘价为参考线)')
	#显示设置
	plt.xticks(range(n),range(1,n+1)) 
	plt.legend(loc=0)
	plt.grid(False)


def show():
	"""
	显示
	"""
	code=input("输入代码: ")
	n=int(input("查看条数: "))
	print("历史数据统计")
	_describe_data(code)
	print("最近数据")
	_show_recent(code,n)
	_draw_trends(code,n)
	plt.show()

def cal():
	"""
	计算
	"""
	code=input("输入代码: ")
	buyprice=float(input("买入价格: "))
	buynumbers=float(input("买入数量: "))
	if code[:3] in ['600','601']:
		if buyprice*buynumbers*3/1000<=5:
			if buynumbers<=1000:
				costprice=buyprice*buynumbers+5+1
			else:
				costprice=buyprice*buynumbers+5+buynumbers/1000
		else:
			if buynumbers<=1000:
				costprice=buyprice*buynumbers*(1+3/1000)+1
			else:
				costprice=buyprice*buynumbers*(1+3/1000)+buynumbers/1000
	else:
		if buyprice*buynumbers*3/1000<=5:
			costprice=buyprice*buynumbers+5
		else:
			costprice=buyprice*buynumbers*(1+3/1000)
	print("成本价格: {:.3f}".format(costprice/buynumbers))
	sellprice=float(input("卖出价格: "))
	sellnumbers=float(input("卖出数量: "))
	if code[:3] in ['600','601']:
		if sellprice*sellnumbers*1/1000<=5:
			netsell=sellprice*sellnumbers-5
		else:
			netsell=sellprice*sellnumbers*(1-1/1000)
	else:
		if sellprice*sellnumbers*1/1000<=5:
			netsell=sellprice*sellnumbers-5
		else:
			netsell=sellprice*sellnumbers*(1-1/1000)
	print("    收入: {:0.3f}".format(netsell-costprice))
	print("  收益率: {:0.3f}%".format(100*(netsell-costprice)/netsell))
	

if __name__ == "__main__":
	pass
	

猜你喜欢

转载自blog.csdn.net/weixin_40775077/article/details/84401111
今日推荐