fix: 增加获取区间涨跌幅等数据方法

master
laixingyu 3 years ago
parent 7a9c0c8e4e
commit d9f712aafc

@ -59,6 +59,76 @@ def getTradingDates(dbconfig,dbcursor,state,date):
break
periodIndex += 1
return period_trading_dateMap
def getPeriodTurnOver(dbconfig,dbcursor,startDate,endDate):
periodTurnOverMap = {}
total = Decimal('0.00')
sql_trade_period_qurey = 'select code ,sum(amount) as turnover from stock_index where trade_day >= %s and trade_day < %s'
dbcursor.execute(sql_trade_period_qurey,(startDate,endDate))
totalTurnOvers = dbcursor.fetchall()
for row in totalTurnOvers:
code,turnover = row
total = turnover
sql_trade_period_qurey = 'select code,sum(amount) as turnover from stock_index where trade_day >= %s and trade_day < %s group by code'
dbcursor.execute(sql_trade_period_qurey,(startDate,endDate))
totalTurnOvers = dbcursor.fetchall()
for row in totalTurnOvers:
code,turnover = row
periodTurnOverMap[code] = {'code':code,'turnover':turnover,'total':total}
return periodTurnOverMap
def getPeriodDiff(dbconfig,dbcursor,startDate,endDate):
periodStartDataMap = {}
periodEndDataMap = {}
periodDiffMap = {}
industryMap = {}
sql_trade_period_qurey = 'select code,name from stock_index where trade_day = %s'
dbcursor.execute(sql_trade_period_qurey,'2023-05-05')
datas = dbcursor.fetchall()
for row in datas:
code,name = row
industryMap[name] = code
sql_trade_period_qurey = 'select s.code as code,s.close as close,s.open as open,sb.blemind2 as blemind2 from stocks s left join stock_basis sb on s.code = sb.code where s.trade_day = %s'
dbcursor.execute(sql_trade_period_qurey,startDate)
datas = dbcursor.fetchall()
for row in datas:
code,close,open,blemind2 = row
periodStartDataMap[code] = {'code':code,'close':close,'open':open,'blemind2':blemind2}
sql_trade_period_qurey = 'select s.code as code,s.close as close,s.open as open,sb.blemind2 as blemind2 from stocks s left join stock_basis sb on s.code = sb.code where s.trade_day = %s'
dbcursor.execute(sql_trade_period_qurey,endDate)
datas = dbcursor.fetchall()
for row in datas:
code,close,open,blemind2 = row
periodEndDataMap[code] = {'code':code,'close':close,'open':open,'blemind2':blemind2}
if code in periodStartDataMap:
if industryMap[blemind2] in periodDiffMap:
print('close: ',close, ' bclose: ',periodStartDataMap[code]['close'] )
if close - periodStartDataMap[code]['close'] > 0 :
periodDiffMap[industryMap[blemind2]]['rise'] += 1
elif close - periodStartDataMap[code]['close'] == 0 :
periodDiffMap[industryMap[blemind2]]['flat'] += 1
else:
periodDiffMap[industryMap[blemind2]]['fall'] += 1
else:
if close - periodStartDataMap[code]['close'] > 0 :
periodDiffMap[industryMap[blemind2]] = {'rise':1,'flat':0,'fall':0}
elif close - periodStartDataMap[code]['close'] == 0 :
periodDiffMap[industryMap[blemind2]] = {'rise':0,'flat':1,'fall':0}
else:
periodDiffMap[industryMap[blemind2]] = {'rise':0,'flat':0,'fall':1}
else:
print('close: ',close)
if close > 0 :
periodDiffMap[industryMap[blemind2]] = {'rise':1,'flat':0,'fall':0}
elif close == 0 :
periodDiffMap[industryMap[blemind2]] = {'rise':0,'flat':1,'fall':0}
else:
periodDiffMap[industryMap[blemind2]] = {'rise':0,'flat':0,'fall':1}
return periodDiffMap
def main():
# #数据库A的连接信息NAS数据库
# db_a_config = {
@ -121,10 +191,10 @@ def main():
for row in trading_dates:
# 1日 5日 10日 20日 30日周期日期
period_trading_dateMap = {} # 用于计算成交额
period_trading_dateMap = getTradingDates(db_a_conn,db_a_cursor,sql_trade,trans_date)
period_trading_dateMap2 = {} # 用于计算区间涨跌数量等,区间涨跌等需要查询个股
# period_trading_dateMap = getTradingDates(db_a_conn,db_a_cursor,sql_trade,trans_date)
period_trading_dateMap2 = {} # 用于计算区间涨跌数量等,区间涨跌等需要查询个股;区间涨跌是以前一日的收盘价与当前收盘价计算的
trading_date,week,trade = row
# 获取周期
# 获取周期,不包含当前交易日
sql_trade_period_qurey = 'select date,week,trade from trade_dates where trade = %s and date < %s order by date desc limit 30'
sql_trade_period = "trading"
db_a_cursor.execute(sql_trade_period_qurey,(sql_trade_period,trading_date))
@ -158,6 +228,26 @@ def main():
periodIndex += 1
print('start transfer statistics ',trading_date , ' data.')
# 获取多日成交额汇总数据
turnOver5 = getPeriodTurnOver(db_a_conn,db_a_cursor,period_trading_dateMap['5'],trading_date)
for data in turnOver5:
industries_tradeDaymap[data]['turnover5'] = turnOver5[data]['turnover']
turnOver10 = getPeriodTurnOver(db_a_conn,db_a_cursor,period_trading_dateMap['10'],trading_date)
for data in turnOver10:
industries_tradeDaymap[data]['turnover10'] = turnOver5[data]['turnover']
turnOver20 = getPeriodTurnOver(db_a_conn,db_a_cursor,period_trading_dateMap['20'],trading_date)
for data in turnOver20:
industries_tradeDaymap[data]['turnover20'] = turnOver5[data]['turnover']
turnOver30 = getPeriodTurnOver(db_a_conn,db_a_cursor,period_trading_dateMap['30'],trading_date)
for data in turnOver30:
industries_tradeDaymap[data]['turnover30'] = turnOver5[data]['turnover']
# 获取涨跌幅数据并统计涨跌幅
periodUpDownMap5 = getPeriodDiff(db_a_conn,db_a_cursor,period_trading_dateMap['5'],trading_date)
periodUpDownMap10 = getPeriodDiff(db_a_conn,db_a_cursor,period_trading_dateMap['10'],trading_date)
periodUpDownMap20 = getPeriodDiff(db_a_conn,db_a_cursor,period_trading_dateMap['20'],trading_date)
periodUpDownMap30 = getPeriodDiff(db_a_conn,db_a_cursor,period_trading_dateMap['30'],trading_date)
totalTunrover = Decimal('0.00')
#查询日交易的所有成交额,用于计算占比等
sql_stock_query = 'select code,sum(amount) as turnover from stock_index where trade_day = %s '
@ -173,10 +263,10 @@ def main():
industries_tradeDaymap = {}
#遍历交易日数据
#遍历交易日数据,多日数据需要单独计算; 历史数据全部从dong_cai_secondary_industry_statistics中获取没有的则以当前的为准
for stock_index_data in datas:
code,name,trade_day, open,close,high,low,differrange,volumn,amount,limitupnum,limitdownnum,suspendnum,risenum,fallnum,flatnum,componentnum,mv,pettm,pettm_mid,liqmv,rcnthigh,rcntlow = stock_index_data
business_date = trading_date
business_date = trade_day
security_code = code
security_name = name
turnover = amount
@ -188,36 +278,35 @@ def main():
# print(type(turnover),type(totalTunrover),type(turnover*Decimal('100.00')))
ratio = (turnover*Decimal('100.00') )/ totalTunrover
turnover_ratio = ratio
turnover_ratio_change = '' #todo
turnover_ratio_change = '' #todo
turnover_sort_change = ''#todo
# industries_tradeDaymap[code] = {business_date,security_code,turnover_sort,rise_number,flat_number}
industries_tradeDaymap[code] = {'business_date':business_date,'security_code':security_code,'turnover':turnover,'turnover_change':turnover_change,'turnover_sort':turnover_sort,'rise_number':rise_number,
'turnover_sort_change':turnover_sort_change,'turnover_ratio':turnover_ratio,'turnover_ratio_change':turnover_ratio_change,'flat_number':flat_number}
# 总成交额
# totalTunrover += turnover
# turnover_change = '' #todo
# turnover_ratio_change = '' #todo
# turnover_sort_change = ''#todo
turnover5 = '' #todo
turnover5 = turnOver5['code']['turnover'] #todo
turnover5_change = '' #todo
turnover5_ratio = '' #todo
turnover5_ratio_change = '' #todo
turnover5_sort = '' #todo
turnover5_sort_change = ''#todo
turnover10 = '' #todo
turnover10 = turnOver10['code']['turnover'] #todo
turnover10_change = '' #todo
turnover10_ratio = '' #todo
turnover10_ratio_change = '' #todo
turnover10_sort = '' #todo
turnover10_sort_change = ''#todo
turnover20 = '' #todo
turnover20 = turnOver20['code']['turnover'] #todo
turnover20_change = '' #todo
turnover20_ratio = '' #todo
turnover20_ratio_change = '' #todo
turnover20_sort = '' #todo
turnover20_sort_change = ''#todo
turnover30 = '' #todo
turnover30 = turnOver30['code']['turnover'] #todo
turnover30_change = '' #todo
turnover30_ratio = '' #todo
turnover30_ratio_change = '' #todo
@ -254,8 +343,23 @@ def main():
# create_time =
# sql_insert = f"INSERT INTO dong_cai_secondary_industry (business_date,sort,security_code,security_name,security_type,number_ingredients,opening_price,closing_price,volume,turnover,total_capitalization,free_capitalization,change_percentage,highest_price,lowest_price,rise_number,losses_number,flat_number,rise_stop_number,losses_stop_number,stop_number,recently_high,recently_low,pe_ttm,pe_center_ttm) VALUES ( %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,%s, %s, %s, %s)"
# db_b_cursor.execute(sql_insert, (business_date,sort,security_code,security_name,security_type,number_ingredients,opening_price,closing_price,volume,turnover,total_capitalization,free_capitalization,change_percentage,highest_price,lowest_price,rise_number,losses_number,flat_number,rise_stop_number,losses_stop_number,stop_number,recently_high,recently_low,pe_ttm,pe_center_ttm))
industries_tradeDaymap[code] = {'business_date':business_date,'security_code':security_code,'security_name':security_name,
'turnover':turnover,'turnover_change':turnover_change,'turnover_sort':turnover_sort,'turnover_sort_change':turnover_sort_change,
'turnover_ratio':turnover_ratio,'turnover_ratio_change':turnover_ratio_change,
'turnover5' : turnover5,'turnover5_change':turnover5_change,'turnover5_ratio':turnover5_ratio,'turnover5_ratio_change':turnover5_ratio_change,'turnover5_sort':turnover5_sort,'turnover5_sort_change':turnover5_sort_change,
'turnover10' : turnover10,'turnover10_change':turnover10_change,'turnover10_ratio':turnover10_ratio,'turnover10_ratio_change':turnover10_ratio_change,'turnover10_sort':turnover10_sort,'turnover10_sort_change':turnover10_sort_change,
'turnover20' : turnover20,'turnover20_change':turnover20_change,'turnover20_ratio':turnover20_ratio,'turnover20_ratio_change':turnover20_ratio_change,'turnover20_sort':turnover20_sort,'turnover20_sort_change':turnover20_sort_change,
'turnover30' : turnover30,'turnover30_change':turnover30_change,'turnover30_ratio':turnover30_ratio,'turnover30_ratio_change':turnover30_ratio_change,'turnover30_sort':turnover30_sort,'turnover30_sort_change':turnover30_sort_change,
'rise_number':rise_number,'flat_number':flat_number,'losses_number':losses_number,'rise_number_change':rise_number_change,'flat_number_change':flat_number_change,'losses_number_change':losses_number_change,
'rise5_number':rise5_number,'flat5_number':flat5_number,'losses5_number':losses5_number,'rise5_number_change':rise5_number_change,'flat5_number_change':flat5_number_change,'losses5_number_change':losses5_number_change,
'rise10_number':rise10_number,'flat10_number':flat10_number,'losses10_number':losses10_number,'rise10_number_change':rise10_number_change,'flat10_number_change':flat10_number_change,'losses10_number_change':losses10_number_change,
'rise20_number':rise20_number,'flat20_number':flat20_number,'losses20_number':losses20_number,'rise20_number_change':rise20_number_change,'flat20_number_change':flat20_number_change,'losses20_number_change':losses20_number_change,
'rise30_number':rise30_number,'flat30_number':flat30_number,'losses30_number':losses30_number,'rise30_number_change':rise30_number_change,'flat30_number_change':flat30_number_change,'losses30_number_change':losses30_number_change}
# 计算获取多日数据
prevTotalTunrover = Decimal('0.00')
sql_stock_query = 'select code,sum(amount) as turnover from stock_index where trade_day = %s '
db_a_cursor.execute(sql_stock_query,prevTradeDate)

Loading…
Cancel
Save