@薛定谔の喵-JoinQuant
能帮忙看看这段代码有啥问题吗?Copy网站上一个指数估值的代码段。取出来的数据有差异。
def get_pe_pb(index_code, start_date, end_date=datetime.datetime.now().date()):
'''获取PE/PB'''
def iter_pe_pb():
'''一个获取PE/PB的生成器'''
trade_date = get_trade_days(start_date=start_date, end_date=end_date)
for date in trade_date:
stocks = get_index_stocks(index_code, date)
q = query(valuation.pe_ratio,
valuation.pb_ratio
).filter(valuation.pe_ratio != None,
valuation.pb_ratio != None,
valuation.code.in_(stocks))
df = get_fundamentals(q, date)
quantile = df.quantile([0.25, 0.75])
df_pe = df.pe_ratio[(df.pe_ratio > quantile.pe_ratio.values[0]) & (df.pe_ratio < quantile.pe_ratio.values[1])]
df_pb = df.pb_ratio[(df.pb_ratio > quantile.pb_ratio.values[0]) & (df.pb_ratio < quantile.pb_ratio.values[1])]
yield date, df_pe.median(), df_pb.median()
dict_result = [{'date': value[0], 'pe': value[1], 'pb':value[2]} for value in iter_pe_pb()]
df_result = pd.DataFrame(dict_result)
df_result.set_index('date', inplace=True)
return df_result
2019-09-02