Files
OpenBB/assets/js/bdda79f8.5e8bc480.js
github-actions[bot] 6e23638b6e deploy: d825f98fc1
2022-11-29 02:36:39 +00:00

1 line
68 KiB
JavaScript

"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[22342],{3905:(t,e,a)=>{a.d(e,{Zo:()=>m,kt:()=>s});var r=a(67294);function n(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function i(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,r)}return a}function l(t){for(var e=1;e<arguments.length;e++){var a=null!=arguments[e]?arguments[e]:{};e%2?i(Object(a),!0).forEach((function(e){n(t,e,a[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(a)):i(Object(a)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(a,e))}))}return t}function p(t,e){if(null==t)return{};var a,r,n=function(t,e){if(null==t)return{};var a,r,n={},i=Object.keys(t);for(r=0;r<i.length;r++)a=i[r],e.indexOf(a)>=0||(n[a]=t[a]);return n}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r<i.length;r++)a=i[r],e.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(n[a]=t[a])}return n}var g=r.createContext({}),o=function(t){var e=r.useContext(g),a=e;return t&&(a="function"==typeof t?t(e):l(l({},e),t)),a},m=function(t){var e=o(t.components);return r.createElement(g.Provider,{value:e},t.children)},d={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},h=r.forwardRef((function(t,e){var a=t.components,n=t.mdxType,i=t.originalType,g=t.parentName,m=p(t,["components","mdxType","originalType","parentName"]),h=o(a),s=n,k=h["".concat(g,".").concat(s)]||h[s]||d[s]||i;return a?r.createElement(k,l(l({ref:e},m),{},{components:a})):r.createElement(k,l({ref:e},m))}));function s(t,e){var a=arguments,n=e&&e.mdxType;if("string"==typeof t||n){var i=a.length,l=new Array(i);l[0]=h;var p={};for(var g in e)hasOwnProperty.call(e,g)&&(p[g]=e[g]);p.originalType=t,p.mdxType="string"==typeof t?t:n,l[1]=p;for(var o=2;o<i;o++)l[o]=a[o];return r.createElement.apply(null,l)}return r.createElement.apply(null,a)}h.displayName="MDXCreateElement"},59237:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>g,contentTitle:()=>l,default:()=>d,frontMatter:()=>i,metadata:()=>p,toc:()=>o});var r=a(87462),n=(a(67294),a(3905));const i={title:"Forecast"},l=void 0,p={unversionedId:"guides/intros/forecast",id:"guides/intros/forecast",title:"Forecast",description:"The Forecast module provides programmatic access to the same commands found in the OpenBB Terminal Forecast menu. The extensive library of models, built on top of the u8darts library, are easily tuned with hyper-parameters.",source:"@site/content/sdk/guides/intros/forecast.md",sourceDirName:"guides/intros",slug:"/guides/intros/forecast",permalink:"/sdk/guides/intros/forecast",draft:!1,editUrl:"https://github.com/OpenBB-finance/OpenBBTerminal/edit/main/website/content/sdk/guides/intros/forecast.md",tags:[],version:"current",frontMatter:{title:"Forecast"},sidebar:"tutorialSidebar",previous:{title:"ETF",permalink:"/sdk/guides/intros/etf"},next:{title:"Forex",permalink:"/sdk/guides/intros/forex"}},g={},o=[{value:"How to Use",id:"how-to-use",level:2},{value:"Examples",id:"examples",level:2},{value:"Import Statements",id:"import-statements",level:3},{value:"Loading Data",id:"loading-data",level:3},{value:"Plot",id:"plot",level:3},{value:"Theta",id:"theta",level:3},{value:"Feature Engineering",id:"feature-engineering",level:2},{value:"EMA",id:"ema",level:3},{value:"RSI",id:"rsi",level:3},{value:"STO",id:"sto",level:3},{value:"Exploration",id:"exploration",level:2},{value:"Rename",id:"rename",level:3},{value:"Delete",id:"delete",level:3},{value:"Models",id:"models",level:2},{value:"regr_chart",id:"regr_chart",level:3},{value:"Combine",id:"combine",level:3},{value:"Corr",id:"corr",level:3},{value:"Hyper-Parameters",id:"hyper-parameters",level:2}],m={toc:o};function d(t){let{components:e,...a}=t;return(0,n.kt)("wrapper",(0,r.Z)({},m,a,{components:e,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"The Forecast module provides programmatic access to the same commands found in the OpenBB Terminal Forecast menu. The extensive library of models, built on top of the ",(0,n.kt)("a",{parentName:"p",href:"https://unit8co.github.io/darts/"},"u8darts")," library, are easily tuned with hyper-parameters."),(0,n.kt)("h2",{id:"how-to-use"},"How to Use"),(0,n.kt)("p",null,"The Forecast menu was designed specifically for the CLI application, and consequently, the operation of these commands do not mirror the workflow of the OpenBB Terminal. This will be improved in the future to more closely resemble it, and this guide will highlight some notable differences."),(0,n.kt)("p",null,"Commands within the ",(0,n.kt)("inlineCode",{parentName:"p"},"forecast")," module are representatives from three broad categories:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Exploration"),(0,n.kt)("li",{parentName:"ul"},"Feature Engineering"),(0,n.kt)("li",{parentName:"ul"},"Model")),(0,n.kt)("p",null,"Each command is listed below with a short description. A majority of functions will also have an additional syntax, ",(0,n.kt)("inlineCode",{parentName:"p"},"_chart"),", for displaying the generated charts inline. For ease of use, we recommend using the ",(0,n.kt)("inlineCode",{parentName:"p"},"_chart")," version for Model functions."),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"left"},"Path"),(0,n.kt)("th",{parentName:"tr",align:"center"},"Type"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Description"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.atr"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Feature Engineering"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Add a Column for the Average True Range")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.autoces"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Model"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Automatic Complex Exponential Smoothing Model")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.autoets"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Model"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Automatic ETS (Error, Trend, Seasonality) Model")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.autoselect"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Model"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Automatically Selects the Best Statistical Model From AutoARIMA, AutoETS, AutoCES, MSTL, etc.")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.brnn"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Model"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Block Recurrent Neural Network (RNN, LSTM, GRU) (feat. Past covariates)")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.clean"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Exploration"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Fill or Drop NaN Values")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.combine"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Exploration"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Combine Columns From Different Datasets")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.corr"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Exploration"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Correlation Coefficients Between Columns of a Dataset")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.delete"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Exploration"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Delete Columns From a Dataset")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.delta"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Feature Engineering"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Add a Column for % Change")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.desc"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Exploration"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Show Descriptive Statistics for a Dataset")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.ema"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Feature Engineering"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Add a Column for Exponentially Weighted Moving Average")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.expo"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Model"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Probabilistic Exponential Smoothing")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.export"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Export"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Export a Processed Dataset as a CSV or XLSX File")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.linregr"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Model"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Probabilistic Linear Regression (feat. Past covariates and Explainability)")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.load"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Import"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Import a Local CSV or XLSX File")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.mom"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Feature Engineering"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Add a Column for Momentum")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.nbeats"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Model"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Neural Bayesian Estimation (feat. Past covariates)")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.nhits"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Model"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Neural Hierarchical Interpolation (feat. Past covariates)")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.plot"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Exploration"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Plots Specific Columns From a Loaded Dataset")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.regr"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Model"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Regression (feat. Past covariates and Explainability)")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.rename"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Exploration"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Rename Columns in a Dataset")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.rnn"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Model"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Probabilistic Recurrent Neural Network (RNN, LSTM, GRU)")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.roc"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Feature Engineering"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Add a Column for Rate of Change")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.rsi"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Feature Engineering"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Add a Column for Relative Strength Index")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.rwd"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Model"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Random Walk with Drift Model")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.season"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Exploration"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Plot Seasonality of a Column in a Dataset")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.seasonalnaive"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Model"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Seasonal Naive Model")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.signal"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Feature Engineering"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Add a Column for Price Signal (Short vs. Long Term)")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.sto"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Feature Engineering"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Add a Column for Stochastic Oscillator %K and %D")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.tcn"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Model"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Temporal Convolutional Neural Network (feat. Past covariates)")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.tft"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Model"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Temporal Fusion Transformer Network(feat. Past covariates)")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.theta"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Model"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Theta Method")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"openbb.forecast.trans"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Model"),(0,n.kt)("td",{parentName:"tr",align:"right"},"Transformer Network (feat. Past covariates)")))),(0,n.kt)("p",null,"Alteratively, the contents of the menu is printed with:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"help(openbb.forecast)\n")),(0,n.kt)("p",null,"Type hints and code completion will be activated upon entering the ",(0,n.kt)("inlineCode",{parentName:"p"},"."),", after, ",(0,n.kt)("inlineCode",{parentName:"p"},"openbb.forecast"),". The first step is always going to involve loading some data. Let's walk through a procedure for procuring a DataFrame with some examples below."),(0,n.kt)("h2",{id:"examples"},"Examples"),(0,n.kt)("h3",{id:"import-statements"},"Import Statements"),(0,n.kt)("p",null,"The examples provided below will assume that the following import block is included at the beginning of the Python script or Notebook file:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"from openbb_terminal.sdk import openbb\nimport pandas as pd\n# %matplotlib inline (uncomment if using a Jupyter Interactive Terminal or Notebook)\n")),(0,n.kt)("h3",{id:"loading-data"},"Loading Data"),(0,n.kt)("p",null,"This library of models are specifically for time-series, and consequently, the data must follow some formatting guidelines:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"If the index is not a date, it must be sequentially ordered and evenly spaced - i.e., it can't be indexed like: ",(0,n.kt)("inlineCode",{parentName:"li"},"[1,2,5,11,50]")),(0,n.kt)("li",{parentName:"ul"},"A datetime index must be spaced evenly - i.e., monthly data is better handled when the interval date is the first of the month."),(0,n.kt)("li",{parentName:"ul"},"If the datetime index is a weekly interval, use a Monday-Friday format."),(0,n.kt)("li",{parentName:"ul"},"Intraday data is not officially supported at this time.")),(0,n.kt)("p",null,"The equities market revolves around the S&P 500, so let's take a look at the ETF, ",(0,n.kt)("inlineCode",{parentName:"p"},"SPY"),", from inception:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"spy = openbb.stocks.load('SPY', start_date = '1990-01-01')\n")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-console"},"Loading Daily data for SPY with starting period 1993-01-29.\n")),(0,n.kt)("p",null,"The printed message indicates that the first day of available data is not the same as the requested start date. ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/SPDR_S%26P_500_Trust_ETF"},"Wikipedia")," shows the fund was launched on January 22, 1993. The product was marketed and sold to liquidity providers prior to trading on a public exchange, so this DataFrame is pretty darn close to the inception date. We can confirm that this data arrived as expected by printing the created DataFrame."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"spy.head(5)\n")),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"left"},"date"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Open"),(0,n.kt)("th",{parentName:"tr",align:"right"},"High"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Low"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Close"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Adj Close"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Volume"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"1993-01-29 00:00:00"),(0,n.kt)("td",{parentName:"tr",align:"right"},"43.9688"),(0,n.kt)("td",{parentName:"tr",align:"right"},"43.9688"),(0,n.kt)("td",{parentName:"tr",align:"right"},"43.75"),(0,n.kt)("td",{parentName:"tr",align:"right"},"43.9375"),(0,n.kt)("td",{parentName:"tr",align:"right"},"25.334"),(0,n.kt)("td",{parentName:"tr",align:"right"},"1.0032e+06")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"1993-02-01 00:00:00"),(0,n.kt)("td",{parentName:"tr",align:"right"},"43.9688"),(0,n.kt)("td",{parentName:"tr",align:"right"},"44.25"),(0,n.kt)("td",{parentName:"tr",align:"right"},"43.9688"),(0,n.kt)("td",{parentName:"tr",align:"right"},"44.25"),(0,n.kt)("td",{parentName:"tr",align:"right"},"25.5142"),(0,n.kt)("td",{parentName:"tr",align:"right"},"480500")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"1993-02-02 00:00:00"),(0,n.kt)("td",{parentName:"tr",align:"right"},"44.2188"),(0,n.kt)("td",{parentName:"tr",align:"right"},"44.375"),(0,n.kt)("td",{parentName:"tr",align:"right"},"44.125"),(0,n.kt)("td",{parentName:"tr",align:"right"},"44.3438"),(0,n.kt)("td",{parentName:"tr",align:"right"},"25.5683"),(0,n.kt)("td",{parentName:"tr",align:"right"},"201300")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"1993-02-03 00:00:00"),(0,n.kt)("td",{parentName:"tr",align:"right"},"44.4062"),(0,n.kt)("td",{parentName:"tr",align:"right"},"44.8438"),(0,n.kt)("td",{parentName:"tr",align:"right"},"44.375"),(0,n.kt)("td",{parentName:"tr",align:"right"},"44.8125"),(0,n.kt)("td",{parentName:"tr",align:"right"},"25.8385"),(0,n.kt)("td",{parentName:"tr",align:"right"},"529400")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"1993-02-04 00:00:00"),(0,n.kt)("td",{parentName:"tr",align:"right"},"44.9688"),(0,n.kt)("td",{parentName:"tr",align:"right"},"45.0938"),(0,n.kt)("td",{parentName:"tr",align:"right"},"44.4688"),(0,n.kt)("td",{parentName:"tr",align:"right"},"45"),(0,n.kt)("td",{parentName:"tr",align:"right"},"25.9467"),(0,n.kt)("td",{parentName:"tr",align:"right"},"531500")))),(0,n.kt)("h3",{id:"plot"},"Plot"),(0,n.kt)("p",null,"The data can also be inspected visually, ",(0,n.kt)("inlineCode",{parentName:"p"},"openbb.forecast.plot"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"openbb.forecast.plot(data=spy, columns = ['Adj Close'])\n")),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://user-images.githubusercontent.com/85772166/203671651-e7d5776f-c2ab-4a2a-8600-a5f6b6f2aa93.png",alt:"openbb.forecast.plot",title:"openbb.forecast.plot"})),(0,n.kt)("h3",{id:"theta"},"Theta"),(0,n.kt)("p",null,"Data consisting of a numeric value and a datetime index is sufficient enough for feeding the inputs to a forecast model. One important distinction between the Terminal and SDK is that the ",(0,n.kt)("inlineCode",{parentName:"p"},"target_column"),' must be explicitly declared when using the SDK, if it is not labeled as "close". It is case-sensitive.'),(0,n.kt)("p",null,"To use a forecast model with default parameters, all that is required in the syntax is:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"The name of the dataset."),(0,n.kt)("li",{parentName:"ul"},"The target column for the forecast.")),(0,n.kt)("p",null,"A basic, default, syntax will look like:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"openbb.forecast.theta_chart(data = spy, target_column = 'Adj Close')\n")),(0,n.kt)("p",null,"The default number of days to predict for all models is five. If the interval of the time-series is not daily, days equates to the interval of the index."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-console"},"Theta Model obtains MAPE: 1.91%\n")),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://user-images.githubusercontent.com/85772166/203897200-f2d3938c-f3a9-4ee4-bf67-0398d8d3bce6.png",alt:"openbb.forecast.theta_chart"})),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"left"},"Datetime"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Prediction"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-24"),(0,n.kt)("td",{parentName:"tr",align:"right"},"402.62")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-25"),(0,n.kt)("td",{parentName:"tr",align:"right"},"402.92")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-28"),(0,n.kt)("td",{parentName:"tr",align:"right"},"403.14")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-29"),(0,n.kt)("td",{parentName:"tr",align:"right"},"403.38")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-30"),(0,n.kt)("td",{parentName:"tr",align:"right"},"403.59")))),(0,n.kt)("p",null,"Refer to the docstrings to learn about each model's unique set of arguments."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"help(openbb.forecast.theta_chart)\n")),(0,n.kt)("h2",{id:"feature-engineering"},"Feature Engineering"),(0,n.kt)("p",null,"This category of functions are for adding columns to a dataset that are the results of calculations, like technical and quantitative analysis. Individual parameters will vary slightly between functions, but syntax construction will be similar."),(0,n.kt)("h3",{id:"ema"},"EMA"),(0,n.kt)("p",null,'A moving average provides an indication of the trend of the price movement by cutting down the amount of "noise" in a price chart.'),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-console"},"help(openbb.forecast.ema)\n\n Parameters\n ----------\n dataset : pd.DataFrame\n The dataset you wish to clean\n target_column : str\n The column you wish to add the EMA to\n period : int\n Time Span\n\n Returns\n -------\n pd.DataFrame\n Dataframe with added EMA column\n")),(0,n.kt)("p",null,"The example below adds a column to the ",(0,n.kt)("inlineCode",{parentName:"p"},"spy")," dataset for the 150-day exponential moving average of the adjusted-close price."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"spy = openbb.forecast.ema(spy, target_column = 'Adj Close', period = 150)\n\nspy.tail(3)\n")),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"right"}),(0,n.kt)("th",{parentName:"tr",align:"left"},"date"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Open"),(0,n.kt)("th",{parentName:"tr",align:"right"},"High"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Low"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Close"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Adj Close"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Volume"),(0,n.kt)("th",{parentName:"tr",align:"right"},"EMA_150"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"right"},"7508"),(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-21"),(0,n.kt)("td",{parentName:"tr",align:"right"},"394.64"),(0,n.kt)("td",{parentName:"tr",align:"right"},"395.82"),(0,n.kt)("td",{parentName:"tr",align:"right"},"392.66"),(0,n.kt)("td",{parentName:"tr",align:"right"},"394.59"),(0,n.kt)("td",{parentName:"tr",align:"right"},"394.59"),(0,n.kt)("td",{parentName:"tr",align:"right"},"51243200"),(0,n.kt)("td",{parentName:"tr",align:"right"},"394.923")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"right"},"7509"),(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-22"),(0,n.kt)("td",{parentName:"tr",align:"right"},"396.63"),(0,n.kt)("td",{parentName:"tr",align:"right"},"400.07"),(0,n.kt)("td",{parentName:"tr",align:"right"},"395.15"),(0,n.kt)("td",{parentName:"tr",align:"right"},"399.9"),(0,n.kt)("td",{parentName:"tr",align:"right"},"399.9"),(0,n.kt)("td",{parentName:"tr",align:"right"},"60429000"),(0,n.kt)("td",{parentName:"tr",align:"right"},"394.989")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"right"},"7510"),(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-23"),(0,n.kt)("td",{parentName:"tr",align:"right"},"399.55"),(0,n.kt)("td",{parentName:"tr",align:"right"},"402.93"),(0,n.kt)("td",{parentName:"tr",align:"right"},"399.31"),(0,n.kt)("td",{parentName:"tr",align:"right"},"402.42"),(0,n.kt)("td",{parentName:"tr",align:"right"},"402.42"),(0,n.kt)("td",{parentName:"tr",align:"right"},"68161400"),(0,n.kt)("td",{parentName:"tr",align:"right"},"395.087")))),(0,n.kt)("p",null,"Additional columns can be added for each desired period length of the calculation:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"spy = openbb.forecast.ema(spy, target_column = 'Adj Close', period = 20)\n\nspy.tail(3)\n")),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"right"}),(0,n.kt)("th",{parentName:"tr",align:"left"},"date"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Open"),(0,n.kt)("th",{parentName:"tr",align:"right"},"High"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Low"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Close"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Adj Close"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Volume"),(0,n.kt)("th",{parentName:"tr",align:"right"},"EMA_150"),(0,n.kt)("th",{parentName:"tr",align:"right"},"EMA_20"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"right"},"7508"),(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-21"),(0,n.kt)("td",{parentName:"tr",align:"right"},"394.64"),(0,n.kt)("td",{parentName:"tr",align:"right"},"395.82"),(0,n.kt)("td",{parentName:"tr",align:"right"},"392.66"),(0,n.kt)("td",{parentName:"tr",align:"right"},"394.59"),(0,n.kt)("td",{parentName:"tr",align:"right"},"394.59"),(0,n.kt)("td",{parentName:"tr",align:"right"},"51243200"),(0,n.kt)("td",{parentName:"tr",align:"right"},"394.923"),(0,n.kt)("td",{parentName:"tr",align:"right"},"387.237")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"right"},"7509"),(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-22"),(0,n.kt)("td",{parentName:"tr",align:"right"},"396.63"),(0,n.kt)("td",{parentName:"tr",align:"right"},"400.07"),(0,n.kt)("td",{parentName:"tr",align:"right"},"395.15"),(0,n.kt)("td",{parentName:"tr",align:"right"},"399.9"),(0,n.kt)("td",{parentName:"tr",align:"right"},"399.9"),(0,n.kt)("td",{parentName:"tr",align:"right"},"60429000"),(0,n.kt)("td",{parentName:"tr",align:"right"},"394.989"),(0,n.kt)("td",{parentName:"tr",align:"right"},"388.443")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"right"},"7510"),(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-23"),(0,n.kt)("td",{parentName:"tr",align:"right"},"399.55"),(0,n.kt)("td",{parentName:"tr",align:"right"},"402.93"),(0,n.kt)("td",{parentName:"tr",align:"right"},"399.31"),(0,n.kt)("td",{parentName:"tr",align:"right"},"402.42"),(0,n.kt)("td",{parentName:"tr",align:"right"},"402.42"),(0,n.kt)("td",{parentName:"tr",align:"right"},"68161400"),(0,n.kt)("td",{parentName:"tr",align:"right"},"395.087"),(0,n.kt)("td",{parentName:"tr",align:"right"},"389.775")))),(0,n.kt)("p",null,"The process can be repeated as required."),(0,n.kt)("h3",{id:"rsi"},"RSI"),(0,n.kt)("p",null,"Similar to ",(0,n.kt)("inlineCode",{parentName:"p"},"ema"),", ",(0,n.kt)("inlineCode",{parentName:"p"},"rsi")," adds a column for the Relative Strength Index. The three variables are the same here as above. A period of ten equates to ten trading days, or two-weeks."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"spy = openbb.forecast.rsi(spy, target_column = 'Adj Close', period = 10)\n\nspy.tail(3)\n")),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"right"}),(0,n.kt)("th",{parentName:"tr",align:"left"},"date"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Open"),(0,n.kt)("th",{parentName:"tr",align:"right"},"High"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Low"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Close"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Adj Close"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Volume"),(0,n.kt)("th",{parentName:"tr",align:"right"},"EMA_150"),(0,n.kt)("th",{parentName:"tr",align:"right"},"EMA_20"),(0,n.kt)("th",{parentName:"tr",align:"right"},"RSI_10_Adj Close"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"right"},"7508"),(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-21"),(0,n.kt)("td",{parentName:"tr",align:"right"},"394.64"),(0,n.kt)("td",{parentName:"tr",align:"right"},"395.82"),(0,n.kt)("td",{parentName:"tr",align:"right"},"392.66"),(0,n.kt)("td",{parentName:"tr",align:"right"},"394.59"),(0,n.kt)("td",{parentName:"tr",align:"right"},"394.59"),(0,n.kt)("td",{parentName:"tr",align:"right"},"51243200"),(0,n.kt)("td",{parentName:"tr",align:"right"},"394.923"),(0,n.kt)("td",{parentName:"tr",align:"right"},"387.237"),(0,n.kt)("td",{parentName:"tr",align:"right"},"58.837")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"right"},"7509"),(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-22"),(0,n.kt)("td",{parentName:"tr",align:"right"},"396.63"),(0,n.kt)("td",{parentName:"tr",align:"right"},"400.07"),(0,n.kt)("td",{parentName:"tr",align:"right"},"395.15"),(0,n.kt)("td",{parentName:"tr",align:"right"},"399.9"),(0,n.kt)("td",{parentName:"tr",align:"right"},"399.9"),(0,n.kt)("td",{parentName:"tr",align:"right"},"60429000"),(0,n.kt)("td",{parentName:"tr",align:"right"},"394.989"),(0,n.kt)("td",{parentName:"tr",align:"right"},"388.443"),(0,n.kt)("td",{parentName:"tr",align:"right"},"63.7145")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"right"},"7510"),(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-23"),(0,n.kt)("td",{parentName:"tr",align:"right"},"399.55"),(0,n.kt)("td",{parentName:"tr",align:"right"},"402.93"),(0,n.kt)("td",{parentName:"tr",align:"right"},"399.31"),(0,n.kt)("td",{parentName:"tr",align:"right"},"402.42"),(0,n.kt)("td",{parentName:"tr",align:"right"},"402.42"),(0,n.kt)("td",{parentName:"tr",align:"right"},"68161400"),(0,n.kt)("td",{parentName:"tr",align:"right"},"395.087"),(0,n.kt)("td",{parentName:"tr",align:"right"},"389.775"),(0,n.kt)("td",{parentName:"tr",align:"right"},"65.8484")))),(0,n.kt)("p",null,"Let's add another column for a twelve-week period:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"spy = openbb.forecast.rsi(spy, target_column = 'Adj Close', period = 60)\n\nspy.tail(3)\n")),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"right"}),(0,n.kt)("th",{parentName:"tr",align:"left"},"date"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Open"),(0,n.kt)("th",{parentName:"tr",align:"right"},"High"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Low"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Close"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Adj Close"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Volume"),(0,n.kt)("th",{parentName:"tr",align:"right"},"EMA_150"),(0,n.kt)("th",{parentName:"tr",align:"right"},"EMA_20"),(0,n.kt)("th",{parentName:"tr",align:"right"},"RSI_10_Adj Close"),(0,n.kt)("th",{parentName:"tr",align:"right"},"RSI_60_Adj Close"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"right"},"7508"),(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-21"),(0,n.kt)("td",{parentName:"tr",align:"right"},"394.64"),(0,n.kt)("td",{parentName:"tr",align:"right"},"395.82"),(0,n.kt)("td",{parentName:"tr",align:"right"},"392.66"),(0,n.kt)("td",{parentName:"tr",align:"right"},"394.59"),(0,n.kt)("td",{parentName:"tr",align:"right"},"394.59"),(0,n.kt)("td",{parentName:"tr",align:"right"},"51243200"),(0,n.kt)("td",{parentName:"tr",align:"right"},"394.923"),(0,n.kt)("td",{parentName:"tr",align:"right"},"387.237"),(0,n.kt)("td",{parentName:"tr",align:"right"},"58.837"),(0,n.kt)("td",{parentName:"tr",align:"right"},"50.5453")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"right"},"7509"),(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-22"),(0,n.kt)("td",{parentName:"tr",align:"right"},"396.63"),(0,n.kt)("td",{parentName:"tr",align:"right"},"400.07"),(0,n.kt)("td",{parentName:"tr",align:"right"},"395.15"),(0,n.kt)("td",{parentName:"tr",align:"right"},"399.9"),(0,n.kt)("td",{parentName:"tr",align:"right"},"399.9"),(0,n.kt)("td",{parentName:"tr",align:"right"},"60429000"),(0,n.kt)("td",{parentName:"tr",align:"right"},"394.989"),(0,n.kt)("td",{parentName:"tr",align:"right"},"388.443"),(0,n.kt)("td",{parentName:"tr",align:"right"},"63.7145"),(0,n.kt)("td",{parentName:"tr",align:"right"},"51.4456")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"right"},"7510"),(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-23"),(0,n.kt)("td",{parentName:"tr",align:"right"},"399.55"),(0,n.kt)("td",{parentName:"tr",align:"right"},"402.93"),(0,n.kt)("td",{parentName:"tr",align:"right"},"399.31"),(0,n.kt)("td",{parentName:"tr",align:"right"},"402.42"),(0,n.kt)("td",{parentName:"tr",align:"right"},"402.42"),(0,n.kt)("td",{parentName:"tr",align:"right"},"68161400"),(0,n.kt)("td",{parentName:"tr",align:"right"},"395.087"),(0,n.kt)("td",{parentName:"tr",align:"right"},"389.775"),(0,n.kt)("td",{parentName:"tr",align:"right"},"65.8484"),(0,n.kt)("td",{parentName:"tr",align:"right"},"51.8685")))),(0,n.kt)("h3",{id:"sto"},"STO"),(0,n.kt)("p",null,"Some of the Feature Engineering commands require multiple columns, ",(0,n.kt)("inlineCode",{parentName:"p"},"openbb.forecast.sto")," is one of them."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"help(openbb.forecast.sto)\n")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-console"},"Stochastic Oscillator %K and %D : A stochastic oscillator is a momentum indicator comparing a particular closing price of a security to a range of its prices over a certain period of time. %K and %D are slow and fast indicators.\n\nRequires Low/High/Close columns.\nNote: This will drop first rows equal to period due to how this metric is calculated.\n\nParameters\n----------\nclose_column: str\n Column name for closing price\nhigh_column: str\n Column name for high price\nlow_column: str\n Column name for low price\ndataset : pd.DataFrame\n The dataset you wish to calculate for\nperiod : int\n Span\n\nReturns\n -------\npd.DataFrame\n Dataframe with added STO K & D columns\n")),(0,n.kt)("p",null,"The results of these calculations appends the dataset with two additional columns."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"spy = openbb.forecast.sto(\n dataset = spy,\n high_column='High',\n low_column = 'Low',\n close_column = 'Adj Close',\n period = 20\n)\n\nspy.tail(3)\n")),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"left"},"date"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Open"),(0,n.kt)("th",{parentName:"tr",align:"right"},"High"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Low"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Close"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Adj Close"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Volume"),(0,n.kt)("th",{parentName:"tr",align:"right"},"EMA_150"),(0,n.kt)("th",{parentName:"tr",align:"right"},"EMA_20"),(0,n.kt)("th",{parentName:"tr",align:"right"},"RSI_10_Adj Close"),(0,n.kt)("th",{parentName:"tr",align:"right"},"RSI_60_Adj Close"),(0,n.kt)("th",{parentName:"tr",align:"right"},"SO%K_20"),(0,n.kt)("th",{parentName:"tr",align:"right"},"SO%D_20"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-21 00:00:00"),(0,n.kt)("td",{parentName:"tr",align:"right"},"394.64"),(0,n.kt)("td",{parentName:"tr",align:"right"},"395.82"),(0,n.kt)("td",{parentName:"tr",align:"right"},"392.66"),(0,n.kt)("td",{parentName:"tr",align:"right"},"394.59"),(0,n.kt)("td",{parentName:"tr",align:"right"},"394.59"),(0,n.kt)("td",{parentName:"tr",align:"right"},"5.12432e+07"),(0,n.kt)("td",{parentName:"tr",align:"right"},"394.923"),(0,n.kt)("td",{parentName:"tr",align:"right"},"387.237"),(0,n.kt)("td",{parentName:"tr",align:"right"},"58.837"),(0,n.kt)("td",{parentName:"tr",align:"right"},"50.5453"),(0,n.kt)("td",{parentName:"tr",align:"right"},"76.969"),(0,n.kt)("td",{parentName:"tr",align:"right"},"79.1396")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-22 00:00:00"),(0,n.kt)("td",{parentName:"tr",align:"right"},"396.63"),(0,n.kt)("td",{parentName:"tr",align:"right"},"400.07"),(0,n.kt)("td",{parentName:"tr",align:"right"},"395.15"),(0,n.kt)("td",{parentName:"tr",align:"right"},"399.9"),(0,n.kt)("td",{parentName:"tr",align:"right"},"399.9"),(0,n.kt)("td",{parentName:"tr",align:"right"},"6.0429e+07"),(0,n.kt)("td",{parentName:"tr",align:"right"},"394.989"),(0,n.kt)("td",{parentName:"tr",align:"right"},"388.443"),(0,n.kt)("td",{parentName:"tr",align:"right"},"63.7145"),(0,n.kt)("td",{parentName:"tr",align:"right"},"51.4456"),(0,n.kt)("td",{parentName:"tr",align:"right"},"92.8102"),(0,n.kt)("td",{parentName:"tr",align:"right"},"83.6814")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-23 00:00:00"),(0,n.kt)("td",{parentName:"tr",align:"right"},"399.55"),(0,n.kt)("td",{parentName:"tr",align:"right"},"402.93"),(0,n.kt)("td",{parentName:"tr",align:"right"},"399.31"),(0,n.kt)("td",{parentName:"tr",align:"right"},"402.42"),(0,n.kt)("td",{parentName:"tr",align:"right"},"402.42"),(0,n.kt)("td",{parentName:"tr",align:"right"},"6.81614e+07"),(0,n.kt)("td",{parentName:"tr",align:"right"},"395.087"),(0,n.kt)("td",{parentName:"tr",align:"right"},"389.775"),(0,n.kt)("td",{parentName:"tr",align:"right"},"65.8484"),(0,n.kt)("td",{parentName:"tr",align:"right"},"51.8685"),(0,n.kt)("td",{parentName:"tr",align:"right"},"98.5062"),(0,n.kt)("td",{parentName:"tr",align:"right"},"89.4285")))),(0,n.kt)("h2",{id:"exploration"},"Exploration"),(0,n.kt)("p",null,"As made evident by the composite dataset created, the name of a column can be undesirable. The exploration functions provide some tools for managing and maintaining the dataset."),(0,n.kt)("h3",{id:"rename"},"Rename"),(0,n.kt)("p",null,"Column names can be altered with ",(0,n.kt)("inlineCode",{parentName:"p"},"openbb.forecast.rename"),". One column can be changed:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"spy = openbb.forecast.rename(spy, 'RSI_10_Adj Close', 'RSI_10')\n\nspy.tail(1)\n")),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"left"},"date"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Open"),(0,n.kt)("th",{parentName:"tr",align:"right"},"High"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Low"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Close"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Adj Close"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Volume"),(0,n.kt)("th",{parentName:"tr",align:"right"},"EMA_150"),(0,n.kt)("th",{parentName:"tr",align:"right"},"EMA_20"),(0,n.kt)("th",{parentName:"tr",align:"right"},"RSI_10"),(0,n.kt)("th",{parentName:"tr",align:"right"},"RSI_60_Adj Close"),(0,n.kt)("th",{parentName:"tr",align:"right"},"SO%K_20"),(0,n.kt)("th",{parentName:"tr",align:"right"},"SO%D_20"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-23 00:00:00"),(0,n.kt)("td",{parentName:"tr",align:"right"},"399.55"),(0,n.kt)("td",{parentName:"tr",align:"right"},"402.93"),(0,n.kt)("td",{parentName:"tr",align:"right"},"399.31"),(0,n.kt)("td",{parentName:"tr",align:"right"},"402.42"),(0,n.kt)("td",{parentName:"tr",align:"right"},"402.42"),(0,n.kt)("td",{parentName:"tr",align:"right"},"6.81614e+07"),(0,n.kt)("td",{parentName:"tr",align:"right"},"395.087"),(0,n.kt)("td",{parentName:"tr",align:"right"},"389.775"),(0,n.kt)("td",{parentName:"tr",align:"right"},"65.8484"),(0,n.kt)("td",{parentName:"tr",align:"right"},"51.8685"),(0,n.kt)("td",{parentName:"tr",align:"right"},"98.5062"),(0,n.kt)("td",{parentName:"tr",align:"right"},"89.4285")))),(0,n.kt)("p",null,"Let's rename a few more to make working with them a little easier, this time using the Python-method:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"spy.rename(columns = {\n 'RSI_60_Adj Close': 'RSI_60',\n 'SO%K_20': 'STO_Slow',\n 'SO%D_20': 'STO_Fast'}, inplace = True)\n")),(0,n.kt)("p",null,"Verify the names were updated as intended with a console print:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-console"},"spy.columns\n\n Index(['Open', 'High', 'Low', 'Close', 'Adj Close', 'Volume', 'EMA_150', 'EMA_20', 'RSI_10', 'RSI_60', STO_Slow', 'STO_Fast'], dtype='object')\n")),(0,n.kt)("h3",{id:"delete"},"Delete"),(0,n.kt)("p",null,"Say, for example, that we would like to eliminate the ",(0,n.kt)("inlineCode",{parentName:"p"},"Close")," column in favour of the adjusted-close values. First, delete the desired column:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"openbb.forecast.delete(spy, 'Close')\n")),(0,n.kt)("p",null,"Then, let's rename, 'Adj Close', as, 'Close', and verify the results:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"spy = openbb.forecast.rename(spy, 'Adj Close', 'Close')\n\nspy.tail(1)\n")),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"left"},"date"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Open"),(0,n.kt)("th",{parentName:"tr",align:"right"},"High"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Low"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Close"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Volume"),(0,n.kt)("th",{parentName:"tr",align:"right"},"EMA_150"),(0,n.kt)("th",{parentName:"tr",align:"right"},"EMA_20"),(0,n.kt)("th",{parentName:"tr",align:"right"},"RSI_10"),(0,n.kt)("th",{parentName:"tr",align:"right"},"RSI_60"),(0,n.kt)("th",{parentName:"tr",align:"right"},"STO_Slow"),(0,n.kt)("th",{parentName:"tr",align:"right"},"STO_Fast"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-23 00:00:00"),(0,n.kt)("td",{parentName:"tr",align:"right"},"399.55"),(0,n.kt)("td",{parentName:"tr",align:"right"},"402.93"),(0,n.kt)("td",{parentName:"tr",align:"right"},"399.31"),(0,n.kt)("td",{parentName:"tr",align:"right"},"402.42"),(0,n.kt)("td",{parentName:"tr",align:"right"},"6.81614e+07"),(0,n.kt)("td",{parentName:"tr",align:"right"},"395.087"),(0,n.kt)("td",{parentName:"tr",align:"right"},"389.775"),(0,n.kt)("td",{parentName:"tr",align:"right"},"65.8484"),(0,n.kt)("td",{parentName:"tr",align:"right"},"51.8685"),(0,n.kt)("td",{parentName:"tr",align:"right"},"98.5062"),(0,n.kt)("td",{parentName:"tr",align:"right"},"89.4285")))),(0,n.kt)("h2",{id:"models"},"Models"),(0,n.kt)("p",null,"Some models are more taxing on system resources than others, and some take considerably longer to run. Changes to parameters can have dramatic effects on the forecast, be sure to make note of the changes while tuning the hyper-parameters. There are also two distinct types of models:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Those with the ability to target past-covariates."),(0,n.kt)("li",{parentName:"ul"},"Those without the ability to target past-covarites.")),(0,n.kt)("p",null,"We currently recommend using the ",(0,n.kt)("inlineCode",{parentName:"p"},"_chart")," version for every model."),(0,n.kt)("p",null,"Models of the former type are:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"linregr")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"regr")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"brnn")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"nbeats")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"nhits")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"tcn")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"trans")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"tft"))),(0,n.kt)("p",null,"All models default to ",(0,n.kt)("inlineCode",{parentName:"p"},"past-covariates = None"),", and targets for past covariates are selected with a comma-separated list of names, as demonstrated below."),(0,n.kt)("h3",{id:"regr_chart"},"regr_chart"),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"},"openbb.forecast.regr_chart")," is a regression model which can forecast with, or without, past-covariates. The first example below is without."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"openbb.forecast.regr_chart(spy, target_column = 'Close')\n")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-console"},"Predicting Regression for 5 days\n\nRegression model obtains MAPE: 1.90%\n")),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://user-images.githubusercontent.com/85772166/203897290-330de1a6-056b-475b-9206-44658ebe5239.png",alt:"openbb.forecast.regr_chart",title:"openbb.forecast.regr_chart"})),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"left"},"Datetime"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Prediction"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-24"),(0,n.kt)("td",{parentName:"tr",align:"right"},"403.06")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-25"),(0,n.kt)("td",{parentName:"tr",align:"right"},"401.95")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-28"),(0,n.kt)("td",{parentName:"tr",align:"right"},"402.69")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-29"),(0,n.kt)("td",{parentName:"tr",align:"right"},"402.55")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-30"),(0,n.kt)("td",{parentName:"tr",align:"right"},"399.84")))),(0,n.kt)("p",null,"Then, targeting both EMA columns as past-covariates:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"openbb.forecast.regr_chart(spy, target_column = 'Close', past_covariates= \"EMA_150,EMA_20\")\n")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-console"},"Warning: when using past covariates n_predict must equal output_chunk_length. We have changed your output_chunk_length to 5 to match your n_predict\n\nCovariate #0: EMA_150\nCovariate #1: EMA_20\n\nPredicting Regression for 5 days\n\nRegression model obtains MAPE: 1.85%\n")),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://user-images.githubusercontent.com/85772166/203897358-1111b8f6-e907-4ac6-a97d-327c87e07f1e.png",alt:"openbb.forecast.regr_chart",title:"openbb.forecast.regr_chart"})),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"left"},"Datetime"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Prediction"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-24"),(0,n.kt)("td",{parentName:"tr",align:"right"},"403.20")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-25"),(0,n.kt)("td",{parentName:"tr",align:"right"},"401.95")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-28"),(0,n.kt)("td",{parentName:"tr",align:"right"},"402.15")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-29"),(0,n.kt)("td",{parentName:"tr",align:"right"},"400.99")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-30"),(0,n.kt)("td",{parentName:"tr",align:"right"},"398.01")))),(0,n.kt)("p",null,"Adding these past-covariates has improved the MAPE by 0.05%, which is a good thing; like golf, a lower score is better."),(0,n.kt)("p",null,'A second chart displayed by a regression model is for "explainability", SHAP values. It is an illustration of which past-covariates have the most impact on the model output.'),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://user-images.githubusercontent.com/85772166/203897584-37898fee-611f-47c1-abd0-23e2ef21613a.png",alt:"Explainability",title:"Explainability"})),(0,n.kt)("p",null,"Targeting the ",(0,n.kt)("inlineCode",{parentName:"p"},"Volume")," column as a past-covariate reveals it to be negatively impacting the forecast, in this particular instance and application."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"openbb.forecast.regr_chart(spy, target_column = 'Close', past_covariates=\"Volume\")\n")),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://user-images.githubusercontent.com/85772166/203897625-9a71960a-29a1-40e1-8c5e-2950bddd1a9c.png",alt:"openbb.forecast.regr_chart",title:"openbb.forecast.regr_chart"})),(0,n.kt)("h3",{id:"combine"},"Combine"),(0,n.kt)("p",null,"Let's add another potential past-covariate to the dataset by taking the adjusted-close value of ",(0,n.kt)("inlineCode",{parentName:"p"},"XOM"),", and using ",(0,n.kt)("inlineCode",{parentName:"p"},"combine")," to join the column with our existing DataFrame."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"xom = openbb.stocks.load(\"XOM\", start_date = '1993-01-29')\nspy = openbb.forecast.combine(df1 = spy, df2 = xom, column = 'Adj Close', dataset = 'XOM' )\nspy.rename(columns = {'XOM_Adj Close': 'XOM'}, inplace = True)\n")),(0,n.kt)("h3",{id:"corr"},"Corr"),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"},"openbb.forecast.corr")," calculates the correlation between all columns in a dataset."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"openbb.forecast.corr(spy)\n")),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"left"}),(0,n.kt)("th",{parentName:"tr",align:"right"},"Open"),(0,n.kt)("th",{parentName:"tr",align:"right"},"High"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Low"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Close"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Volume"),(0,n.kt)("th",{parentName:"tr",align:"right"},"EMA_150"),(0,n.kt)("th",{parentName:"tr",align:"right"},"EMA_20"),(0,n.kt)("th",{parentName:"tr",align:"right"},"RSI_10_Adj Close"),(0,n.kt)("th",{parentName:"tr",align:"right"},"RSI_60"),(0,n.kt)("th",{parentName:"tr",align:"right"},"STO_Slow"),(0,n.kt)("th",{parentName:"tr",align:"right"},"STO_Fast"),(0,n.kt)("th",{parentName:"tr",align:"right"},"XOM"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"Open"),(0,n.kt)("td",{parentName:"tr",align:"right"},"1"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.999928"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.999907"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.996296"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.102601"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.990844"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.995626"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.0485853"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.0685473"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.631412"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.635814"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.725111")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"High"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.999928"),(0,n.kt)("td",{parentName:"tr",align:"right"},"1"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.999845"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.996388"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.105301"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.991371"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.995819"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.0468199"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.0648085"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.63298"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.637221"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.724806")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"Low"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.999907"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.999845"),(0,n.kt)("td",{parentName:"tr",align:"right"},"1"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.996337"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.0988936"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.990313"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.995387"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.0548303"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.0740719"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.630126"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.634485"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.725668")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"Close"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.996296"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.996388"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.996337"),(0,n.kt)("td",{parentName:"tr",align:"right"},"1"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.115854"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.995506"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.99931"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.0544362"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.0708491"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.62215"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.626235"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.725945")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"Volume"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.102601"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.105301"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.0988936"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.115854"),(0,n.kt)("td",{parentName:"tr",align:"right"},"1"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.143554"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.125322"),(0,n.kt)("td",{parentName:"tr",align:"right"},"-0.255959"),(0,n.kt)("td",{parentName:"tr",align:"right"},"-0.3392"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.387554"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.384561"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.470041")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"EMA_150"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.990844"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.991371"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.990313"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.995506"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.143554"),(0,n.kt)("td",{parentName:"tr",align:"right"},"1"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.997117"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.00795085"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.00294935"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.63139"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.635393"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.737946")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"EMA_20"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.995626"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.995819"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.995387"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.99931"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.125322"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.997117"),(0,n.kt)("td",{parentName:"tr",align:"right"},"1"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.0295848"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.0530582"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.621829"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.625925"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.726945")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"RSI_10_Adj Close"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.0485853"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.0468199"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.0548303"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.0544362"),(0,n.kt)("td",{parentName:"tr",align:"right"},"-0.255959"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.00795085"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.0295848"),(0,n.kt)("td",{parentName:"tr",align:"right"},"1"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.707723"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.00550661"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.00475805"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.0316687")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"RSI_60"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.0685473"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.0648085"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.0740719"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.0708491"),(0,n.kt)("td",{parentName:"tr",align:"right"},"-0.3392"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.00294935"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.0530582"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.707723"),(0,n.kt)("td",{parentName:"tr",align:"right"},"1"),(0,n.kt)("td",{parentName:"tr",align:"right"},"-0.203022"),(0,n.kt)("td",{parentName:"tr",align:"right"},"-0.201585"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.00254247")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"STO_Slow"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.631412"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.63298"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.630126"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.62215"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.387554"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.63139"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.621829"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.00550661"),(0,n.kt)("td",{parentName:"tr",align:"right"},"-0.203022"),(0,n.kt)("td",{parentName:"tr",align:"right"},"1"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.991231"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.609652")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"STO_Fast"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.635814"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.637221"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.634485"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.626235"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.384561"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.635393"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.625925"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.00475805"),(0,n.kt)("td",{parentName:"tr",align:"right"},"-0.201585"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.991231"),(0,n.kt)("td",{parentName:"tr",align:"right"},"1"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.613626")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"XOM"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.725111"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.724806"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.725668"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.725945"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.470041"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.737946"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.726945"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.0316687"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.00254247"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.609652"),(0,n.kt)("td",{parentName:"tr",align:"right"},"0.613626"),(0,n.kt)("td",{parentName:"tr",align:"right"},"1")))),(0,n.kt)("p",null,"Let's see how Exxon impacts our previous forecast."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},'openbb.forecast.regr_chart(data = spy, target_column = "Close", dataset_name = \'SPY\', past_covariates = "EMA_20,EMA_150,XOM")\n')),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-console"},"Warning: when using past covariates n_predict must equal output_chunk_length. We have changed your output_chunk_length to 5 to match your n_predict\n\nCovariate #0: EMA_20\nCovariate #1: EMA_150\nCovariate #2: XOM\n\nPredicting Regression for 5 days\n\nRegression model obtains MAPE: 1.80%\n")),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"left"},"Datetime"),(0,n.kt)("th",{parentName:"tr",align:"right"},"Prediction"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-24"),(0,n.kt)("td",{parentName:"tr",align:"right"},"401.70")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-25"),(0,n.kt)("td",{parentName:"tr",align:"right"},"402.02")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-26"),(0,n.kt)("td",{parentName:"tr",align:"right"},"402.25")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-27"),(0,n.kt)("td",{parentName:"tr",align:"right"},"401.48")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"2022-11-28"),(0,n.kt)("td",{parentName:"tr",align:"right"},"397.16")))),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://user-images.githubusercontent.com/85772166/203897681-e2bfb592-c832-477a-8f24-2604e5ed8254.png",alt:"openbb.forecast.regr_chart",title:"openbb.forecast.regr_chart"})),(0,n.kt)("p",null,"To include pan/zoom functionality for charts, substitute ",(0,n.kt)("inlineCode",{parentName:"p"},"%matplotlib widget")," in the import statement block. The code block below will recreate the DataFrame as shown in the examples above:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"from openbb_terminal.sdk import openbb\nimport pandas as pd\n# %matplotlib widget (uncomment if using a Jupyter Interactive Terminal or Notebook)\n\nspy:pd.DataFrame = []\n\nspy = openbb.stocks.load('SPY', start_date = '1990-01-01')\n\nspy = openbb.forecast.ema(spy, target_column = 'Adj Close', period = 150)\n\nspy = openbb.forecast.ema(spy, target_column = 'Adj Close', period = 20)\n\nspy = openbb.forecast.rsi(spy, target_column = 'Adj Close', period = 10)\n\nspy = openbb.forecast.rsi(spy, target_column = 'Adj Close', period = 60)\n\nspy = openbb.forecast.sto(\n dataset = spy,\n high_column='High',\n low_column = 'Low',\n close_column = 'Adj Close',\n period = 20\n)\n\nopenbb.forecast.delete(spy, 'Close')\n\nspy.rename(columns = {\n 'Adj Close': 'Close',\n 'RSI_60_Adj Close': 'RSI_10',\n 'RSI_60_Adj Close': 'RSI_60',\n 'SO%K_20': 'STO_Slow',\n 'SO%D_20': 'STO_Fast'}, inplace = True)\n\nxom = openbb.stocks.load(\"XOM\", start_date = '1993-01-29')\nopenbb.forecast.combine(df1 = spy, df2 = xom, column = 'Adj Close', dataset = 'XOM' )\nspy.rename(columns = {'XOM_Adj Close': 'XOM'}, inplace = True)\n\nspy\n")),(0,n.kt)("h2",{id:"hyper-parameters"},"Hyper-Parameters"),(0,n.kt)("p",null,"Hyper-parameters are the fine-tune dials for each model. Refer to the docstrings for the extensive list. The parameters below are the ways in which the regression model can be altered. Each model will be different, and their responses will vary. The demonstrated workflow is a simple way to begin experimenting with the functions. The same general processes can be applied for all models. The purpose of this guide is to help users get going with using the Forecast module, some assembly required."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},'help(openbb.forecast.regr_chart)\n\nHelp on Operation in module openbb_terminal.core.library.operation:\n\n<openbb_terminal.core.library.operation.Operation object>\n Display Regression Forecasting\n\n Parameters\n ----------\n data: Union[pd.Series, pd.DataFrame]\n Input Data\n target_column: str\n Target column to forecast. Defaults to "close".\n dataset_name: str\n The name of the ticker to be predicted\n n_predict: int\n Days to predict. Defaults to 5.\n train_split: float\n Train/val split. Defaults to 0.85.\n past_covariates: str\n Multiple secondary columns to factor in when forecasting. Defaults to None.\n forecast_horizon: int\n Forecast horizon when performing historical forecasting. Defaults to 5.\n output_chunk_length: int\n The length of the forecast of the model. Defaults to 1.\n lags: Union[int, List[int]]\n lagged target values to predict the next time step\n export: str\n Format to export data\n residuals: bool\n Whether to show residuals for the model. Defaults to False.\n forecast_only: bool\n Whether to only show dates in the forecasting range. Defaults to False.\n start_date: Optional[datetime]\n The starting date to perform analysis, data before this is trimmed. Defaults to None.\n end_date: Optional[datetime]\n The ending date to perform analysis, data after this is trimmed. Defaults to None.\n naive: bool\n Whether to show the naive baseline. This just assumes the closing price will be the same\n as the previous day\'s closing price. Defaults to False.\n external_axes: Optional[List[plt.axes]]\n External axes to plot on\n')))}d.isMDXComponent=!0}}]);