滬深股票的復權計算(復權因子的應用)--代碼實現


對復權因子的介紹可參考

通過計算復權因子求得當日前一天收盤價,並存儲在MongoDB數據庫中
代碼實現

def fill_au_factor_pre_close(begin_date,end_date): """ 為daily數據集填充 1、復權因子au_factor,復權因子計算方式:au_factor= hfq_close/close 2、pre_close = close(-1) * au_factor(-1)/au_factor :param begin_date:開始日期 :param end_date:結束日期 """ all_codes = get_all_codes() for code in all_codes: hfq_daily_cursor = DB_CONN['daily_hfq'].find( {'code':code,'date':{'$gte':begin_date,'$lte':end_date},'index':False}, sort=[('date',ASCENDING)], projection={'date':True,'close':True} ) date_hfq_close_dict = dict([(x['date'],x['close']) for x in hfq_daily_cursor]) daily_cursor = DB_CONN['daily'].find( {'code':code,'date':{'$gte':begin_date,'$lte':end_date},'index':False}, sort=[('date',ASCENDING)], projection={'date':True,'close':True} ) last_close = -1 last_au_factor = -1 update_requests = [] for daily in daily_cursor: date = daily['date'] try: close = daily['close'] doc = dict() #復權因子 = 當日后復權價格/當日的實際價格 au_factor = round(date_hfq_close_dict['date']/close,2) doc['au_factor'] = au_factor #當日前收價=前一日實際收盤價 * 前一日復權因子/當日復權因子 if last_au_factor != -1 and last_close != -1: pre_close = last_close * last_au_factor / au_factor doc['pre_close'] = round(pre_close,2) last_close = close last_au_factor = au_factor update_requests.append( UpdateOne( {'code':code,'date':date,'index':False}, {'$set':doc} ) ) except: print('計算復權因子時發生錯誤,股票代碼:%s,日期:%s' %(code,date),flush=True) #恢復成初始值,防止出錯 last_close = -1 last_au_factor = -1 if len(update_requests)>0: update_result = DB_CONN['daily'].bulk_write(update_requests,ordered=False) print('填充復權因子和前收,股票:%s ,更新:%4d條'%(code,update_result.modified_count),flush=False) 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM