- Dear jury,
We are students from Faculty of Economics and Social Sciences, University of Plovdiv Paisii Hilendarski. As we are first year students and have not studied any programming languages we tried to forecasting the value of cryptocurrency with R. Unfortunately, while working with file price_data1442.csv None of the functions we know, gave satisfying results We are looking forward to receive your comment about the solution we have proposed. Thank you in advance
PU FESS Datathon case solution
#I. Holt-Winters exponential smoothing forecasting method
#Set working directory. In advance please copy the input file price_data1442.csv in C:\RData directory.
setwd(“C:/RData”)
#Read data
df <- read.csv(“price_data1442.csv”)
#Data structure
str(df)
#Select only one column: price (#4 in the input file price_data1442.csv)
#
mydata <- df[, c(4)]
str(mydata)
mydataforecasts <- HoltWinters(mydata, beta=FALSE, gamma=FALSE)
mydataforecasts
#
#Result:
#Holt-Winters exponential smoothing without trend and without seasonal component.
#
#Call:
#HoltWinters(x = mydata, beta = FALSE, gamma = FALSE)
#Smoothing parameters:
# alpha: 0.999935
# beta : FALSE
# gamma: FALSE
#
#Coefficients:
# [,1]
#a 8507.579
#
# => HoltWinters – Not suitable for forecasting this cryptocurrency.
#
Note: With this method we forecast the price value for every obesrvation made.
#
#II.
#To use Holt’s exponential smoothing to fit a predictive model for currency values, we type:
mydataforecasts <- HoltWinters(mydata, gamma=FALSE)
mydataforecasts
#
#Holt-Winters exponential smoothing with trend and without seasonal component.
#
#Call:
#HoltWinters(x = mydata, gamma = FALSE)
#
#Smoothing parameters:
#alpha: 1
# beta : 0.0002208343
# gamma: FALSE
#
#Coefficients:
# [,1]
#a 8507.5800000
#b -0.2355879
mydataforecasts$SSE
#[1] 32634137
# Again the mistake is very big => this type of Holt-Winters method is not suitable for forecasting prices of cryptocurrency.
#III
https://www.youtube.com/watch?v=N_XKJqr-VT4&ab_channel=MichaelGrogan
install.packages(“ggplot2”)
library(ggplot2)
setwd(“C:/RData”)
df <- read.csv(“price_data1442.csv”)
str(df)
#Select only two columns for our data frame: time (column #2) and price (column #4)
mydata <- df[, c(2,4)]
str(mydata)
#
#Trend, seasonality and error extraction
tsprice <- mydata[ ,2] #ts data
decomposed <- decompose(tsprice, type=”mult”)
#Error in decompose(tsprice, type = “mult”): time series has no or less than 2 periods
decomposed <- decompose(tsprice, type=”additive”)
#Error in decompose(tsprice, type = “additive”): time series has no or less than 2 periods
#plot(decomposed)
#stlRes <-stl(tsprice, s.window=”periodic”)
# Decomposition is impossible.
#Correlation tests
cor.test(mydata$price, as.numeric(mydata$time), method=c(“pearson”, “kendall”, “spearman”))
# cor = -0.3958351
#The correlation is missing.
#De-trend the crypto time series
trModel <- lm(mydata$price ~ mydata$time)
plot(resid(trModel), type=”l”) # resid(trModel) contains the de-trended series.
trModel
#Result:
#Call:
#lm(formula = mydata$price ~ mydata$time)
#Coefficients:
#(Intercept) mydata$time
# 10942.3519 -0.1233
#
#Auto ARIMA forecasting
install.packages(“MASS”)
install.packages(“tseries”)
install.packages(“forecast”)
library(“MASS”)
library(“tseries”)
library(“forecast”)
#Just test without conversion
currencyprice <- mydata$price[2:13758]
currencyprice
# ACF, PACF, Dickey-Fuller Test
acf(currencyprice, lag.max=20)
pacf(currencyprice, lag.max=20)
# The stationarity is missing.
#Convert to log format and plot
lncurrencyprice=log(mydata$price[2:13758])
lncurrencyprice
# ACF, PACF, Dickey-Fuller Test
acf(lncurrencyprice, lag.max=20)
pacf(lncurrencyprice, lag.max=20)
# The stationarity is missing.
#Log difference
diffcurrencyprice =diff(lncurrencyprice$price[2:13758], 1)
diffcurrencyprice
acf(currencyprice, lag.max=20)
pacf(currencyprice, lag.max=20)
# The stationarity is missing again.
#Difference
diffcurrencyprice =diff(mydata$price[2:13758], 1)
diffcurrencyprice
acf(currencyprice, lag.max=20)
pacf(currencyprice, lag.max=20)
# The stationarity is missing again.
adf.test(mydata$price[2:13758]) # p-value = 0.04
adf.test(diffcurrencyprice) # p-value = 0.01, where p-value < 0.05 indicates the ts is stationary
plot(diffcurrencyprice, type=’l’)
#Time series, ACF, PACF, Dickey-Fuller Test
pricearima <- diffcurrencyprice$price[2:13758]
pricearima<- ts(pricearima)
acf(pricearima, lag.max=20)
pacf(pricearima, lag.max=20)
# => the stationary model is not appropriate to our data
#Auto ARIMA forecast in case of stationarity
fitcurrency <- auto.arima(pricearima)
fitcurrency
forecastedvalues=forecast(fitcurrency, h=1440)
forecastedvalues
plot(forecastedvalues)
forecastedvaluesextracted=as.numeric(forecastedvalues$mean)
forecastedvaluesextracted
#Percentage error
df <- data.frame(mydata$price[13759:15199, forecastedvaluesextracted)
col_headings <- c(“Actual price”, “Forecasted price”)
names(df) <- col_headings
attach(df)
percentage_error =((df$’Actual price’ – df$’Forecasted price’)/ (df$’Actual price’))
percentage_error
mean(percentage_error)
#Ljung-Box
Box.test(fitcurrency$resid, lag=5, type=”Ljung-Box”)
Box.test(fitcurrency$resid, lag=10, type=”Ljung-Box”)
Box.test(fitcurrency$resid, lag=15, type=”Ljung-Box”)
One thought on “Forecast the price of cryptocurrency”
Thanks to Mrs Jane who helped me recover all my lost funds in forex and crypto trading including my profits, i was a big fool giving my hard earned money to greedy and scammed brokers, but am so happy i met Jane silva a honest woman who helped me recover all my lost funds, and she also gave me the right signal and platform to trade with, now am able to make $5000 weekly, and am very happy, that is why i cant stop testifying about her, if you are out there still experiencing failure trading in binary option, crypto and forex trading or you want to recover your lost funds trading in binary/ forex trade i will advice you to reach out to
her via email on janesilva0727 gmail com