程式

在給定返回系列的 R 中重現 findDrawdowns 和 maxDrawdown 函式

  • December 7, 2016

是否有任何公式可以直接從回報系列中計算所有回撤(和最大回撤)?還是總是需要先將收益轉換為隱含的“價格”,然後再繼續尋找回撤?

這是一個範例(在 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

引用自:https://quant.stackexchange.com/questions/31369