fix: 解决部分计算问题

master
laixingyu 3 years ago
parent 8e80d0b948
commit 6d424908fa

@ -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中

Loading…
Cancel
Save