## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----setup-------------------------------------------------------------------- suppressPackageStartupMessages(require(dplyr)) suppressPackageStartupMessages(require(tidyquant)) suppressPackageStartupMessages(require(FinanceGraphs)) ## ----echo=FALSE--------------------------------------------------------------- knitr::opts_chunk$set(fig.width = 7) options(datatable.print.keys=FALSE, datatable.print.class=FALSE) ## ----------------------------------------------------------------------------- head(eqtypx,1) fgts_dygraph(eqtypx, title="Stock Prices", ylab="Adjusted Close") ## ----------------------------------------------------------------------------- fgts_dygraph(eqtypx, title="Stock Prices, Date focused", roller=3,dtstartfrac=0.6,splitcols=TRUE) ## ----------------------------------------------------------------------------- fgts_dygraph(eqtypx, title="Stock Prices, highlighted", roller=1, dtwindow="-3y::",hidecols="TLT",hilightcols="IBM",hilightwidth=4, hilightstyle="dashed") ## ----------------------------------------------------------------------------- fgts_dygraph(eqtypx, title="Stock Prices, rebased",hidecols="TLT;EEM", dtstartfrac=0.7, rebase="2025-01-01,120",events="pt,2025-02-01,QQQ,Feb3", annotations="last,linelabel;range,100,120", dylegend = "never", bg_opts="grid,none") ## ----------------------------------------------------------------------------- toplot <- reerdta[REGION=="LATAM",.(cop=sum(value*(variable=="COL")), peers=mean(value),peers.lo=min(value),peers.hi=max(value)),by=.(date)] head(toplot,2) ## ----------------------------------------------------------------------------- fgts_dygraph(toplot,title="COP REER vs Latam peers",ylab="Price", roller=1,hilightcols="cop",hilightwidth=4,annotations="last,linevalue") ## ----------------------------------------------------------------------------- toplot <- eqtypx |> left_join(select(eqtyrtn,date,p_TLT_QQQ), by="date") |> filter(!is.na(p_TLT_QQQ)) |> transmute(date,TLT, TLT.lo=TLT * case_when( p_TLT_QQQ<0.04 ~ 0.9,.default=1) ) fgts_dygraph(toplot,title="TLT with significant relationship to QQQ",ylab="Price",xlab="shaded areas significant",roller=1) ## ----------------------------------------------------------------------------- smalldta <- eqtypx |> filter(date>=as.Date("2023-01-01")) |> select(date,EEM,TLT) fgts_dygraph(smalldta,title="With Precanned Events",ylab="Price",rebase=",100",roller=1, events="doi,regm;doi,fedmoves") ## ----------------------------------------------------------------------------- fg_get_dates_of_interest("fedmoves|regm") |> group_by(category) |> slice_tail(n=2) ## ----------------------------------------------------------------------------- newdoi <-data.frame(category="fedmoves",eventid="F:-50",DT_ENTRY=as.Date("6/16/2026",format="%m/%d/%Y")) fg_update_dates_of_interest(newdoi) fg_get_dates_of_interest("fedmoves") |> dplyr::slice_tail(n=2) |> as.data.frame() ## ----------------------------------------------------------------------------- fgts_dygraph(smalldta,title="With Seasonals",rebase=",100",roller=1,dylegend="never",dtstartfrac=0.7, events="seasonal,optexp,mo|qtr;dt,XMAS,2025-12-25") ## ----------------------------------------------------------------------------- fgts_dygraph(smalldta,title="With Turning Points",rebase=",100",roller=1,events="tp,7") ## ----------------------------------------------------------------------------- toplot <- rbind(eqtypx_melt |> filter(variable=="QQQ"), consumer_sent |> transmute(date,variable=symbol,value=price)) fgts_dygraph(toplot,title="With consumer sentiment",splitcols="UMCSENT",stepcols="UMCSENT",roller=5, event_ds = fg_cut_to_events(consumer_sent,center="zscore")) ## ----------------------------------------------------------------------------- suppressPackageStartupMessages(require(data.table)) ma_signal<-eqtypx[,.(date,sig=cut(frollmean(EEM,5)-frollmean(EEM,20), c(-10,-0.5,0.5,10),labels=c("long","flat","short")),EEM)] tail(ma_signal,3) ## ----------------------------------------------------------------------------- colormap <- fg_get_aes("tradesignal")[,.(sig=variable,value)] colormap ## ----------------------------------------------------------------------------- fgts_dygraph(eqtypx[,.(date,EEM)],dtstartfrac=0.6,roller=1,title="5/20 MA positions", event_ds=fg_signal_to_events(ma_signal,colormap)) ## ----------------------------------------------------------------------------- suppressPackageStartupMessages(require(tidyquant)) all_events <- rbindlist(list(fg_tq_divs(c("IBM")),earnings_ibm |> fg_av_earnings() )) fgts_dygraph(eqtypx[,.(date,QQQ,IBM)],title="With earnings and divs",dtstartfrac=0.8,event_ds=all_events) ## ----------------------------------------------------------------------------- head(ratings_db,3) fgts_dygraph(nomfxdta |> filter(variable=="COP"),title="COP with Ratings", event_ds=fg_ratingsEvents("COLOM",ratings_db,agency="S.P")) ## ----------------------------------------------------------------------------- suppressPackageStartupMessages(require(timetk)) suppressPackageStartupMessages(require(forecast)) suppressPackageStartupMessages(require(sweep)) fcst_eqtypx <- tk_ts(eqtypx[,.(date,QQQ)]) |> ets() |> forecast::forecast(h=60) |> sweep::sw_sweep(timetk_idx=TRUE) head( fcst_in <- fg_sweep(fcst_eqtypx) ,3) ## ----------------------------------------------------------------------------- fgts_dygraph(eqtypx[,.(date,IBM,QQQ)],title="Rebased With Forecasts",roller=1,dtstartfrac=0.6,rebase="2024-01-01,100",forecast_ds=fcst_in) ## ----------------------------------------------------------------------------- mycolors <-fg_get_aes("lines",n_max=4) mycolors ## ----------------------------------------------------------------------------- suppressPackageStartupMessages(require(RColorBrewer)) newcolors <- mycolors |> mutate(value = rev(RColorBrewer::brewer.pal(8,"GnBu"))[1:4]) fg_update_aes(newcolors, persist=TRUE ) fg_get_aes("lines",n_max=4) ## ----------------------------------------------------------------------------- fgts_dygraph(eqtypx, title="Stock Prices, new colors", annotations="last,label",rebase=",100",bg_opts="grid,none") ## ----------------------------------------------------------------------------- fg_update_line_colors(c("gray30","gray30","red","gray30")) fgts_dygraph(eqtypx, title="Stock Prices, line colors", annotations="last,label",rebase=",100",bg_opts="grid,none") ## ----------------------------------------------------------------------------- fg_reset_to_default_state("color") fg_get_aesstring("lines",n_max=2) ## ----------------------------------------------------------------------------- newdoi <-data.frame(category="fedmoves",eventid="F:-50",DT_ENTRY=as.Date("6/16/2026",format="%m/%d/%Y")) fg_update_dates_of_interest(newdoi) tail(fg_get_dates_of_interest("fedmoves"),2) |> as.data.frame() ## ----------------------------------------------------------------------------- recindic <- recession_indic |> transmute(date,isrec=(price>7)) colormap <- data.frame(isrec=c(FALSE,TRUE),color=c("white","pink"),eventid=c("","Recession")) newevents <- fg_signal_to_events( recindic, colormap |> mutate(category="FREDPREC")) fg_update_dates_of_interest(newevents) fgts_dygraph(eqtypx, title="Stock Prices, w/ Recession Events", events="doi,FREDPREC",rebase=",100",bg_opts="grid,none") ## ----------------------------------------------------------------------------- filepath <- system.file("extdata", "selic_historical_rates.csv", package = "FinanceGraphs") selic<-data.table::fread(filepath,skip=1,select=c(2,5),col.names=c("date","tgt")) selic<-selic[,let(DT_ENTRY=as.Date(date,format="%m/%d/%Y"))][order(DT_ENTRY)][,move:=c(0,diff(tgt,1))] newevents <- selic[,.(category="COPOM",eventid=format(tgt,digits=2), DT_ENTRY,color=c("blue","grey","red")[sign(move)+2])] fg_update_dates_of_interest(newevents[!color=="grey"]) # Only add real moves tail(newevents,2) ## ----------------------------------------------------------------------------- fgts_dygraph(filter(nomfxdta,variable=="BRL"),title="BRL w/ COPOM",dtstartfrac=0.6,events="doi,COPOM") ## ----------------------------------------------------------------------------- fg_reset_to_default_state("all")