import db
import time
import os
import tushare as ts
import threading
import time
import history_fp as history
# print(len(codes))
# for x in codes:
# print(x)
# df = ts.get_hist_data(x[0], start=from_day, end=to_day)
# exitFlag = 0
#
class myThread(threading.Thread):
def __init__(self, threadID, name, counter, from_day, pre_day):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.counter = counter
self.from_day = from_day
self.pre_day = pre_day
def run(self):
print("开始线程:" + self.name)
print_time(self.name, self.counter, self.from_day, self.pre_day)
print("退出线程:" + self.name)
def print_time(threadName, counter, from_day, pre_day):
mysql2 = db.MY_SQL()
for i in counter:
df = ts.get_hist_data(i[0], start=from_day, end=from_day)
# print(df)
if df is not None:
for j in df.index:
time.sleep(0.5)
mysql2.insert_now_fp_table(i[0], i[1], df.loc[j]['p_change'], df.loc[j]['close'], threadName)
print(from_day)
print(pre_day)
# 查询profit是否有相同code
profit = mysql2.get_pre_day_data(i[0], pre_day)
print(profit)
if profit is not None:
# 取开盘价
price = df.loc[j]['open']
print(i[0])
print(profit[2])
if i[0] == profit[2]:
old_price = profit[5]
p = float(price) - float(old_price)
mysql2.cale_profit(profit[0], p)
# 按日期查询历史数据
def get_hist_day_data(from_day, pre_day):
# 查询所有代码
mysql = db.MY_SQL()
codes = mysql.getListForCate('')
codeList = []
for i in range(0, 30):
d = mysql.getPageForCate(i*100, 100)
codeList.append(d)
print(codeList)
# 清空当前行情表
mysql.init_now_fp_table()
tt = []
# 创建新线程
for i in range(30):
thread1 = myThread(i, "Thread-" + str(i), codeList[i], from_day, pre_day)
# 开启新线程
thread1.start()
# thread1.join()
# 记录线程
tt.append(thread1)
# 等待所有线程执行完成
for i in tt:
i.join()
print("主线程")
# 接近涨停的票数据
maxData = []
# 从表获取当天数据
now_datas = mysql.get_now_fp('')
# 取出涨幅接近涨停的票
for i in now_datas:
if float(i[3]) > 9.6:
# print(d['code'] + " " + d['name'])
v = {'code': i[1], 'name': i[2], 'percent': i[3]}
maxData.append(v)
# 给接近涨停的票加上[行业分类]参数
for i in range(len(maxData)):
for j in codes:
if maxData[i]['code'] == j[0]:
maxData[i]['cate'] = j[2]
# 排序参数,取第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)
if cate_list is None or len(cate_list) < 6:
return
# 取行业排名前6
for i in range(0, 6):
if cate_list[i][0] is not None:
sorts.append(cate_list[i][0])
print('\n')
print(sorts)
# 清空历史表
mysql.clear_history_fp()
# 处理每个行业的数据
for i in range(len(sorts)):
# 取出同行业全部票
stocks = mysql.getListForCate(sorts[i])
stockPercent = []
for i in range(len(stocks)):
code = stocks[i][0]
# 查询票当前涨幅
p = mysql.getfpPercent(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][4]):
# print(stockPercent[z])
# 查询单个的180天历史高位数据,并保存到数据库
history.query_stock_history(mysql, from_day, stockPercent[z][0],
stockPercent[z][1],
stockPercent[z][2])
# 处理每个行业的数据
for x in range(len(sorts)):
stocks = mysql.getListForCate(sorts[x])
stockPercent = []
for i in range(len(stocks)):
code = stocks[i][0]
p = mysql.getfpPercent(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][4]):
maxPercent.append(stockPercent[i])
# print(maxPercent)
allStr = ''
for i in maxPercent:
# 查询龙头历史数据
days = mysql.selectDayFp(i[0])
for j in days:
result = mysql.selectRelationStocksFp(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.selectCountFp(i[0])[0]
if num >= 3:
# 查询实时行情
# df = ts.get_realtime_quotes(i[0])
p = 0
price = 0
n = ''
# 从保存的实时信息中取出
df = mysql.get_now_fp(i[0])
for j in df:
p = j[3]
price = j[4]
n = j[2]
# 过滤百分比太高和太低的数据
if 1 <= float(p) <= 7:
# 查询15天内的上升趋势
t = history.query_month_history(i[0], from_day)
if t[0]:
value = (i[0] + ' ' + n, price, str(p) + "%", t[1], num)
result.append(value)
# 保存结果到数据库
print(value)
mysql.save_to_profit(from_day, i[0], n, sorts[x], price)
pro = ts.pro_api(token='233302841e61938a0e1b77e74dd6fe86703e0a5ddece3544569c9017')
cal = pro.query('trade_cal', start_date='20180801', end_date='20190417')
run_day = []
for i in cal.index:
if cal.loc[i][2] == 1:
day = cal.loc[i][1]
y = day[:4]
m = day[:6][4:]
d = day[6:]
run_day.append(y+'-'+m+'-'+d)
for i in range(len(run_day)):
# 按日期取历史数据
if i > 0:
get_hist_day_data(run_day[i], run_day[i-1])
else:
get_hist_day_data(run_day[i], run_day[i])