РЕДАКТИРОВАТЬ (1): это sessionInfo ():
> sessionInfo()
R version 3.4.2 (2017-09-28)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 17134)
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils
[5] datasets methods base
other attached packages:
[1] FSVBackTest_0.0.0.9000
[2] blotter_0.14.2
[3] FSVTradingRules_0.0.0.9000
[4] FinancialInstrument_1.2.0
[5] quantmod_0.4-13.1
[6] FSVIndicators_0.0.0.9000
[7] roxygen2_6.0.1
[8] dlm_1.1-4
[9] PerformanceAnalytics_1.4.3541
[10] xts_0.10-2.1
[11] zoo_1.8-2
[12] TTR_0.23-2
[13] FSVPositionSizing_0.0.0.9000
[14] FSVDataCheck_0.0.0.9000
[15] RevoUtils_10.0.6
[16] RevoUtilsMath_10.0.1
loaded via a namespace (and not attached):
[1] Rcpp_0.12.13 xml2_1.1.1
[3] magrittr_1.5 rtvs_1.0.0.0
[5] lattice_0.20-35 R6_2.2.0
[7] foreach_1.4.4 stringr_1.2.0
[9] tools_3.4.2 grid_3.4.2
[11] iterators_1.0.8 commonmark_1.4
[13] codetools_0.2-15 curl_3.0
[15] stringi_1.1.5 compiler_3.4.2
[17] boot_1.3-20
EDIT (2): Чтобы сделать это полностью воспроизводимым (надеюсь), я создал новую библиотеку (называемую DUMMY), добавил xts (0.10-2.1) в качестве единственной зависимости, добавил файл IBM.RData из github blotter repo как ТОЛЬКО файл (.R, .Rdata, .Rda или другой), перезапустил R, загрузил ТОЛЬКО эту библиотеку в глобальную среду, я получаю следующую sessionInfo ():
> sessionInfo()
R version 3.4.2 (2017-09-28)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 17134)
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods
[7] base
other attached packages:
[1] DUMMY_0.0.0.9000 xts_0.10-2.1 zoo_1.8-2
[4] RevoUtils_10.0.6 RevoUtilsMath_10.0.1
loaded via a namespace (and not attached):
[1] compiler_3.4.2 grid_3.4.2 rtvs_1.0.0.0
[4] lattice_0.20-35
Мой файл DESCRIPTION выглядит так:
Package: DUMMY
Title: What the Package Does (one line, title case)
Version: 0.0.0.9000
Authors@R: person("First", "Last", email = "first.last@example.com", role = c("aut", "cre"))
Description: What the package does (one paragraph).
Depends: R (>= 3.4.2),
xts (>= 0.10-2.1)
License: What license is it under?
Encoding: UTF-8
LazyData: true
RoxygenNote: 6.0.1
Теперь, когда я вызываю определенные строки объекта IBM xts, я получаю
> class(IBM)
[1] "xts" "zoo"
> IBM[1,]
IBM.Open IBM.High IBM.Low IBM.Close IBM.Volume IBM.Adjusted
> IBM[21,]
IBM.Open IBM.High IBM.Low IBM.Close IBM.Volume IBM.Adjusted
> IBM[20,]
IBM.Open IBM.High IBM.Low IBM.Close IBM.Volume IBM.Adjusted
> IBM[2,]
IBM.Open IBM.High IBM.Low IBM.Close IBM.Volume IBM.Adjusted
ОРИГИНАЛЬНЫЙ ВОПРОС:
Внезапно мне кажется, что я наблюдаю странное поведение с объектами xts, и это приводит к тому, что функции блоттера (и quantstrat) перестают работать правильно. Даже демонстрации терпят неудачу. Для справки я использую xts_0.10-2.1, blotter_0.14.2 & zoo_1.8-2. Если я использую внутренние данные из блоттера для IBM, ссылка на первую строку IBM дает имена столбцов, а не первую строку данных о ценах IBM.
> IBM[1,]
IBM.Open IBM.High IBM.Low IBM.Close IBM.Volume
IBM.Adjusted
для справки,
> dim(IBM)
[1] 21 6
Чтобы получить первую строку данных о ценах IBM, мне нужно сослаться на первые две строки объекта xts.
> IBM[1:2,]
IBM.Open IBM.High IBM.Low IBM.Close
2007-01-03 22:00:00 97.25 98.79 96.88 98.31
IBM.Volume IBM.Adjusted
2007-01-03 22:00:00 10524500 94.76
Когда я пытаюсь сослаться на последнюю строку данных IBM, я получаю
> IBM[nrow(IBM), ]
IBM.Open IBM.High IBM.Low IBM.Close IBM.Volume
IBM.Adjusted
Если я попытаюсь сослаться на последние две строки данных IBM
> IBM[20:21,]
IBM.Open IBM.High IBM.Low IBM.Close
2007-01-31 22:00:00 98.97 99.18 97.96 99
IBM.Volume IBM.Adjusted
2007-01-31 22:00:00 6610700 95.43
Если я попытаюсь использовать хвост,
> tail(IBM, 2)
IBM.Open IBM.High IBM.Low IBM.Close
2007-01-31 22:00:00 98.97 99.18 97.96 99
IBM.Volume IBM.Adjusted
2007-01-31 22:00:00 6610700 95.43
Когда я пытаюсь запустить демо amzn_test из blotter,
> demo(package = "blotter")
> demo("amzn_test")
Type <Return> to start :
demo(amzn_test)
---- ~~~~~~~~~
> require(blotter)
> # Remove portfolio and account data if run previously
> try(rm("portfolio.amzn_port","account.amzn_acct",pos=.blotter), silent = TRUE)
> # load the example data
> data("amzn")
> currency("USD")
[1] "USD"
> stock("amzn",currency="USD",multiplier=1)
[1] "amzn"
> # Initialize the Portfolio
> initPortf("amzn_port",symbols="amzn",initDate="2010-01-14")
[1] "amzn_port"
> initAcct("amzn_acct",portfolios="amzn_port",initDate="2010-01-14", initEq=10000)
[1] "amzn_acct"
> # look at the transactions data
> amzn.trades
TxnPrice TxnQty
2010-01-14 07:18:50 127.49 -400
2010-01-14 07:18:53 127.49 400
2010-01-14 07:21:50 127.26 -300
2010-01-14 07:21:53 127.26 300
2010-01-14 07:23:07 127.17 100
2010-01-14 07:23:10 127.19 -100
2010-01-14 07:37:56 127.12 -400
2010-01-14 07:37:59 127.12 400
2010-01-14 07:38:32 127.23 -500
2010-01-14 07:38:35 127.23 500
2010-01-14 07:38:37 127.27 300
2010-01-14 07:38:40 127.30 -300
2010-01-14 07:46:08 126.95 -1300
2010-01-14 07:46:11 126.95 1300
> # Add the transactions to the portfolio
> blotter:::addTxns("amzn_port","amzn",TxnData=amzn.trades,verbose=TRUE)
Error in if (TxnDate < lastTxnDate) { : argument is of length zero
In addition: Warning messages:
1: In rm("portfolio.amzn_port", "account.amzn_acct", pos = .blotter) :
object 'portfolio.amzn_port' not found
2: In rm("portfolio.amzn_port", "account.amzn_acct", pos = .blotter) :
object 'account.amzn_acct' not found
>
Я предполагаю, что эта ошибка происходит, потому что ссылка на последнюю строку данных (откуда берется lastTxnDate) дает имена столбцов, а не последнюю строку данных, из которой index () даст нам дату. Кто-нибудь еще видел это? Это только начало происходить в последние несколько дней, поэтому очень недавний выпуск. Спасибо за вашу помощь!