程式
在給定返回系列的 R 中重現 findDrawdowns 和 maxDrawdown 函式
是否有任何公式可以直接從回報系列中計算所有回撤(和最大回撤)?還是總是需要先將收益轉換為隱含的“價格”,然後再繼續尋找回撤?
這是一個範例(在 Excel 中完成):
Date Returns 100,00 Drawdown 01.02.2000 0,30 100,30 - 01.03.2000 2,60 102,91 - 01.04.2000 1,10 104,04 - 01.05.2000 -1,00 103,00 -1,00 01.06.2000 1,50 104,54 - 01.07.2000 2,50 107,16 - 01.08.2000 1,60 108,87 - 01.09.2000 6,70 116,17 - 01.10.2000 -1,40 114,54 -1,40 01.11.2000 4,00 119,12 - 01.12.2000 -0,50 118,53 -0,50 01.01.2001 8,10 128,13 - 01.02.2001 4,00 133,25 - 01.03.2001 -3,70 128,32 -3,70 01.04.2001 -6,10 120,49 -9,57 01.05.2001 1,70 122,54 -8,04 01.06.2001 -4,90 116,54 -12,54 01.07.2001 -2,20 113,97 -14,47 01.08.2001 7,00 121,95 -8,48 01.09.2001 5,80 129,03 -3,17 01.10.2001 -6,50 120,64 -9,47 01.11.2001 2,40 123,53 -7,29 01.12.2001 -0,50 122,92 -7,76 01.01.2002 -0,90 121,81 -8,59
我採用目前的“價格”,然後從該“價格”中減去啟動日期和目前日期之間的最大“價格”,然後將此差異除以該最大“價格”。最後,回撤是這個結果和 0 之間的最小值:
=MIN((C11-MAX($C$3:C11))/MAX($C$3:C11);0)*100
最大回撤將是回撤中的最小值。
我想在 R 中執行此操作。最好不要創建“價格”表。有任何想法嗎?
我認為沒有價格你做不到。但是在 R 中創建這樣一個“價格”系列非常容易。
r <- rnorm(10, sd = 0.01) ## returns cumprod(1 + r) ## => 'prices'
然後,您可以輕鬆計算最大回撤:
require("NMOF") drawdown(cumprod(1 + r))
事實上,你甚至可能不需要用於計算回撤的包,因為它在 R 中也很容易。
v <- cumprod(1 + r) 1 - v/cummax(v) ## drawdown max(1 - v/cummax(v)) ## max. drawdown