【发布时间】:2019-09-20 18:01:49
【问题描述】:
我正在尝试根据历史股票数据计算 10 年的远期回报。我有一个数据框:
import blpapi
options = blpapi.SessionOptions()
options.setServerHost('localhost')
options.setServerPort(8194)
session = blpapi.Session(options)
session.start()
from tia.bbg import LocalTerminal
import tia.bbg.datamgr as dm
# data manager
mgr = dm.BbgDataManager()
# Bloomberg variables
px = 'PX_LAST'
# start and end date
start_dt = '1952-01-01'
end_dt = date.today()
# tickers
mve_tick = 'NCBEILQ027S' # Fred
gdp_tick = 'GDP' # Fred
sp_tick = mgr['SPX INDEX'] # Bloomberg
# get data
mve = fred.get_series(mve_tick, observation_start = start_dt,
observation_end = end_dt)
gdp = fred.get_series(gdp_tick, observation_start = start_dt,
observation_end = end_dt)
sp = sp_tick.get_historical(px, start_dt, end_dt)
# create data frames
mve_df = pd.DataFrame(mve)
mve_df.index.name = 'Date'
mve_df.columns = ['MVE']
gdp_df = pd.DataFrame(gdp) * 1000
gdp_df.index.name = 'Date'
gdp_df.columns = ['GDP']
gdp_col = gdp_df['GDP']
sp_df = pd.DataFrame(sp)
sp_df.index.name = 'Date'
sp_df.columns = ['Price']
# convert S&P to quarterly return
sp_df = sp_df.resample('3MS').first()
sp_df_col = sp_df['Price']
# merge data frames
df = mve_df.join([gdp_col, sp_df_col])
df.reset_index(inplace = True)
df['Q Return'] = df['Price'].pct_change()
我想根据“Q Return”列上的计算添加一个新列。
我想将 col 'Q Return' 中前 40 个数据点的值相乘,然后将该 sumproduct 提高到 (4/40),并将其作为我新附加列中的第一个值。然后下一个值将是列 'Q return' 的第 1-41 行的 sumproduct,然后将其提高到相同的指数,依此类推。
我写了这个函数来执行计算:
def fwdreturn(returns, t):
outp = 1
for i in range(t, t + 40):
outp = outp * i
return outp'
df['10 Year Fwd Return'] = [fwdreturn(df['Q Return'], t) for t in df['Q Return']] # this is where error is occuring
print(df)
我得到的错误是“浮点”对象不能被解释为整数。
有没有更好的方法来解决这个问题?
【问题讨论】:
-
感谢您的反馈 - 我进行了编辑以使其看起来更好......