Daily to Monthly Performance Attribution - Getting Effects to equal the Excess Return

I am building a performance attribution tool on Python to help us understand the asset allocation, stock selection effects of our fund.

We are using daily price data for each component within the fund, daily asset allocation (to account for any changes made within the fund) and also have similar data available for the benchmarks.

Now, the process of calculating returns, contribution, asset allocation and manager selection effects work accurately when implementing it on a daily basis. However, when converting this to monthly, what is the most appropriate way of tackling this?

Currently, we use the generic total return formula R = (1+r1)(1+r2)....(1+rn) - 1 to get monthly returns. Can I apply that same formula to the contributions?

How can I go from daily attribution to monthly attribution whilst also making sure:

asset allocation + manager selection = portfolio return - benchmark return = excess return

I would convert all data from daily to monthly using the generic total return formula you specified. Then do the attribution.

The issue is going to be with the weights of assets, sectors, and countries; you will have to make an assumption whether you use end of month weight or average weight over the month. For example, end of month weight of manager A vs average weight of manager A over the month. I think the industry standard is to use end of month weight.

This is usually called the "Linking problem" or multi-period linking in Performance Attribution.

Several methods have been proposed and there is some controversy as to which is best (in fact a great deal of discussion goes on in performance journals seemingly without coming to a resolution).

For what it is worth, based on my reading of articles such as Comparing Performance Attribution Linking Methods: An Empirical Study by Jiang and Saenz ( link ), I would recommend the Modified Frongello Method. It seems reasonably simple, intuitive and apparently performs satisfactorily in practice.

But from what I have read there is no perfect method.

daily contributions cannot be chain linked they need to be added to reach monthly. same with effects. daily calcs using daily data and then collating this to reach monthly is the most correct way