Из-за проблемы с привязкой данных к CollectionContainer
, как описано http://social.msdn.microsoft.com/Forums/vstudio/en-US/b15cbd9d-95aa-47c6-8068-7ae9f7dca88a/collectioncontainer -does-not-support-rootsource? forum = wpf Теперь я использую следующий подход:
Изменить: класс CompositeCollection
не получается из FrameworkElement
и, следовательно, не имеет свойства DataContext
для поддержки привязки данных. Он будет работать, только если вы используете Binding
, предоставляя Source
. Посмотрите здесь https://stackoverflow.com/a/6446923/1254795 для получения дополнительной информации.
Ваш столбец DATE
может представлять дату, но на самом деле это либо символ, либо множитель, либо целочисленный, либо числовой вектор.
Сначала вам нужно преобразовать столбец DATE
в Date
объект. Затем вы можете создать объект xts из столбцов CLOSE
и DATE
вашего PRICE
data.frame. Наконец, вы можете использовать объект xts для вычисления возвратов и отношения Calmar.
PRICE <- structure(list(
DATE = c(20070103L, 20070104L, 20070105L, 20070108L, 20070109L,
20070110L, 20070111L, 20070112L, 20070115L),
CLOSE = c(54.7, 54.77, 55.12, 54.87, 54.86, 54.27, 54.77, 55.36, 55.76)),
.Names = c("DATE", "CLOSE"), class = "data.frame",
row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9"))
library(PerformanceAnalytics) # loads/attaches xts
# Convert DATE to Date class
PRICE$DATE <- as.Date(as.character(PRICE$DATE),format="%Y%m%d")
# create xts object
x <- xts(PRICE$CLOSE,PRICE$DATE)
CalmarRatio(Return.calculate(x))
# [,1]
# Calmar Ratio 52.82026
Большинство людей считают, что работа с классом временных рядов является большой болью. Вы должны рассмотреть возможность использования класса zoo из пакета zoo. Он не будет жаловаться на недостающие моменты, только на дубликаты. Функции PerformanceAnalytics почти наверняка ожидают «зоопарк» или его дочерний класс «xts».
pricez <- read.zoo(text=" DATE CLOSE
1 20070103 54.700
2 20070104 54.770
3 20070105 55.120
4 20070108 54.870
5 20070109 54.860
6 20070110 54.270
7 20070111 54.770
8 20070112 55.360
9 20070115 55.760
")
index(pricez) <- as.Date(as.character(index(pricez)), format="%Y%m%d")
pricez
2007-01-03 2007-01-04 2007-01-05 2007-01-08 2007-01-09 2007-01-10 2007-01-11 2007-01-12 2007-01-15
54.70 54.77 55.12 54.87 54.86 54.27 54.77 55.36 55.76
read.zoo
может установить индекс. Этот вариант работает: read.zoo(PRICE, format = "%Y%m%d")
, предполагая, что PRICE
- это кадр данных (а не массив или матрица) с двумя числовыми столбцами, и этот тоже работает: read.zoo(text="...same.as.above...", header = TRUE, format = "%Y%m%d")
– G. Grothendieck
5 January 2012 в 02:12
Альтернативным решением является использование пакета tidyquant
, который позволяет использовать функциональные возможности финансовых пакетов, включая функциональные возможности временных рядов, с кадрами данных. Следующие примеры показывают, как вы можете получить отношение Calmar для нескольких активов. tidyquant vignettes более подробно расскажут о том, как использовать пакет.
library(tidyquant)
# Get prices
price_tbl <- c("FB", "AMZN", "NFLX", "GOOG") %>%
tq_get(get = "stock.prices",
from = "2010-01-01",
to = "2016-12-31")
price_tbl
#> # A tibble: 6,449 × 8
#> symbol date open high low close volume adjusted
#> <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 FB 2012-05-18 42.05 45.00 38.00 38.23 573576400 38.23
#> 2 FB 2012-05-21 36.53 36.66 33.00 34.03 168192700 34.03
#> 3 FB 2012-05-22 32.61 33.59 30.94 31.00 101786600 31.00
#> 4 FB 2012-05-23 31.37 32.50 31.36 32.00 73600000 32.00
#> 5 FB 2012-05-24 32.95 33.21 31.77 33.03 50237200 33.03
#> 6 FB 2012-05-25 32.90 32.95 31.11 31.91 37149800 31.91
#> 7 FB 2012-05-29 31.48 31.69 28.65 28.84 78063400 28.84
#> 8 FB 2012-05-30 28.70 29.55 27.86 28.19 57267900 28.19
#> 9 FB 2012-05-31 28.55 29.67 26.83 29.60 111639200 29.60
#> 10 FB 2012-06-01 28.89 29.15 27.39 27.72 41855500 27.72
#> # ... with 6,439 more rows
# Convert to period returns
return_tbl <- price_tbl %>%
group_by(symbol) %>%
tq_transmute(ohlc_fun = Ad,
mutate_fun = periodReturn,
period = "daily")
return_tbl
#> Source: local data frame [6,449 x 3]
#> Groups: symbol [4]
#>
#> symbol date daily.returns
#> <chr> <date> <dbl>
#> 1 FB 2012-05-18 0.00000000
#> 2 FB 2012-05-21 -0.10986139
#> 3 FB 2012-05-22 -0.08903906
#> 4 FB 2012-05-23 0.03225806
#> 5 FB 2012-05-24 0.03218747
#> 6 FB 2012-05-25 -0.03390854
#> 7 FB 2012-05-29 -0.09620809
#> 8 FB 2012-05-30 -0.02253811
#> 9 FB 2012-05-31 0.05001770
#> 10 FB 2012-06-01 -0.06351355
#> # ... with 6,439 more rows
# Calculate performance
return_tbl %>%
tq_performance(Ra = daily.returns,
performance_fun = CalmarRatio)
#> Source: local data frame [4 x 2]
#> Groups: symbol [4]
#>
#> symbol CalmarRatio
#> <chr> <dbl>
#> 1 FB 0.50283172
#> 2 AMZN 0.91504597
#> 3 NFLX 0.14444744
#> 4 GOOG 0.05068483
xts
требуется сначала загрузить его библиотеку,require('xts')
– Jealie 2 January 2015 в 22:39