我试着整理一段通用代码:
为一些价格数据取一个时间序列并将其划分为十分位数,例如,取过去1800万黄金价格并将其划分为十分位数[完成,见下文]
date 4. close decile
2017-01-03 1158.2 0
2017-01-04 1166.5 1
2017-01-05 1181.4 2
2017-01-06 1175.7 1
... ...
2018-04-23 1326.0 7
2018-04-24 1333.2 8
2018-04-25 1327.2 7
[374 rows x 2 columns]
提取特定十分位数的日期,然后创建一个附加30天的辅助日期列表
#So far only for a single decile at a time
firstdecile = gold.loc[gold['decile'] == 1]
datelist = list(pd.to_datetime(firstdecile.index))
datelist2 = list(pd.to_datetime(firstdecile.index) + pd.DateOffset(months=1))
以每十分之一30天的平均价格回报为例
level1 = gold.ix[datelist]
level2 = gold.ix[datelist2]
level2.index = level2.index - pd.DateOffset(months=1)
result = pd.merge(level1,level2, how='inner', left_index=True, right_index=True)
def ret(one, two):
return (two - one)/one
pricereturns = result.apply(lambda x :ret(x['4. close_x'], x['4. close_y']), axis=1)
mean = pricereturns.mean()
返回单个CSV文件中所有10个平均值的列表
到目前为止,我已经能够把一些功能,做步骤1-3,但只有一个十分位,但我正在努力扩展到一个循环代码,所有10个十分位一次与一个干净的CSV输出
首先在
t + 1 month
处追加收盘价,作为整个数据帧上的一个新列。你知道吗然而,实际相关的应该是交易日的数量,即你不会有周末或节假日的价格。因此,我建议您按行数而不是按日期范围(即接下来的20个交易日)移动
现在计算每行的预期收益
也可以结合步骤1。和2。直接移动,这样就不需要额外的列(仅当您按行数移动时,而不是由于重新索引而按固定日期范围移动时)
既然你已经有了小数点,你只需要^{} 小数点,然后用
mean()
来聚合收益放入一些随机数据,你会得到下面的数据帧。} 从数据帧创建csv
close
和ret
是每十分位数的平均值。您可以通过^{相关问题 更多 >
编程相关推荐