library(twitteR) library(hash) library(lubridate) load("twits.dat.RData") ratesTable <- read.csv("eurusd_h1.csv") ratesTable[,"Time"] <- as.character(ratesTable[,"Time"]) #read.csv скорее всего конвертнул эта в фактор, нам это не нужно #время твиттере вроде UTC; а в CSV: UTC+2. Нужно отнять 2 часа из таблички ratesTable[,"Time"] <- sapply(ratesTable[,"Time"], function(x){ as.character(ymd_hms(x) - hours(2))}) #счётчик упоминаний даты в твиттере buyCount <- hash() sellCount <- hash() for(i in 1:nrow(ratesTable)){ buyCount[[ ratesTable[i,"Time"] ]] <- 0 sellCount[[ ratesTable[i,"Time"] ]] <- 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 <- ratesTable[,"Open"] #график 2. число упоминаний "buy" за час chart2 <- rep(NA, nrow(ratesTable)) #график 3. число упоминаний "sell" за час chart3 <- rep(NA, nrow(ratesTable)) for(i in 1:nrow(ratesTable)){ chart2[i] <- buyCount[[ ratesTable[i,"Time"] ]] chart3[i] <- sellCount[[ ratesTable[i,"Time"] ]] } #Я так и не научился рисовать красивые наложенные графики, поэтому тут будет куча расчёт координат вручную. #В идеале нужно просто как-то нарисовать chart1, chart2, chart3 с красивым наложением и без всего нижеследующего кода. #Вместо chart1 вообще лучше ohlc бары из таблицы ratesTable 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 2017.02-16 - 2017.02.24") 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 ценой - означает что твиты приходили В ТЕЧЕНИИ ВСЕГО этого бара. #т.е. в реале число твитов соотествующих бару вы узнаете в конце этого бара