2010-11-23 13 views
1

私の動物園シリーズで動作するようにperformanceAnalyticsを取得することはできません。私は自分のスクリプトを書くことに決めました。R、私の最長のドローダウン機能をご確認ください

最長ドローダウンを計算したい場合は、入力としてcummax(equity)-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を足すたので、私はまた、注文した答えを得ることから私をない問題を修正しました)[]

今はうまくいくようですが、わかりません。ジョシュアへ

: 始まる私のデータでは、私がグラフ化できますが、まだ

"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では動作しません、クロンインデックス と動物園は、今私はposixctインデックスとXTSするためにそれを変換しましたそれは私自身で計算します。 Drawdown(myData)は、すべてのデータ値NaNを持つxts系列を返します。 私はfindDrawdownコードを見てきました。絶対ドローダウンではなく、相対的なドローダウンを測定するため、私とは異なります。

とにかく、私のスクリプトが誰かに役立つことを望みます。

+1

PerformanceAnalyticsパッケージは、世界中の多くの専門家によって使用されているので、私は強くPerformanceAnalyticsでの作業...というよりも、車輪を再発明し尋ねるのを防ぐあなたのデータと間違って何を調査することをお勧めしますあなたの仕事を修正する他の人。 –

+5

@Joshua、Harsh。 Dirkの投稿を読めなくなったと思います。P –

+0

performanceAnalyticsでは、データを動物園またはxts、chronまたはPOSIXctとして使用すると、データは時系列に変換できません。私はグーグルをしていて、多くの人が同じ問題を抱えています。実際、performanceAnalyticsは独自の例でも私のためには機能しません。 – skan

答えて

3

パッケージから古い関数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 
+0

こんにちは、これはちょうど私に日付なしの1つのドローダウンを与えているということです。私はその出力を日付に変換しようとしましたが、それは私のものと同じではありません。 – skan

1

私は最大ドローダウンについて何を知っているが、ここにあなたのコードのいくつかの考えているしないでください。


入力DDがどのような形式であるかは完全にはっきりしていません。おそらく、正しく入力されているかどうかを確認するために入力チェックが必要になります。


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

あなたは数値ベクトル(含む-1,2、0と1)を返すsignこの機能を、オーバーロードされてきた場合を除き。 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


スペースを置く場所と一致していると、コードを読みやすくなります。個人的には、演算子の前と後にコンマとスペースの後に空白があることを好みます。

+0

こんにちは。あなたの提案をありがとう。私はメインポストのコードを修正しました。 – skan

+0

私の入力はDD < - cummax(equity)-equityなので、常にゼロ以上です。 (DD)は0または1になります。 – skan

1

パフォーマンスアナライザの機能は、chronをインデックスとして使用すると失敗します。私は前にあなたにあなたの動物園/ xtsインデックス値のchronに頼ってはならないことを提案しました。

このエラーは、「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)) 
+0

私は以下を受け取ります:if(thisSign == priorSign){: TRUE/FALSEが必要な値がありません。私のデータは単なる日時であり、ドローダウンの価値は – skan

+0

@ user425895です:戻り値シリーズに値がありません。 'r'を作るときに' na.omit'と呼んでいたことに注目してください。 –

+0

関連:http://stackoverflow.com/questions/3567025/drawdown-duration – Shane

関連する問題