@ -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 ' ] = t rading_date[ 0 ]
period_trading_dateMap [ ' 20 ' ] = t t rading_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 , volum e , 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中