From 6d424908fa8a2631dd0bdf9feefd9b75766abfec Mon Sep 17 00:00:00 2001 From: laixingyu Date: Fri, 4 Aug 2023 18:00:26 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3=E9=83=A8=E5=88=86?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- transferIndustrySatistics_python.py | 88 +++++++++++++++++++++-------- 1 file changed, 63 insertions(+), 25 deletions(-) diff --git a/transferIndustrySatistics_python.py b/transferIndustrySatistics_python.py index 7707322..d46ddaa 100644 --- a/transferIndustrySatistics_python.py +++ b/transferIndustrySatistics_python.py @@ -1,5 +1,23 @@ #导入或计算东财二级的成交额及排序等数据 +###当前交易日的计算方法 +###1、获取当日的成交信息,并计算排序 +###2、获取当日所有指数汇总信息,计算当日的占比、占比排名 +###3、获取前一日(多日)的成交信息 +###4、获取前一日(多日)的汇总信息等 +###5、计算对比 +### +### +### +### +### +###批量时计算方法 +###1、获取区间第一日的数据 +###2、获取前一日数据并计算(如无前一日,则默认一日) +### +### +### +### from decimal import Decimal import pymysql @@ -50,10 +68,13 @@ try: stock_basic_map = {} + #转换数据的日期(单日) + trans_date = '2023-07-20' + #查询交易日数据 - sql_trade_qurey = 'select date,week,trade from trade_dates where trade = %s and date = "2023-07-20"' + sql_trade_qurey = 'select date,week,trade from trade_dates where trade = %s and date = %s' sql_trade = "trading" - db_a_cursor.execute(sql_trade_qurey,sql_trade) + db_a_cursor.execute(sql_trade_qurey,(sql_trade,trans_date)) trading_dates = db_a_cursor.fetchall() # 查询交易日期 - 交易日的指数数据 - 计算周期数据 - 转存 @@ -65,9 +86,9 @@ try: period_trading_dateMap2 = {} # 用于计算区间涨跌数量等,区间涨跌等需要查询个股 trading_date,week,trade = row # 获取周期 - sql_trade_period_qurey = 'select date,week,trade from trade_dates where trade = %s and date <= "2023-07-19" order by date desc limit 30' + 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) + db_a_cursor.execute(sql_trade_period_qurey,(sql_trade_period,trading_date)) trading_period_dates = db_a_cursor.fetchall() #前一个交易日 prevTradeDate = '' @@ -86,7 +107,7 @@ try: elif periodIndex == 10: period_trading_dateMap2['10'] = ttrading_date[0] elif periodIndex == 19: - period_trading_dateMap['20'] = trading_date[0] + period_trading_dateMap['20'] = ttrading_date[0] elif periodIndex == 20: period_trading_dateMap2['20'] = ttrading_date[0] elif periodIndex == 29: @@ -98,6 +119,13 @@ try: periodIndex += 1 print('start transfer statistics ',trading_date , ' data.') + totalTunrover = 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,trading_date) + datas = db_a_cursor.fetchall() + for total in datas: + code , totalTunrover = total #查询日交易数据 以成交额进行排序 sql_stock_query = 'select code,name,trade_day, open,close,high,low,differrange,volume,amount,limitupnum,limitdownnum,suspendnum,risenum,fallnum,flatnum,componentnum,mv,pettm,pettm_mid,liqmv,rcnthigh,rcntlow from stock_index where trade_day = %s order by volume DESC' db_a_cursor.execute(sql_stock_query,trading_date) @@ -105,7 +133,7 @@ try: sortIndex = 1 industries_tradeDaymap = {} - totalTunrover = Decimal('0') + #遍历交易日数据 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 @@ -114,18 +142,24 @@ try: security_name = name turnover = amount turnover_sort = sortIndex + turnover_change = '' #todo sortIndex +=1 rise_number = risenum flat_number = flatnum + # print(type(turnover),type(totalTunrover),type(turnover*Decimal('100.00'))) + ratio = (turnover*Decimal('100.00') )/ totalTunrover + turnover_ratio = ratio + 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_sort':turnover_sort,'rise_number':rise_number,'flat_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 + # totalTunrover += turnover - turnover_change = '' #todo - turnover_ratio = '' #todo - turnover_ratio_change = '' #todo - turnover_sort_change = ''#todo + # turnover_change = '' #todo + # turnover_ratio_change = '' #todo + # turnover_sort_change = ''#todo turnover5 = '' #todo turnover5_change = '' #todo turnover5_ratio = '' #todo @@ -182,14 +216,21 @@ try: # 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)) + + 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) + datas = db_a_cursor.fetchall() + for total in datas: + code,prevTotalTunrover = total + #遍历前一日交易数据,及排名数据,获取变化值 sql_stock_query = 'select code,name,trade_day, open,close,high,low,differrange,volume,amount,limitupnum,limitdownnum,suspendnum,risenum,fallnum,flatnum,componentnum,mv,pettm,pettm_mid,liqmv,rcnthigh,rcntlow from stock_index where trade_day = %s order by volume DESC' db_a_cursor.execute(sql_stock_query,prevTradeDate) - + datas = db_a_cursor.fetchall() industries_prevTradeDaymap = {} - prevTotalTunrover = Decimal(0.00) 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 + code,name,trade_day, open,close,high,low,differrange,volume,amount,limitupnum,limitdownnum,suspendnum,risenum,fallnum,flatnum,componentnum,mv,pettm,pettm_mid,liqmv,rcnthigh,rcntlow = stock_index_data business_date = trading_date security_code = code security_name = name @@ -198,18 +239,15 @@ try: sortIndex +=1 rise_number = risenum flat_number = flatnum + + ratio = (turnover*Decimal('100')) / prevTotalTunrover + turnover_ratio = ratio # industries_tradeDaymap[code] = {business_date,security_code,turnover_sort,rise_number,flat_number} - industries_prevTradeDaymap[code] = {'business_date':business_date,'security_code':security_code,'turnover':turnover,'turnover_sort':turnover_sort,'rise_number':rise_number,'flat_number':flat_number} - # 总成交额 - totalTunrover += turnover + industries_prevTradeDaymap[code] = {'business_date':business_date,'security_code':security_code,'turnover':turnover,'turnover_sort':turnover_sort,'rise_number':rise_number, + 'turnover_ratio':turnover_ratio,'flat_number':flat_number} + industries_tradeDaymap[code]['turnover_change'] = industries_tradeDaymap[code]['turnover'] - turnover + industries_tradeDaymap[code]['turnover_sort_change'] = industries_tradeDaymap[code]['turnover_sort'] - turnover_sort - tempindustries_tradeDaymap = industries_tradeDaymap - # 计算占比及占比变化 - for key,values in tempindustries_tradeDaymap.items(): - for value_key, value in values.items(): - if value_key == 'turnover': - ratio = values['turnover']*100 / totalTunrover - industries_tradeDaymap[key]['turnover_ratio'] = ratio print(industries_tradeDaymap) #提交数据到数据库B中