这里是python初学者。只是用spyder做一些金融相关的工作。我可以在以下方面提供一些指导。。我甚至没有尝试过代码,因为我不知道从何开始
我有一个像这样组织的熊猫数据框架
Month, portfolio name, return
月份的格式为201501,201502
。回报率是1%。我有几十万次观察
我想每天早上在投资组合名称级别生成统计数据-总回报、指定期间的回报、滚动卷数量、整个期间的最大提取量等
在高层次上,什么是最好的方法?我觉得我需要做的是按投资组合名称分组,然后应用不同的函数,这些函数存在于一些统计数据或财务包中,或者我可以自己编写,但由于某些原因,在实践中找不到这样的好例子。另外,在这段时间里,观察的顺序很重要,比如说最大下降量,我们分组时,我需要做些不同的事情吗?还是熊猫会按顺序阅读,只要是在datetime中
再次,寻找关于上述内容的一般建议,以及正确方向的指针。也许当我接近时,我可以在这里用代码进行故障排除
提前感谢您的回复。这是我的第一篇帖子,这个网站帮助我在6年以上的时间里一直在回答excel问题
数据样本
月份、投资组合名称、回报
201501,端口1,0.014
201502,端口1,0.0034
201503,端口1,-0.0045
201501,端口2,0.012
201502,端口2,0.0054
201503,端口2,-0.0174
编辑:我了解了熊猫的滚动()和扩展()功能,现在我对它们有了更多的了解。我也没有将AGG()用于自定义函数。请参见下面我如何为每个投资组合创建一个聚合,以获得两个不同的指标。如果我有任何具体问题,我会为你写一篇新的帖子。谢谢
import numpy as np
import pandas as pd
def rolled_ret(arr):
return arr.add(1).prod() -1
def ann_vol(arr):
return np.std(arr) * np.sqrt(12)
def max_drawdown(arr):
return arr.add(1).cumprod().diff().min()
full_return = df_final.groupby('PORTFOLIO_NAME')['RETURN'].agg(full_period_returns=rolled_ret,annualised_vol=ann_vol,MDD=max_drawdown)
以下是我的做法:
相关问题 更多 >
编程相关推荐