library(twitteR) library(hash) library(lubridate) library(rusquant) #install.packages("rusquant", repos="http://R-Forge.R-project.org") load("twits.dat.RData") getSymbols("EURUSD",src = "Finam",period="hour",from = Sys.Date()-13) indexTZ(EURUSD) <- "UTC" # В пакете что-то не так с часовыми поясами. # Выполните tail(EURUSD) и посмотрите на последний час, затем сравните с временем на http://www.worldtimeserver.com/current_time_in_UTC.aspx # Отбросьте минуты и секунды с сайта, часы при этом должны совпадать. Но у меня не совпали. # И логично что часы не совпадут в неторговое время, делайте проверку только в торговое время. # Выполните команду indexTZ(EURUSD) <- "UTC+1" или "UTC-1" или "UTC+2" или "UTC-2" или +-больше; и затем tail(EURUSD), так чтоб сверка времени на сайте и последней строке в tail(EURUSD) совпали indexTZ(EURUSD) <- "UTC+1" #у меня прокатило вот так, это даст настоящий UTC #счётчик упоминаний даты в твиттере buyCount <- hash() sellCount <- hash() for(i in 1:nrow(EURUSD)){ buyCount[[ as.character(time(EURUSD[i])) ]] <- 0 sellCount[[ as.character(time(EURUSD[i])) ]] <- 0 } for(i in 1:length(li$buy.twits)){ #от твиттер даты отбрасываются минуты и секунды date <- as.character(floor_date(li$buy.twits[[i]]$created, unit = "hour")) if(has.key(date, buyCount)){ #увеличиваем счётчик на 1 buyCount[[date]] <- buyCount[[date]] + 1 } } for(i in 1:length(li$sell.twits)){ #от твиттер даты отбрасываются минуты и секунды date <- as.character(floor_date(li$sell.twits[[i]]$created, unit = "hour")) if(has.key(date, sellCount)){ #увеличиваем счётчик на 1 sellCount[[date]] <- sellCount[[date]] + 1 } } #график 1. eurusd h1 open chart1 <- as.numeric(EURUSD$EURUSD.Open) #график 2. число упоминаний "buy" за час chart2 <- rep(NA, nrow(EURUSD)) #график 3. число упоминаний "sell" за час chart3 <- rep(NA, nrow(EURUSD)) for(i in 1:nrow(EURUSD)){ chart2[i] <- buyCount[[ as.character(time(EURUSD[i])) ]] chart3[i] <- sellCount[[ as.character(time(EURUSD[i])) ]] } #Я так и не научился рисовать красивые наложенные графики, поэтому тут будет куча расчёт координат вручную. #В идеале нужно просто как-то нарисовать chart1, chart2, chart3 с красивым наложением и без всего нижеследующего кода. #Вместо chart1 вообще лучше ohlc бары из таблицы EURUSD lowPart <- c(min(chart1), min(chart1) - 0.33*(max(chart1)-min(chart1))) lowPartMid <- (lowPart[1] + lowPart[2])/2 chart2 <- lowPartMid + chart2/max(chart2,chart3) * (lowPart[1]-lowPartMid) chart3 <- lowPartMid + chart3/max(chart2,chart3) * (lowPart[2]-lowPartMid) plot(chart1, type="l", ylim=c(lowPart[2], max(chart1)), ylab="Price", xlab="Bar", main="EURUSD H1") lines(rep(min(chart1),length(chart1)), type="l", col="gray") lines(chart2, col="blue") lines(chart3, col="red") grid(nx = length(chart1)/2) #не забывайте что этот "твиттеропрогноз" - запаздывает. Пик на графике покупок под H1 open ценой - означает что твиты приходили В ТЕЧЕНИИ ВСЕГО этого бара. #т.е. в реале число твитов соотествующих бару вы узнаете в конце этого бара