2016-12-23 2 views
1

Я хочу подтвердить, что мое представление формулы доходности за год (с использованием ежемесячных возвратов) является оптимальным.Annualized Return in pandas

Годовой формула возврата Я использую (где М представляет собой ежемесячный возврат и D представляет собой общее количество ежемесячных деклараций), где отсчет ежемесячных деклараций больше, чем 12 выглядит следующим образом:

formula

с другой стороны, это изменило бы в случае ежемесячного подсчета возврата составляет менее 12:

formula

Вот мое представление этой формулы в панде:

ann_return = observations.apply(lambda y: y.apply(lambda x: x+1)) 
ann_return = (ann_return.prod() ** (np.min(12/len(ann_return.index.values)) if len(ann_return.index.values) > 12 else 12/len(ann_return.index.values)))-1 
+0

Какие колонки у вас в dataframe? Можете ли вы привести пример фреймворка данных? – DyZ

+1

Я не знаю, что означает символ каретки между 1 и 12. – piRSquared

+0

@piRSquared: символ каретки/клина между 1 и 12/D отображается для обозначения минимального значения [ссылка] (http://www.numericana.com/answer/symbol.htm#chevron) – northernthinking

ответ

1

Новый ответ

D = len(ann_return) 
ann_return.add(1).prod() ** (12/D) - 1 

Старый Ответ

что у вас есть
enter image description here
или
enter image description here

Я не знаю, где вы получили вторую формулу , Первое кажется хорошим в любом случае D > 12 или D < 12.

Я хотел бы использовать это:

D = len(ann_return) 
ann_return.add(1).prod() ** (12/D) 

Если я как-то не так (что бывает чаще, чем хотелось бы)

D = len(ann_return) 
ann_return.add(1).prod() ** (12/D - (D < 12)) 
+0

Благодарим вас за указание недостающего вычитания на один в конце формулы. Разве код python не должен отображать это? – northernthinking

+0

Первая формула - это то, что я считаю правильным. Вторая формула - это то, что вы придумали, и представляете вам способ ее вычисления. '- 1' встроен в логическое значение' D <12'. Когда 'D <12', значение' True' будет оцениваться '1'. Когда 'False', он оценивает' 0'. Это фиксирует оператор if для вас. – piRSquared

+0

Понял, я считаю, что вычитание на одно безусловно.Предполагалось, что условным является вычисление экспоненты. 'exponent = 12/D if D> 12 else: exponent = min (1,12/D)' Это было вдохновлено следующим направлением: [Mr Excel link] (http://www.excelforum.com /showthread.php?t=1116377), который у меня есть трудное время, видя значение. На основании вашего ответа и дальнейшего обзора, я считаю, что наиболее эффективной и правильной линией будет: '(df.add (1) .prod() ** (12/len (df.index.values))) -1' – northernthinking

0

Разве это не только это ?

(df.Rm + 1)**(df.D/12) 

Или, если d является одинаковым для всех строк:

(df.Rm + 1)**(D/12)