def twr_eavaluate(df):
"""Ф-я рассчитывает time weighted return по данным датафрейма ['AUM_DATE', 'POSITION_VALUE','NET_INPUT']
AUM_DATE - колонка с датами
POSITION_VALUE - оценочная стоимость портфеля на дату
NET_INPUT - вводы-выводы средств на дату (ввод - вывод)"""
df.sort_values(by='AUM_DATE', inplace=True)
# порфтель на день-1
prev_portf = [0] + df['POSITION_VALUE'].tolist()[:-1]
df['prev_portf'] = prev_portf
df['delta_for_twr'] = (df['POSITION_VALUE'] - df['NET_INPUT']) / df['prev_portf']
# замена пропусков
df = df.replace([np.inf, -np.inf], np.nan)
df.dropna(axis=0, subset=['delta_for_twr'], inplace=True)
twr = df['delta_for_twr'].prod() - 1
return twr
Простая функция расчета TWR (time-weighted return) для определения эффективности вложений с учетом вводов и выводов средств