def __get_est_price_mode_pe(realtime, code, years):
q_str = 'code==' + '\"' + code + '\"'
pe_obj = {}
eps = 0
for y in range(datetime.now().year - years, datetime.now().year + 1):
for q in range(1, 5):
quarter = str(y)+'q'+str(q)
if (os.path.exists(PREFIX+'/'+quarter+'.csv')):
r = __pd_read_report(quarter)
if (len(r.query(q_str)) > 0):
# save all pe history and latest eps
tmp_pe, tmp_eps = __get_pe_and_eps(code, quarter)
if (isinstance(tmp_pe, float) & isinstance(tmp_eps, float)):
pe_obj[quarter] = tmp_pe
eps = tmp_eps
log.debug('%s pe: %.2f, eps: %.2f', quarter, pe_obj[quarter], eps)
else:
log.warn('skip %s', quarter)
continue
#sorted(pe_obj)
#log.debug(pe_obj)
arr = pe_obj.values()
mu, std = norm.fit(arr)
if (realtime):
d = datetime.now()
today = __pd_read_today_all()
close = round(today.query(q_str).trade.values[0], 2)
else:
k, d = __get_k_data_of_last_trade_day(code)
close = round(k.close.values[0], 2)
log.info('%s price: %.2f @ pe %.2f, eps %.2f', d.strftime("%Y-%m-%d"), close, close/eps, eps)
log.info('mu, std: %.2f, %.2f', mu, std)
growth = __get_growth(code, years)
left = __estimation_formula_bg_dynamic(growth, eps, mu - std)
centrum = __estimation_formula_bg_dynamic(growth, eps, mu)
right = __estimation_formula_bg_dynamic(growth, eps, mu + std)
value = __estimation_formula_bg_dynamic(growth, eps, 8.5)
log.info('est dynamic: %.2f~%.2f~%.2f', left, centrum, right)
log.info('est value: %.2f', value)
log.info('range from left: %.2f%%', (close-left)/left*100.0)
log.info('position: %.2f%%', (close-left)/(right-left)*100.0)
return left, centrum, right, value
评论列表
文章目录