Код:
библиотека ( 'quantmod')
библиотека ( «зоопарк»)
TEMP_FILE <- './data/temp.csv'
OHLC <- функция (TTIME, tprice, tvolume, FMT) {
# Функция, которая преобразует сырое bitcoincharts тиккера данных OHLC данных
# возможные форматы включают в себя: "% Y% м% d% H% M" (Минута тиккера), "% Y% м% д% Н" (Почасовой тиккера), "% Y% м% д" (Ежедневно тикер)
ttime.int <- формат (TTIME, FMT)
data.frame (время = TTIME [tapply (1: длина (TTIME), ttime.int, функция (х) {головка (х, 1)})],
.Открытый = tapply (tprice, ttime.int, функция (х) {головка (х, 1)}),
.Высокий = tapply (tprice, ttime.int, макс),
.Низкий = tapply (tprice, ttime.int, мин),
.Закрыть = tapply (tprice, ttime.int, функция (х) {хвост (х, 1)}),
.Объем = tapply (tvolume, ttime.int, функция (х) {сумма (х)}),
.Скорректированная = tapply (tprice, ttime.int, функция (х) {хвост (х, 1)}))
}
getTicker <- функции (символ, период, источник данных, имя файла = '') {
# Этот метод извлекает данные из тикер bitcoincharts.com или CSV загрузить с bitcoincharts.com для любого символа, перечисленных на сайте
# Использование: тикер <- data.frame (getTicker ( 'mtgoxUSD | virtexCAD \ ...', 'ежедневно | ежечасно | минут, 'веб | файл', ' / данные / mtgoxusd-recent.csv'))
# Параметр файла не является обязательным и используется только при DataSource = «Файл»
ColClasses = с ( 'цифрой', 'цифры', 'цифры')
если (DataSource == 'веб') {
RECENT_TRANSACTIONS_FILE <- паста ( './ данные /', символ, сентябрь = '')
RECENT_TRANSACTIONS_FILE <- паста (RECENT_TRANSACTIONS_FILE, '-recent.csv', Сентябрь = '')
# Давайте быть хорошим и загружать только те данные, которые мы должны ...
если (File.Exists (RECENT_TRANSACTIONS_FILE)) {
# Получить последний идентификатор
mawk_command <- вставить("'END {печать}' Mawk ", RECENT_TRANSACTIONS_FILE, сентябрь = '')
Последняя линия <- система (mawk_command, стажер = TRUE),
lastid <- strsplit (lastline [1], сплит = '') [[1]] [1]
URL <- пасты ( 'http://bitcoincharts.com/t/trades.csv?symbol=', символ, сентябрь = '')
URL <- паста (URL, '&начать =», = Сентябрь '')
URL <- паста (URL, lastid, Сентябрь = '')
download.file (URL, DestFile = TEMP_FILE, метод = 'авто', тихий = FALSE, режим = "вес", CacheOK = TRUE, экстра = getOption ("download.file.extra"))
Кот("\ п", Файл = RECENT_TRANSACTIONS_FILE, добавьте = TRUE)
# Теперь нам нужны некоторые дополнительные проверки вменяемости здесь, чтобы увидеть, если этот треугольник уже существует в
# Текущий локальный файл или иногда мы будем наматывать несколько раз загружая те же операции
file.append (RECENT_TRANSACTIONS_FILE, TEMP_FILE)
file.remove (TEMP_FILE)
}
еще {
download.file (URL = паста ( 'http://bitcoincharts.com/t/trades.csv?symbol=', символ, Сентябрь = ''), DestFile = RECENT_TRANSACTIONS_FILE, метод = '', тихий = FALSE, автоматический режим знак равно "вес", CacheOK = TRUE, экстра = getOption ("download.file.extra"))
}
бегущая строка <- read.zoo (RECENT_TRANSACTIONS_FILE, colClasses = ColClasses, сентябрь = ",", Заголовок = FALSE)
}
еще {
бегущая строка <- read.zoo (имя файла, colClasses = ColClasses, Сентябре = ",", Заголовок = FALSE)
}
Индекс (код) <- as.POSIXct (индекс (код), происхождение ="1970-01-01", TZ ="время по Гринвичу")
если (период == 'ежемесячный') ohlcObj <- OHLC (индекс (код), торговый код $ V2, V3 $ тикер,"% Y% м")
если (период == '') ежедневно ohlcObj <- OHLC (индекс (код), торговый код $ V2, V3 $ тикер,"% Y% м% д")
если (период == '') почасовой ohlcObj<- OHLC (индекс (код), торговый код $ V2, V3 $ тикер,"% Y% м% д% Н")
если (период == '') минут ohlcObj <- OHLC (индекс (код), торговый код $ V2, V3 $ тикер,"% Y% м% d% H% M")
# Очистить имена столбцов немного
имена (ohlcObj) [имена (ohlcObj) == ".Открыто"] <- 'Открыто'
имена (ohlcObj) [имена (ohlcObj) == ".Закрыть"] <- 'Закрыть'
имена (ohlcObj) [имена (ohlcObj) == ".Volume"] <- «Объем»
имена (ohlcObj) [имена (ohlcObj) == ".Adjusted"] <- «Скорректированный»
имена (ohlcObj) [имена (ohlcObj) == ".Высокая"] <- 'Высокая'
имена (ohlcObj) [имена (ohlcObj) == ".Низкий"] <- 'Низкий'
имена (ohlcObj) [имена (ohlcObj) == "время"] <- «Время»
row.names (ohlcObj) <- НОЛЬ
ohlcObj $ row.names <- НОЛЬ
вернуться (ohlcObj)
}
getChartable <- функция (ohlcObj) {
# Этот метод принимает необработанный кадр данных OHLC и восстанавливает его таким образом, что испускает XTS объектов, которые могут быть использованы ChartSeries
rownames (ohlcObj) <- ohlcObj $ Time
ohlcObj $ Time <- НОЛЬ
ohlcObjXts <- as.xts (ohlcObj)
возвращающие (ohlcObjXts)
}
# Давайте попробуем это сейчас
#бегущая строка <- data.frame (getTicker ( 'mtgoxUSD', 'минут', 'Файл',) '/ данные / mtgoxusd-recent.csv.)
#бегущая строка <- data.frame (getTicker ( 'virtexCAD', 'в месяц', 'Файл',) '/ данные / cavirtex-2012.csv.)
# Заполнить кадр данных из Интернета
бегущая строка <- data.frame (getTicker ( 'mtgoxUSD', 'ежечасно', 'паутина'))
# Получить XTS объект, который может быть использован для построения графиков
tickerxts <- getChartable (код)
ChartSeries (tickerxts)
# Добавление нескольких технических индикаторов на графике
addEMA (п = 6 * 7, столбец = 'красный')
addEMA (п = 3 * 7, столбец = 'зеленый')
addMACD ()
библиотека ( «зоопарк»)
TEMP_FILE <- './data/temp.csv'
OHLC <- функция (TTIME, tprice, tvolume, FMT) {
# Функция, которая преобразует сырое bitcoincharts тиккера данных OHLC данных
# возможные форматы включают в себя: "% Y% м% d% H% M" (Минута тиккера), "% Y% м% д% Н" (Почасовой тиккера), "% Y% м% д" (Ежедневно тикер)
ttime.int <- формат (TTIME, FMT)
data.frame (время = TTIME [tapply (1: длина (TTIME), ttime.int, функция (х) {головка (х, 1)})],
.Открытый = tapply (tprice, ttime.int, функция (х) {головка (х, 1)}),
.Высокий = tapply (tprice, ttime.int, макс),
.Низкий = tapply (tprice, ttime.int, мин),
.Закрыть = tapply (tprice, ttime.int, функция (х) {хвост (х, 1)}),
.Объем = tapply (tvolume, ttime.int, функция (х) {сумма (х)}),
.Скорректированная = tapply (tprice, ttime.int, функция (х) {хвост (х, 1)}))
}
getTicker <- функции (символ, период, источник данных, имя файла = '') {
# Этот метод извлекает данные из тикер bitcoincharts.com или CSV загрузить с bitcoincharts.com для любого символа, перечисленных на сайте
# Использование: тикер <- data.frame (getTicker ( 'mtgoxUSD | virtexCAD \ ...', 'ежедневно | ежечасно | минут, 'веб | файл', ' / данные / mtgoxusd-recent.csv'))
# Параметр файла не является обязательным и используется только при DataSource = «Файл»
ColClasses = с ( 'цифрой', 'цифры', 'цифры')
если (DataSource == 'веб') {
RECENT_TRANSACTIONS_FILE <- паста ( './ данные /', символ, сентябрь = '')
RECENT_TRANSACTIONS_FILE <- паста (RECENT_TRANSACTIONS_FILE, '-recent.csv', Сентябрь = '')
# Давайте быть хорошим и загружать только те данные, которые мы должны ...
если (File.Exists (RECENT_TRANSACTIONS_FILE)) {
# Получить последний идентификатор
mawk_command <- вставить("'END {печать}' Mawk ", RECENT_TRANSACTIONS_FILE, сентябрь = '')
Последняя линия <- система (mawk_command, стажер = TRUE),
lastid <- strsplit (lastline [1], сплит = '') [[1]] [1]
URL <- пасты ( 'http://bitcoincharts.com/t/trades.csv?symbol=', символ, сентябрь = '')
URL <- паста (URL, '&начать =», = Сентябрь '')
URL <- паста (URL, lastid, Сентябрь = '')
download.file (URL, DestFile = TEMP_FILE, метод = 'авто', тихий = FALSE, режим = "вес", CacheOK = TRUE, экстра = getOption ("download.file.extra"))
Кот("\ п", Файл = RECENT_TRANSACTIONS_FILE, добавьте = TRUE)
# Теперь нам нужны некоторые дополнительные проверки вменяемости здесь, чтобы увидеть, если этот треугольник уже существует в
# Текущий локальный файл или иногда мы будем наматывать несколько раз загружая те же операции
file.append (RECENT_TRANSACTIONS_FILE, TEMP_FILE)
file.remove (TEMP_FILE)
}
еще {
download.file (URL = паста ( 'http://bitcoincharts.com/t/trades.csv?symbol=', символ, Сентябрь = ''), DestFile = RECENT_TRANSACTIONS_FILE, метод = '', тихий = FALSE, автоматический режим знак равно "вес", CacheOK = TRUE, экстра = getOption ("download.file.extra"))
}
бегущая строка <- read.zoo (RECENT_TRANSACTIONS_FILE, colClasses = ColClasses, сентябрь = ",", Заголовок = FALSE)
}
еще {
бегущая строка <- read.zoo (имя файла, colClasses = ColClasses, Сентябре = ",", Заголовок = FALSE)
}
Индекс (код) <- as.POSIXct (индекс (код), происхождение ="1970-01-01", TZ ="время по Гринвичу")
если (период == 'ежемесячный') ohlcObj <- OHLC (индекс (код), торговый код $ V2, V3 $ тикер,"% Y% м")
если (период == '') ежедневно ohlcObj <- OHLC (индекс (код), торговый код $ V2, V3 $ тикер,"% Y% м% д")
если (период == '') почасовой ohlcObj<- OHLC (индекс (код), торговый код $ V2, V3 $ тикер,"% Y% м% д% Н")
если (период == '') минут ohlcObj <- OHLC (индекс (код), торговый код $ V2, V3 $ тикер,"% Y% м% d% H% M")
# Очистить имена столбцов немного
имена (ohlcObj) [имена (ohlcObj) == ".Открыто"] <- 'Открыто'
имена (ohlcObj) [имена (ohlcObj) == ".Закрыть"] <- 'Закрыть'
имена (ohlcObj) [имена (ohlcObj) == ".Volume"] <- «Объем»
имена (ohlcObj) [имена (ohlcObj) == ".Adjusted"] <- «Скорректированный»
имена (ohlcObj) [имена (ohlcObj) == ".Высокая"] <- 'Высокая'
имена (ohlcObj) [имена (ohlcObj) == ".Низкий"] <- 'Низкий'
имена (ohlcObj) [имена (ohlcObj) == "время"] <- «Время»
row.names (ohlcObj) <- НОЛЬ
ohlcObj $ row.names <- НОЛЬ
вернуться (ohlcObj)
}
getChartable <- функция (ohlcObj) {
# Этот метод принимает необработанный кадр данных OHLC и восстанавливает его таким образом, что испускает XTS объектов, которые могут быть использованы ChartSeries
rownames (ohlcObj) <- ohlcObj $ Time
ohlcObj $ Time <- НОЛЬ
ohlcObjXts <- as.xts (ohlcObj)
возвращающие (ohlcObjXts)
}
# Давайте попробуем это сейчас
#бегущая строка <- data.frame (getTicker ( 'mtgoxUSD', 'минут', 'Файл',) '/ данные / mtgoxusd-recent.csv.)
#бегущая строка <- data.frame (getTicker ( 'virtexCAD', 'в месяц', 'Файл',) '/ данные / cavirtex-2012.csv.)
# Заполнить кадр данных из Интернета
бегущая строка <- data.frame (getTicker ( 'mtgoxUSD', 'ежечасно', 'паутина'))
# Получить XTS объект, который может быть использован для построения графиков
tickerxts <- getChartable (код)
ChartSeries (tickerxts)
# Добавление нескольких технических индикаторов на графике
addEMA (п = 6 * 7, столбец = 'красный')
addEMA (п = 3 * 7, столбец = 'зеленый')
addMACD ()
Полезно для моделирования bitcoincharts.com тиккера данных из всех (?) Обменов в кадре данных Р. R также могут быть импортированы в RapidMiner с R плагин.