2010-11-23 54 views
1

我無法使performanceAnalytics與我的動物園系列一起工作,我決定編寫自己的腳本。R,請檢查我最長的繪製功能

如果你想計算最長的下降,它應該得到cummax(股權)-equity作爲輸入。它也給這些時期的最大跌幅值。

正確的版本在下面。

請你能檢查我的腳本。它沒有按預期工作。一些maxDD是零。 我希望它對其他人有用。我在論壇上看到很多消息,人們都在尋找類似的東西。

我和裏奇的建議糾正它:

findDD <- function(DD, n=5){ 
    rr <- rle(sign(coredata(DD))) 
    lens <- rr$length 
    lens[!rr$value] <- 0 
    ll <- head(order(lens, decreasing=TRUE),n) 
    sumas <- cumsum(c(1,rr$length)) # I need to access the original lenghts 
    maxDD <- sapply(ll,FUN = function(x) max(window(DD,start=index(DD)[sumas[x]],end=index(DD)[sumas[x+1]-1]))) 
    data.frame(start=index(DD)[sumas[ll]],end=index(DD)[sumas[ll+1]-1], length=(index(DD)[sumas[ll+1]-1]-index(DD)[sumas[ll]])+1, maxDD) 
} 

我還更正阻止我獲得一個有序的答案,因爲我是書面方式,而不是指數指數(DD [])中的問題(DD )[]

現在它似乎工作,但我不知道。

約書亞: 在開始的時候我的數據是動物園與克隆氏病指數 現在,我已經把它改造與posixct指數XTS,

"2010-01-11 18:00:00" 9338.37028375963 
"2010-01-11 18:15:00" 8086.45780960387 
"2010-01-11 18:30:00" 7762.75622449016 
"2010-01-11 18:45:00" 8358.3609798313 
"2010-01-11 19:00:00" 8598.69695502083 
"2010-01-11 19:15:00" 8568.56256494502 
"2010-01-11 19:30:00" 8488.4281748692 
... 

仍然無法正常工作performanceAnalytics,雖然我可以繪製它並通過我自己進行任何計算。 Drawdown(myData)給出一個xts序列及其所有數據值NaN。 我一直在尋找findDrawdown代碼,它與我的不同之處在於它測量相對下拉而不是絕對下拉。

無論如何,我希望我的腳本對某人有用。

+1

的PerformanceAnalytics包是由世界各地的許多專業人士使用,所以我強烈建議你調查出了什麼問題與您的數據,防止它從PerformanceAnalytics工作......而不是重新發明輪子,並要求別人來修理你的工作。 – 2010-11-23 19:55:20

+5

@Joshua,苛刻。停止閱讀Dirk的帖子,我認爲它已經到位了:P – 2010-11-24 08:08:08

+0

使用performanceAnalytics,如果我使用我的數據作爲動物園或xts,chron或POSIXct,則「數據不能轉換爲時間序列」。我一直在使用谷歌搜索,許多人都有同樣的問題。事實上,即使有自己的例子,performanceAnalytics也不適用於我。 – skan 2010-11-24 12:31:40

回答

3

您可以從tseries包中查看舊功能maxdrawdown。下面是它的手冊頁的例子:

mxdrwdR> # Realistic example 
mxdrwdR> data(EuStockMarkets) 

mxdrwdR> dax <- log(EuStockMarkets[,"DAX"]) 

mxdrwdR> mdd <- maxdrawdown(dax) 

mxdrwdR> mdd 
$maxdrawdown 
[1] 0.25647 

$from 
[1] 236 

$to 
[1] 331 
1

我不知道最大提款什麼,但這裏有你的代碼的一些想法。


輸入DD的輸入格式並不完全清楚。您可能需要進行一些輸入檢查以確保其正確形成。


rr <- rle(coredata(sign(DD))) 

除非你重載這個函數,sign返回一個數字矢量(含-1s,0和1)。你的意思是sign(coredata(DD))


lens[rr$value == FALSE] <- 0 

你定義變量lens但再回去使用後rr$length


rr$value == FALSE 

使用!rr$value代替;它更清晰。


ll <- head(order(rr$length, decreasing=TRUE),5) 

我不知道如何中心,這是該方法,但你可能要允許用戶輸入很多最長運行的如何使用到的功能,而不是硬編碼爲5


當您與放置空間的位置保持一致時,代碼更容易閱讀。就我個人而言,我更喜歡在逗號前加一個空格,並在操作員之前和之後留出空格。

1

當使用chron作爲索引時,PerformanceAnalytics中的函數僅失敗。我之前建議你不要依賴chron來獲得動物園/ xts索引值。

錯誤提示你爲什麼不起作用:「Rownames應該有標準日期格式,比如'1985-03-15'」。 chron不使用標準日期格式,因此錯誤。

library(quantmod) 
library(PerformanceAnalytics) 
library(chron) 

getSymbols("SPY") 
r <- na.omit(ROC(Cl(SPY))) 
# xts object with 'Date' index 
str(SPY) 
table.Drawdowns(r) 
table.Drawdowns(as.zoo(r)) 
# convert index to chron 
index(r) <- as.chron(index(r)) 
table.Drawdowns(r)   # fails 
table.Drawdowns(as.zoo(r)) # fails 
# convert index to POSIXct 
index(r) <- as.POSIXct(index(r)) 
table.Drawdowns(r) 
table.Drawdowns(as.zoo(r))