import tushare as ts
import db
import history
import time
# 初始化数据库操作类
mysql = db.MY_SQL()
#
# 行业分类API()
category = ts.get_industry_classified()
# 保存分类到数据库
mysql.save_cate_table(category)
# 接近涨停的票数据
maxData = []
# 实时行情API
today = ts.get_today_all()
# 保存到实时行情表
mysql.save_now_table(today)
# 取出涨幅接近涨停的票
for i in today.index:
d = today.loc[i]
if d['changepercent'] > 9.6:
# print(d['code'] + " " + d['name'])
v = {'code': d['code'], 'name': d['name'], 'percent': d['changepercent']}
maxData.append(v)
# 给接近涨停的票加上[行业分类]参数
for i in range(len(maxData)):
for j in category.index:
if maxData[i]['code'] == category.loc[j]['code']:
maxData[i]['cate'] = category.loc[j]['c_name']
# print(maxData)
# 排序参数,取第2位排序
def take_second(elem):
return elem[1]
# 排序参数,取第4位排序
def take_four(elem):
return elem[3]
# 取出接近涨停票中的cate分类
# 并计算出现每个分类的次数
# 目的是取出[热门行业]
cates = {}
for i in range(len(maxData)):
key = maxData[i].get('cate')
if key in cates:
num = cates.get(key) + 1
else:
num = 1
cates[key] = num
# 分类排序并取出排名
sorts = []
cate_list = list(cates.items())
cate_list.sort(key=take_second, reverse=True)
# 取行业排名前6
for i in range(0, 6):
if cate_list[i][0] is not None:
sorts.append(cate_list[i][0])
print(sorts)
# 清空历史表
mysql.clear_history()
# 处理每个行业的数据
for i in range(len(sorts)):
# 取出同行业全部票
stocks = mysql.getListForCate(sorts[i])
stockPercent = []
for i in range(len(stocks)):
code = stocks[i][0]
# 查询票当前涨幅
p = mysql.getPercent(code)
for j in p:
s = (float(j[0]),)
a = stocks[i] + s
stockPercent.append(a)
# 根据涨幅排序
stockPercent.sort(key=take_four, reverse=True)
# print(stockPercent)
for z in range(len(stockPercent)):
if 3 <= float(stockPercent[z][3]):
# print(stockPercent[z])
# 查询单个的180天历史高位数据,并保存到数据库
history.query_stock_history(mysql, stockPercent[z][0],
stockPercent[z][1],
stockPercent[z][2])
# 准备写文件
f = open('./code.txt', 'a+')
f.write("\t\n\n")
f.write(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
# 处理每个行业的数据
for x in range(len(sorts)):
stocks = mysql.getListForCate(sorts[x])
stockPercent = []
for i in range(len(stocks)):
code = stocks[i][0]
p = mysql.getPercent(code)
for j in p:
s = (float(j[0]),)
a = stocks[i] + s
# print(a)
stockPercent.append(a)
# 根据涨幅排序
stockPercent.sort(key=take_four, reverse=True)
# print(stockPercent)
# 今日龙头
maxPercent = []
for i in range(len(stockPercent)):
# 取出今天行业的领涨龙头
if 9.8 <= float(stockPercent[i][3]):
maxPercent.append(stockPercent[i])
# print(maxPercent)
allStr = ''
for i in maxPercent:
# 查询龙头历史数据
days = mysql.selectDay(i[0])
for j in days:
result = mysql.selectRelationStocks(j[4], i[2])
# print(str(result))
allStr += str(result)
# print(allStr)
# 处理字符
allStr = allStr.replace("(", "")
allStr = allStr.replace(")", "")
allStr = allStr.replace("'", "")
allStr = allStr.replace(",,", ",")
allStr = allStr.replace(" ", "")
# print(allStr)
# 移除重复字符
sortList = []
for i in allStr.split(','):
if i != '':
d = (i, allStr.count(i))
if sortList.count(d) <= 0:
sortList.append(d)
sortList.sort(key=take_second, reverse=True)
# print(sortList)
result = []
for i in sortList:
# 查询历史中高位出现的次数
num = mysql.selectCount(i[0])[0]
if num >= 3:
# 查询实时行情
df = ts.get_realtime_quotes(i[0])
p = 0
price = 0
n = ''
for j in df.index:
# 计算涨幅
price = float(df.loc[j]['price'])
pre = float(df.loc[j]['pre_close'])
percent = (price - pre) / pre * 100
p = float(format(percent, '.2f'))
n = df.loc[j]['name']
# 过滤百分比太高和太低的数据
if 1 <= p <= 7:
# 查询15天内的上升趋势
if history.query_month_history(i[0]):
result.append((i[0] + ' ' + n, price, str(p) + "%", num))
result.sort(key=take_four, reverse=True)
print(sorts[x])
print(result)
f.write("\t\n" + sorts[x] + "\t\n")
f.write(str(result))
f.close()
mysql.closeDB()
# 历史行情
# data = ts.get_hist_data('000014', '2019-04-08', '2019-04-09')
# print(data)
#
# print(ts.get_latest_news(top=5, show_content=True))
# d = ts.inst_detail()
# for i in d.index:
# print(d.loc[i]['code'] + " \t " + d.loc[i]['name'])
# pro = ts.pro_api(token)
# data = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date')
# for i in data.index:
# print(data.loc[i][])