Oczywiście zbierasz dane z rynków kryptowalut, odkąd zaimplementowałeś własną wersję systemu obiektowego, który opracowaliśmy w poprzednim rozdziale, prawda? Tylko żartuję. Jeśli tak, to prawdopodobnie nie są wystarczające dane do tego, co zrobimy w tym rozdziale, więc oto mały fragment kodu, który będzie symulował dwie serie czasowe dla ceny Bitcoin i Litecoin w dolarach amerykańskich. Struktura danych jest podobna do tej zastosowanej w poprzedniej części, dzięki czemu kod, który tu opracowujemy, jest przydatny również w tym systemie. Nie będziemy zagłębiać się zbytnio w działanie tej funkcji, ponieważ w tym momencie powinno być dla Ciebie jasne, z wyjątkiem wskazania, że używamy funkcji time_to_timesamp(. TomeStamp(), którą opracowaliśmy poprzednio , i że funkcja simulate_prices()wykorzystuje model kwadratowy górę symulacji ARIMA. Spójrzmy na następujący kod:
source(„../chapter-08/cryptourrencies/utilities/time-stamp.R”_
library(lubridate)
N <- 60 * 24 * 365
simulate_market <- funtion(name, symbol. now, n , base, sd, x ) {
dates <- seq(now- minutes(n-1), nowm by = „min”)
ts <- unlist(lapply(lapply (
dates, times_to_timestamp.TimeStamp), unclass))
price_usd <- simulate_prices(n, base, sd, x)
data <- data.frame(timestamp – ts, prie_usd = price_usd)
data$name <- name
data$symbol <- symbol
return(data)
simulate_prices <- funtion(n, base, sd, x) {
ts <- arima.sim(list(15, 15,15(, n = n , sd = sd)
quadratic_model <- base + (x-1) * base / (n^2) * (1:n)^2
return(as.numeri(ts+quadrati_model))
now <- Sys.time()
btc <- simulate_market(„Bitcoin, „BTC”, now, N , 8000, 8 ,2)
bltc <- simulate_market(„Litecoin, „LTC”, now, N , 80, 8 ,2)
data <- rbind(bt, ltc)
data <- data[order(data$timestamp) , ]
write.sv(data, „./data.csv”, row.names = FALSE)
Zauważ, że parametry użyte do wywołania funkcji simulate_market() starają się przypominać co widać obecnie w cenach Bitcoin i Litecoin, ale pamiętaj, że jest to bardzo prosty model, więc nie oczekuj, że będzie on zachowywał się jak rzeczywiste szeregi czasowe cen tych aktywów. Na koniec symulujemy 525 600 obserwacji dla każdego zasobu, co w przybliżeniu odpowiada liczbie minut w roku (N <- 60 * 248 365, która obejmuje sekundy na godzinę, godziny dziennie i dni w roku). Oznacza to, że symulujemy dane minuta po minucie. Aby zwizualizować ceny Bitcoinów, które symulowaliśmy, możesz użyć następującego kodu. Po prostu tworzy jeden wykres, który wykorzystuje próbkę 1000 elementów przez cały rok (więcej niż to jest niepotrzebne, ponieważ nie będziesz w stanie dostrzec więcej punktów, a to spowolni obliczenia); tworzony jest również inny wykres, który pokazuje efekt powiększenia danych do pierwszej godziny:
s <- sample(1:nrow(btc), 1000)
plot(btc[s[order(s)], „price_usd”], xlab = „Minutes”, ylab=”Price” , xaxt = ‘n’)
title(main=”Bitcoin price simulation for 1 year”)
lines(btc[s[order(s)], „proce_usd”)
plot(btc[1:60, „price_usd”], xlab = „Minutes”, ylab=”Price” , xaxt = ‘n’)
title(main=” Bitcoin price simulation for 1 hour”)
lines(btc[1:60, „price_usd”[)
Jak widać, obserwując całoroczną symulację, obserwuje się silny trend wzrostowy, ale jeśli powiększysz do mniejszego przedziału czasowego, zobaczysz sporą różnicę cen, która pozwala na użyteczne implementacje SMA