DiscoverR-bloggersEnsemble Model for Gold Futures
Ensemble Model for Gold Futures

Ensemble Model for Gold Futures

Update: 2025-09-05
Share

Description




[This article was first published on DataGeeek, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)

Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.


Goldman Sachs stated that if the FED’s reputation suffers, and investors move only a small portion of their bond holdings into gold, the price of gold could rise to nearly $5,000 an ounce.





But at least now, the ensemble model indicates that gold prices are in an overbought zone.





<figure><button class="lightbox-trigger" type="button">
<svg fill="none" height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg">
<path d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" fill="#fff">
</svg>
</button></figure>



Source code:





library(tidymodels)
library(tidyverse)
library(modeltime)
library(modeltime.ensemble)
library(timetk)

#Gold Futures
df_gold <-
tq_get("GC=F") %>%
select(date, close) %>%
drop_na()


#Splitting
splits <-
time_series_split(df_gold,
assess = "30 days",
cumulative = TRUE)

df_train <- training(splits)
df_test <- testing(splits)

#Recipe
rec_spec <-
recipe(close ~ ., data = df_train) %>%
step_timeseries_signature(date) %>%
step_fourier(date, period = 365, K = 5) %>%
step_dummy(all_nominal_predictors(), one_hot = TRUE) %>%
step_zv(all_predictors()) %>%
step_normalize(all_numeric_predictors())


#Model 1 - Auto ARIMA
mod_spec_arima <-
arima_reg() %>%
set_engine("auto_arima")

wflw_fit_arima <-
workflow() %>%
add_model(mod_spec_arima) %>%
add_recipe(rec_spec %>% step_rm(all_predictors(), -date)) %>%
fit(df_train)

#Model 2 - Prophet
mod_spec_prophet <-
prophet_reg() %>%
set_engine("prophet")

wflw_fit_prophet <-
workflow() %>%
add_model(mod_spec_prophet) %>%
add_recipe(rec_spec) %>%
fit(df_train)

#Model 3: Boosted ARIMA
mod_arima_boosted <-
arima_boost(
min_n = 2,
learn_rate = 0.015
) %>%
set_engine(engine = "auto_arima_xgboost")

wflw_fit_arima_boost <-
workflow() %>%
add_model(mod_arima_boosted) %>%
add_recipe(rec_spec) %>%
fit(df_train)

#Modeltime Workflow for Ensemble Forecasting
df_models <-
modeltime_table(
wflw_fit_arima,
wflw_fit_prophet,
wflw_fit_arima_boost
)


#Make an Ensemble
ensemble_fit <-
df_models %>%
ensemble_average(type = "mean")

#Calibration
calibration_tbl <-
modeltime_table(
ensemble_fit
) %>%
modeltime_calibrate(df_test)


#Accuracy
calibration_tbl %>%
modeltime_accuracy() %>%
table_modeltime_accuracy(
.interactive = TRUE
)


#Predictive intervals
calibration_tbl %>%
modeltime_forecast(actual_data = df_test,
new_data = df_test) %>%
plot_modeltime_forecast(.interactive = FALSE,
.legend_show = FALSE,
.line_size = 1.5,
.color_lab = "",
.title = "Gold Futures") +
labs(subtitle = "Predictive Intervals of the Ensemble Model") +
scale_y_continuous(labels = scales::label_currency()) +
scale_x_date(labels = scales::label_date("%b %d"),
date_breaks = "4 days") +
theme_minimal(base_family = "Roboto Slab", base_size = 16) +
theme(plot.subtitle = ggtext::element_markdown(face = "bold"),
plot.title = element_text(face = "bold"),
plot.background = element_rect(fill = "azure", color = "azure"),
panel.background = element_rect(fill = "snow", color = "snow"),
axis.text = element_text(face = "bold"),
axis.text.x = element_text(angle = 45,
hjust = 1,
vjust = 1),
legend.position = "none")




To leave a comment for the author, please follow the link and comment on their blog: DataGeeek.



R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.


Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Continue reading: Ensemble Model for Gold Futures
Comments 
00:00
00:00
x

0.5x

0.8x

1.0x

1.25x

1.5x

2.0x

3.0x

Sleep Timer

Off

End of Episode

5 Minutes

10 Minutes

15 Minutes

30 Minutes

45 Minutes

60 Minutes

120 Minutes

Ensemble Model for Gold Futures

Ensemble Model for Gold Futures

Selcuk Disci