На r-forge главная версия пакета. Одно время авторы стали редко ее обновлять, и там была одна проблемка с обновлением списка тикеров, если источник данных mfd.ru. У меня форкнутая версия, где эта проблема решена.
Если поставился из r-forge, то должно работать.
Попробуй запустить:
library(rusquant)
getSymbols("SiH6 (03.2016)",from="2016-02-10",period="1min", src="mfd",auto.assign = FALSE)
Пока тут бился с алготорговлей, параллельно дописал библиотеку для R, которая уже больше 12 лет пылилась
на разных репозиториях.
Многим было не удобно ее использовать, но не смотря ни на что народ ей пользовался и благодарил на конференциях за поддержку этой библиотеки.
Теперь же можно наслаждаться нормальным доступ к данным из
Финам, Алор, Мосбиржа, Mfd, Тинькофф, MarketWatch. Добавил в нее и возможности торговать через API брокеров: Финам, Алор, Тинькофф.
Теперь можно устанавливать и наслаждаться как обычными библиотеками:
install.packages(«rusquant»)
library(rusquant)
fn601196
#1
Оставлено
:
6 июля 2018 г. 23:16:39(UTC)
Статус: Посетитель
Группы: Участник
Зарегистрирован: 15.12.2017(UTC)
Сообщений: 2
Добрый день. Посоветуйте, пожалуйста, как могу решить следующую проблему.
Раньше (в начале года) выкачивал историю цен на ETF с Финама с помощью такого кода в R.
Код:
library(quantmod)
library(xts)
library(zoo)
library(rusquant)
library(TTR)
etf_env <- new.env()
start_date = as.Date("2017-06-01")
end_date = Sys.Date()-1
available_etf_list = c("FXMM", "FXCN", "FXIT", "FXJP", "FXDE", "FXUS", "FXAU", "FXUK", "FXRB", "FXRL", "FXRU")
setDefaults(getSymbols, env = etf_env, src = "Finam")
setDefaults(getSymbols.Finam, env = etf_env, from = start_date, to = end_date, period = "day")
getSymbols(available_etf_list, auto.assign = TRUE)
И вот раньше после этого получалась Environment с историей цен на каждый из инструментов. А теперь получаю только истории первых трех инструментов. И ошибку:
Код:
Error in download.file(stock.URL, destfile = tmp, quiet = !verbose) :
cannot open URL 'http://export.finam.ru/table.csv?d=d&market=1&f=table&e=.csv&dtf=1&tmf=1&MSOR=0&sep=1&sep2=1&at=1&p=8&em=181751&df=1&mf=5&yf=2017&dt=5&mt=6&yt=2018&cn=FXJP&datf=1'
In addition: Warning message:
In download.file(stock.URL, destfile = tmp, quiet = !verbose) :
cannot open URL 'http://export.finam.ru/table.csv?d=d&market=1&f=table&e=.csv&dtf=1&tmf=1&MSOR=0&sep=1&sep2=1&at=1&p=8&em=181751&df=1&mf=5&yf=2017&dt=5&mt=6&yt=2018&cn=FXJP&datf=1': HTTP status was '403 Forbidden'
При этом, если копирую адрес, который не удалось скачать R, в браузер — файл скачивается. Вероятно, Финам стал ограничивать выдачу на автоматические запросы? Хотя quantmod должен по умолчанию делать паузы, чтобы не перегрузать сервер…
Посоветуйте, пожалуйста, как мне исправить эту ошибку и получить все истории.
Заранее большое спасибо!
Получается вот так
> getSymbols.Finam(Symbols = 'MICEXM&M', verbose = FALSE, warnings = TRUE, auto.assign = TRUE, from = "2016-01-01")
Ошибка в `[.data.frame`(fr, , (5:9)) :undefined columns selected
> traceback()
7: stop("undefined columns selected")
6: `[.data.frame`(fr, , (5:9))
5: fr[, (5:9)]
4: as.matrix(fr[, (5:9)])
3: apply(as.matrix(fr[, (5:9)]), 2, as.numeric)
2: xts(apply(as.matrix(fr[, (5:9)]), 2, as.numeric), as.Date(strptime(fr[,
3], "%Y%m%d")), src = "finam", updated = Sys.time())
1: getSymbols.Finam(Symbols = "MICEXM&M", verbose = FALSE, warnings = TRUE,
auto.assign = TRUE, from = "2016-01-01")
Включаем отладку
> getSymbols.Finam(Symbols = 'MICEXM&M', verbose = TRUE, warnings = TRUE, auto.assign = TRUE, from = "2016-01-01")
downloading MICEXM&M .....
/table.csv?d=d&market=1&f=table&e=.csv&dtf=1&tmf=1&MSOR=0&sep=1&sep2=1&at=1&p=8&em=18886&df=1&mf=0&yf=2016&dt=18&mt=10&yt=2016&cn=MICEXM&Mпробую URL 'http://export.finam.ru/table.csv?d=d&market=1&f=table&e=.csv&dtf=1&tmf=1&MSOR=0&sep=1&sep2=1&at=1&p=8&em=18886&df=1&mf=0&yf=2016&dt=18&mt=10&yt=2016&cn=MICEXM&M&datf=1'
Content type 'finam/expotfile' length unknown
.......... .......
downloaded 17 KB
done.
Ошибка в `[.data.frame`(fr, , (5:9)) :undefined columns selected
Обращаясь по созданному url действительно получаем файл _без_наименований показателей (пустая первая строка) с 7 колонками
20160104,000000,3775.4600000,3780.5300000,3732.3100000,3732.9500000,1790746616
20160105,000000,3723.6200000,3793.4300000,3718.2100000,3793.4300000,2108887779
20160106,000000,3786.8100000,3829.9700000,3782.0200000,3818.0500000,3002195690
-----8<-----
«Больное место» это указание в конце url необязательного «cn=MICEXM&M»
По идее это должно «лечиться» указанием альяса для имени, поскольку есть строчка в коде getSymbols.Finam
Symbols.name <- getSymbolLookup()[[Symbols[[i]]]]$name
То есть предполагается что то такое:
setSymbolLookup(QQQQ='yahoo',DIA='MySQL')
PS Если конечно я не запутался в логике использования псевдонимов. Их вполне логично выводить вместо оригиналов в качестве меток…. На худой конец просто выкинув это имя, в скачиваемом файле остаётся как имя индикатора индеферентное «table»
Я хочу запускать файлы R в пакетном режиме с помощью Rscript, однако, похоже, он не загружает нужные мне библиотеки. Конкретная ошибка, которую я получаю:
Error in library(timeSeries) : there is no package called 'timeSeries'
Execution halted
Однако у меня есть пакет timeSeries
, и я без проблем могу загрузить его из Rstudio, RGui и R из командной строки. Проблема, похоже, возникает только при запуске сценария с использованием Rscript.
Мои переменные системы / среды настроены как:
C:Program FilesRR-3.1.0binx64 (Appended to PATH)
R_HOME = C:Program FilesRR-3.1.0
R_User = Patrick
Я запускаю ту же версию R в RStudio, RGui и R из командной строки. Я также проверил .Library
из этих трех источников и получил такой же результат.
Как я могу запустить Rscript из командной строки с пакетами, которые я использую (и установил) в R?
РЕДАКТИРОВАТЬ:
Я использую Rscript через Rscript script.r
в командной строке Windows в каталоге, где находится script.r
.
Результатом Rscript -e print(.Library)
будет [1] "C:/PROGRA~1/R/R-31~1.0/library"
Что согласуется с тремя другими вариантами, которые я упомянул: [1] "C:/PROGRA~1/R/R-31~1.0/library"
Однако, если я вставлю это в свой сценарий:
print(.libPaths())
library(timeSeries) #This is the package that failed to load
Я получаю на выходе:
[1] "C:/Program Files/R/R-3.1.0/library"
Error in library(timeSeries) : there is no package called 'timeSeries'
Execution halted
Соответствующий вызов в RStudio дает дополнительный путь к месту, где фактически установлен пакет:
> print(.libPaths())
[1] "C:/Users/Patrick/Documents/R/win-library/3.1" "C:/Program Files/R/R-3.1.0/library"
5 ответов
Лучший ответ
Короче говоря, значение, возвращаемое при вызове Sys.getenv('R_LIBS_USER')
в R.exe, должно быть таким же, как значение, возвращаемое при вызове этого в командной строке:
Rscript.exe -e "Sys.getenv('R_LIBS_USER')"
и указанное выше значение необходимо включить в этот вызов командной строки:
Rscript.exe -e ".libPaths()"
Обратите внимание, что значения R_LIBS_USER
могут отличаться между R.exe и Rscript.exe, если значение R_USER
изменяется либо в .Rprofile
или в целевом поле ярлыка пользователя на R.exe
, и в целом я обнаружил, что пользовательская библиотека (т.е. .libPaths()[2]
) просто не установлена в Rscript.exe
Поскольку мне нравится устанавливать R_USER
на свой USERPROFILE
, я включаю следующий блок в начало файлов .R
, которые я хочу запустить на нескольких компьютерах или в Rscript.exe { {X3}} (т.е. Rscript -e "path.expand('~/.Rprofile')"
):
# =====================================================================
# For compatibility with Rscript.exe:
# =====================================================================
if(length(.libPaths()) == 1){
# We're in Rscript.exe
possible_lib_paths <- file.path(Sys.getenv(c('USERPROFILE','R_USER')),
"R","win-library",
paste(R.version$major,
substr(R.version$minor,1,1),
sep='.'))
indx <- which(file.exists(possible_lib_paths))
if(length(indx)){
.libPaths(possible_lib_paths[indx[1]])
}
# CLEAN UP
rm(indx,possible_lib_paths)
}
# =====================================================================
10
Community
23 Май 2017 в 14:47
Как упоминалось в комментариях, кажется, что Rscript не распознает значения по умолчанию для пути к библиотеке автоматически. Я пишу сценарий R, который должен быть доступен из командной строки на компьютерах разных людей, поэтому я придумал этот более общий обходной путь:
- Сначала сохраните путь к библиотеке по умолчанию в переменной (функции из Rscript могут найти это, но они просто не работают автоматически)
- Затем включите этот путь в вызов
library()
с аргументомlib.loc =
. -
Это должно работать независимо от того, какой путь находится на данном компьютере.
library.path <- .libPaths() library("timeseries", lib.loc = library.path)
Еще раз спасибо @flodel выше за то, что направили меня на правильный путь
7
rrr
31 Окт 2017 в 22:00
Этот ответ не поможет исходному пользователю (pbreach), но он может помочь кому-то еще, кто наткнется на этот вопрос и имеет аналогичную проблему со мной.
У меня много файлов сценариев bash
.sh
, которые вызывают RScript
для выполнения файлов .R
. Моя операционная система — Windows 10
, и я выполняю эти bash
файлы с помощью cygwin
.
Все работало нормально до вчерашнего дня, когда я наконец обновил свой R
с Revolution R 8.0.1 beta
до Microsoft R Open 3.4.1
. После этого обновления все сценарии bash, которые вызывали RScript
, терпели неудачу по той же причине, которая указана здесь (например, Error in library(zoo) : there is no package called 'zoo'
).
Расследование показало, что RScript
действительно работает нормально, если вызывается из DOS shell
, а не из оболочки cygwin bash.
Например, если я выполню это в DOS shell
C:Progra~1MicrosoftROpen~1R-3.4.1binx64Rscript.exe -e ".libPaths()"
Я вижу выход
[1] "C:/Users/HaroldFinch/Documents/R/win-library/3.4"
[2] "C:/Program Files/Microsoft/R Open/R-3.4.1/library"
В конце концов я обнаружил причину. Как объяснено в R FAQ, чтобы определить свой домашний каталог, R
сначала будет использовать переменную среды R_USER
, если она определена, иначе он будет использовать переменную среды HOME
, если она определена, иначе она будет использовать «личный» каталог Windows.
Моя конфигурация Windows не определяет ни R_USER
, ни HOME
переменных среды. Итак, в случае DOS shell
R
использует мой «личный» каталог Windows (C:/Users/HaroldFinch/Documents
). Это хорошо, потому что там установлены все мои библиотеки (C:/Users/HaroldFinch/Documents/R/win-library/3.4
).
Напротив, cygwin
определяет и экспортирует переменную среды HOME
, которая указывает на мой пользовательский каталог cygwin
, в котором отсутствуют какие-либо элементы R
. Следовательно, RScript
, вызванный из cygwin
, имел неправильный домашний каталог R
, и поэтому не смог загрузить библиотеки.
Вероятно, есть много способов решить эту проблему. Я решил, что в моем сценарии bash будет установлена переменная среды R_USER
, которая указывает на мой пользовательский каталог Windows.
Например, если я выполняю это в cygwin bash shell
:
R_USER="C:/Users/HaroldFinch/Documents"
export R_USER
/cygdrive/c/Progra~1/Microsoft/ROpen~1/R-3.4.1/bin/x64/Rscript.exe -e ".libPaths()"
Я вижу выход
[1] "C:/Users/HaroldFinch/Documents/R/win-library/3.4"
[2] "C:/Program Files/Microsoft/R Open/R-3.4.1/library"
Который теперь точно такой же, как и в примере оболочки DOS, приведенном выше.
4
HaroldFinch
26 Окт 2017 в 23:41
Другая причина — пакрат. Если вы работаете с packrat, RStudio включает его, когда вы открываете проект. RScript этого не делает, поэтому вам понадобится packrat::on()
в начале вашего скрипта (до вызова библиотеки).
0
Dov Rosenberg
6 Сен 2019 в 20:17
Как уже отмечали другие, проблема в том, что Rscript.exe не может распознать папку win-library. Самым простым решением для меня было явно указать путь к папке библиотеки, добавив:
.libPaths("C:/Users/Benutzer1/Documents/R/win-library/4.0")
В мою программу. Затем он загружает все пакеты из папки win-library и по-прежнему может загружать пакеты из папки стандартной библиотеки.
0
Jens
2 Янв 2021 в 23:28