From d9f712aafce07bf308dc1f9758572a1cb68c2b88 Mon Sep 17 00:00:00 2001 From: laixingyu Date: Sun, 6 Aug 2023 18:40:44 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=A2=9E=E5=8A=A0=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=8C=BA=E9=97=B4=E6=B6=A8=E8=B7=8C=E5=B9=85=E7=AD=89=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- transferIndustrySatistics_python.py | 130 +++++++++++++++++++++++++--- 1 file changed, 117 insertions(+), 13 deletions(-) diff --git a/transferIndustrySatistics_python.py b/transferIndustrySatistics_python.py index 3a83610..e9237d3 100644 --- a/transferIndustrySatistics_python.py +++ b/transferIndustrySatistics_python.py @@ -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)