mirror of
https://github.com/OpenBB-finance/OpenBB.git
synced 2026-11-09 19:02:19 +00:00
22 lines
117 KiB
HTML
22 lines
117 KiB
HTML
<!doctype html>
|
||
<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-terminal/usage/intros/forecast">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="generator" content="Docusaurus v2.3.1">
|
||
<title data-rh="true">Forecast - Terminal | OpenBB Docs</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://docs.openbb.co/img/banner.png"><meta data-rh="true" name="twitter:image" content="https://docs.openbb.co/img/banner.png"><meta data-rh="true" property="og:url" content="https://docs.openbb.co/terminal/usage/intros/forecast"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Forecast | OpenBB Docs"><meta data-rh="true" name="description" content="An introduction to the OpenBB Terminal's Forecast menu and machine learning toolkit."><meta data-rh="true" property="og:description" content="An introduction to the OpenBB Terminal's Forecast menu and machine learning toolkit."><meta data-rh="true" name="keywords" content="machine learning,statistics,artificial intelligence,deep learning,neural networks,time series,research,feature engineering,hyperparameters,ai,ml,openbb terminal,darts,u8,u8darts,pytorch,regression,linear,models"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://docs.openbb.co/terminal/usage/intros/forecast"><link data-rh="true" rel="alternate" href="https://docs.openbb.co/terminal/usage/intros/forecast" hreflang="en"><link data-rh="true" rel="alternate" href="https://docs.openbb.co/terminal/usage/intros/forecast" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://7D1HQ0IXAS-dsn.algolia.net" crossorigin="anonymous"><link rel="search" type="application/opensearchdescription+xml" title="OpenBB Docs" href="/opensearch.xml">
|
||
|
||
|
||
<link rel="stylesheet" href="/katex/katex.min.css"><link rel="stylesheet" href="/assets/css/styles.9861ba5b.css">
|
||
<link rel="preload" href="/assets/js/runtime~main.9c92d1c8.js" as="script">
|
||
<link rel="preload" href="/assets/js/main.0a6180ed.js" as="script">
|
||
</head>
|
||
<body class="navigation-with-keyboard">
|
||
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"dark")}()</script><div id="__docusaurus">
|
||
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="border-b border-grey-600 lg:px-12 header_docs_terminal navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><div class="flex items-center gap-x-[56px]"><a class="mb-1 md:mb-0 md:ml-0" href="/"><svg viewBox="0 0 170 17" width="170" height="17" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-white"><path d="M106.107 1.889v11.334l-.961-.946-.959-.945-.962-.943-.959-.946-.961-.943-.962-.945-.959-.944-.961-.945-.96-.943-.961-.946-.96-.943-.96-.945H92.66V17H94.582V4.723l.96.943.96.945.961.944.96.945.961.943.959.946.962.943.961.945.959.946.962.943.959.945.961.944.96.945h.961V1.889H106.107ZM137.03 7.557h-1.921V1.889h-11.524V17h15.37V7.546h-1.92l-.005.01Zm-11.524-.946V3.773h7.683v3.78h-7.683V6.61Zm11.524 3.778v4.727h-11.524v-5.67h11.524v.943ZM168.901 7.557h-2.88V1.889h-11.526V0h-1.921v1.889h1.921V17h15.365V7.546l-.959.01Zm-12.485-.946V3.773h7.684v3.78h-7.684V6.61Zm11.526 3.778v4.727h-11.526v-5.67h11.526v.943ZM75.314 1.889H61.867V17H77.23V15.111H63.787V11.332h11.521V9.443H63.788V3.777H77.23V1.89h-1.916ZM13.444 1.889H0V17h15.367V1.889h-1.922Zm0 2.834V15.11H1.918V3.773h11.527v.95ZM44.397 1.889H30.952V17h1.92v-5.666h13.445V1.88h-1.92v.009Zm0 2.834V9.45H32.873V3.773h11.524v.95Z" fill="currentColor"></path></svg></a></div></div><div class="navbar__items navbar__items--right hidden sm:block"><div class="flex items-center"><div class="flex gap-4 mr-12 md:mr-0 ml-4"><button type="button" aria-haspopup="dialog" aria-expanded="false" aria-controls="" data-state="closed" class="bg-grey-900 radix-state-open:text-white hover:border-grey-200 hover:text-grey-200 radix-state-open:border-white border -mt-[0.6px] h-[34px] w-[34px] text-grey-400 border-grey-400 rounded flex items-center justify-center"><svg viewBox="0 0 24 24" width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg" class="w-4 h-4"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></button></div><div class="searchBox_ZlJk"><div class="flex gap-2"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button><a href="https://my.openbb.co/" class="_btn-dark text-xs hover:text-black"><span class="md:hidden">Hub</span><span class="hidden md:inline">OpenBB Hub</span></a></div></div></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav class="menu thin-scrollbar !px-10 text-sm !pb-10 mt-[40px] menu_Y1UP"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--active" aria-expanded="true" href="/terminal">OpenBB Terminal</a><button aria-label="Toggle the collapsible sidebar category 'OpenBB Terminal'" type="button" class="clean-btn menu__caret"></button></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" tabindex="0" href="/terminal/installation">Installation</a><button aria-label="Toggle the collapsible sidebar category 'Installation'" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/terminal/usage/basics">Usage</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/terminal/usage/basics">Basics</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-3 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" tabindex="0" href="/terminal/usage/guides/api-keys">Guides</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-3 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/terminal/usage/intros/alternative">Intros</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-4 menu__list-item"><a class="menu__link" tabindex="0" href="/terminal/usage/intros/alternative">Alternative</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-4 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" tabindex="0" href="/terminal/usage/intros/common">Common Menus</a><button aria-label="Toggle the collapsible sidebar category 'Common Menus'" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-4 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" tabindex="0" href="/terminal/usage/intros/crypto">Cryptocurrency</a><button aria-label="Toggle the collapsible sidebar category 'Cryptocurrency'" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-4 menu__list-item"><a class="menu__link" tabindex="0" href="/terminal/usage/intros/econometrics">Econometrics</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-4 menu__list-item"><a class="menu__link" tabindex="0" href="/terminal/usage/intros/economy">Economy</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-4 menu__list-item"><a class="menu__link" tabindex="0" href="/terminal/usage/intros/etf">ETF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-4 menu__list-item"><a class="menu__link" tabindex="0" href="/terminal/usage/intros/fixedincome">Fixed Income</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-4 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/terminal/usage/intros/forecast">Forecast</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-4 menu__list-item"><a class="menu__link" tabindex="0" href="/terminal/usage/intros/forex">Forex</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-4 menu__list-item"><a class="menu__link" tabindex="0" href="/terminal/usage/intros/futures">Futures</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-4 menu__list-item"><a class="menu__link" tabindex="0" href="/terminal/usage/intros/mutualfunds">Mutual Funds</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-4 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" tabindex="0" href="/terminal/usage/intros/portfolio">Portfolio</a><button aria-label="Toggle the collapsible sidebar category 'Portfolio'" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-4 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" tabindex="0" href="/terminal/usage/intros/stocks">Stocks</a><button aria-label="Toggle the collapsible sidebar category 'Stocks'" type="button" class="clean-btn menu__caret"></button></div></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" tabindex="0" href="/terminal/faqs">FAQs</a><button aria-label="Toggle the collapsible sidebar category 'FAQs'" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" tabindex="0" href="/terminal/reference">Terminal Reference</a><button aria-label="Toggle the collapsible sidebar category 'Terminal Reference'" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" tabindex="0" href="/terminal/changelog/version3_2_1">Changelog</a></div></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" href="/sdk">OpenBB SDK</a><button aria-label="Toggle the collapsible sidebar category 'OpenBB SDK'" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" href="/bot">OpenBB Bot</a><button aria-label="Toggle the collapsible sidebar category 'OpenBB Bot'" type="button" class="clean-btn menu__caret"></button></div></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item"><a class="breadcrumbs__link" itemprop="item" href="/terminal"><span itemprop="name">OpenBB Terminal</span></a><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">Usage</span><meta itemprop="position" content="2"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">Intros</span><meta itemprop="position" content="3"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Forecast</span><meta itemprop="position" content="4"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_bxCs"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Forecast</h1></header><p>The Forecast menu is a machine learning toolkit that provides practitioners with high-level components that can quickly provide state-of-the-art results, be it with with classical or deep learning models, while also providing researchers with low-level components that can be mixed, matched and fine tuned to build new approaches and custom tuned models. Bring in multiple datasets and train machine learning models with unlimited external factors to see how underlying data may change future forecasting predictions and accuracy.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-forecast-menu">The Forecast Menu<a href="#the-forecast-menu" class="hash-link" aria-label="Direct link to The Forecast Menu" title="Direct link to The Forecast Menu"></a></h2><p>The Forecast menu can be called from any location with the command:</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain"> /forecast</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><img loading="lazy" src="https://user-images.githubusercontent.com/85772166/233540050-071524c6-f374-4241-aa31-cf33b7685e22.png" alt="The Forecast Menu" class="img_ev3q"></p><p>There are also methods for entering the menu with a loaded ticker symbol from either of the <a href="https://docs.openbb.co/terminal/usage/intros/crypto" target="_blank" rel="noopener noreferrer"><code>/crypto</code> menu</a> and <a href="https://docs.openbb.co/terminal/usage/intros/stocks" target="_blank" rel="noopener noreferrer"><code>/stocks</code> menu</a></p><p>The menu is divided into sections for:</p><ul><li>Loading Data</li><li>Data Exploration</li><li>Feature Engineering</li><li>Time Series Forecasting</li><li>Anomaly Detection</li><li>Miscellaneous AI Tools</li></ul><p>and the functions within these groups are described in the following sections.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="loading-data">Loading Data<a href="#loading-data" class="hash-link" aria-label="Direct link to Loading Data" title="Direct link to Loading Data"></a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="with-the-load-command">With the Load Command<a href="#with-the-load-command" class="hash-link" aria-label="Direct link to With the Load Command" title="Direct link to With the Load Command"></a></h4><p>If the Forecast menu has not been entered directly through the <a href="https://docs.openbb.co/terminal/usage/intros/crypto" target="_blank" rel="noopener noreferrer"><code>/crypto</code></a> or <a href="https://docs.openbb.co/terminal/usage/intros/stocks" target="_blank" rel="noopener noreferrer"><code>/stocks</code></a> menus, a dataset must be loaded before commencing any work. Use the <code>load</code> command to open one from a CSV file placed in the OpenBBUserData folder. The paths where the auto completion engine is looking for files is printed on the screen directly above the <code>load</code> command, <code>Looking for data in:</code></p><p><img loading="lazy" src="https://user-images.githubusercontent.com/85772166/233540104-2aad880e-c077-448a-9aff-9d2f18baf19e.png" alt="Loading Data" class="img_ev3q"></p><p>Use the following syntax to load a file and name a dataset, substituting <code>vix_daily</code> with the name of the file.</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">load --file vix_daily.csv --alias vix</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>To refresh the screen, enter: <code>?</code></p><p>The dataset will be listed under the <code>load</code> command and display the column names within it.</p><p><img loading="lazy" src="https://user-images.githubusercontent.com/85772166/233540197-0222d0a6-6f08-42e3-9072-a248eeec6f53.png" alt="Loading From a File" class="img_ev3q"></p><p>Repeat the process until all desired datasets have been loaded.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="via-the-stockscrypto-menus">Via the Stocks/Crypto Menus<a href="#via-the-stockscrypto-menus" class="hash-link" aria-label="Direct link to Via the Stocks/Crypto Menus" title="Direct link to Via the Stocks/Crypto Menus"></a></h4><p>Use the <code>load</code> command, according to the nuances of each menu. For example's sake, and to match the starting date of the previously loaded file, it will look like:</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">/stocks/load SPY --start 1997-01-01/forecast</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Combine these two methods an unlimited number of times for building a more complex model and forecast.</p><p><img loading="lazy" src="https://user-images.githubusercontent.com/85772166/233540295-a7711fd8-992a-4561-b202-1b02a9a4aded.png" alt="Load From Stocks Menu" class="img_ev3q"></p><p>With some data loaded, the first series of tools are for inspecting, managing, and exporting the sets.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="exploration">Exploration<a href="#exploration" class="hash-link" aria-label="Direct link to Exploration" title="Direct link to Exploration"></a></h3><p>The exploration functions are listed in the table below, along with a short description.</p><table><thead><tr><th align="left">Function</th><th align="right">Description</th></tr></thead><tbody><tr><td align="left">clean</td><td align="right">Clean a dataset by filling or dropping NaNs.</td></tr><tr><td align="left">combine</td><td align="right">Combine columns from different datasets.</td></tr><tr><td align="left">corr</td><td align="right">Plot the correlation coefficients for dataset features.</td></tr><tr><td align="left">delete</td><td align="right">Delete columns from dataset.</td></tr><tr><td align="left">desc</td><td align="right">Show descriptive statistics of a dataset.</td></tr><tr><td align="left">export</td><td align="right">Export a processed dataset.</td></tr><tr><td align="left">plot</td><td align="right">Plot a specific columns of a loaded dataset.</td></tr><tr><td align="left">rename</td><td align="right">Rename columns from dataset.</td></tr><tr><td align="left">season</td><td align="right">Plot the seasonality for a dataset column.</td></tr><tr><td align="left">setndays</td><td align="right">Set the default number of days to forecast.</td></tr><tr><td align="left">show</td><td align="right">Show a portion of a loaded dataset.</td></tr></tbody></table><h4 class="anchor anchorWithStickyNavbar_LWe7" id="combine">Combine<a href="#combine" class="hash-link" aria-label="Direct link to Combine" title="Direct link to Combine"></a></h4><p>When running a model, all targeted columns must be within the same dataset. Use the <code>combine</code> command to accomplish this by merging one column with another dataset.</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">combine --dataset SPY -c vix.high</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">combine --dataset SPY -c vix.low</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The SPY time series now has two additional columns from the VIX dataframe, high and low.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="delete">Delete<a href="#delete" class="hash-link" aria-label="Direct link to Delete" title="Direct link to Delete"></a></h4><p>It may be desirable to remove entire columns from the target dataset. The syntax below removes the three columns from the SPY data loaded through the stocks menu.</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">delete --delete SPY.adj_close</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">delete --delete SPY.stock_splits</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">delete --delete SPY.dividends</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="show">Show<a href="#show" class="hash-link" aria-label="Direct link to Show" title="Direct link to Show"></a></h4><p>After performing operations, examine the results using the <code>show</code> command.</p><p><img loading="lazy" src="https://user-images.githubusercontent.com/85772166/233540348-e34d9342-f48e-48c1-ac0b-bef3261d8300.png" alt="Show" class="img_ev3q"></p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">show --name SPY</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><img loading="lazy" src="https://user-images.githubusercontent.com/85772166/233540386-eca474d6-596b-431e-9bf0-b7154257c877.png" alt="Show Data" class="img_ev3q"></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="export">Export<a href="#export" class="hash-link" aria-label="Direct link to Export" title="Direct link to Export"></a></h4><p>To save all of the combined changes within a dataset, export it to a new file.</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">export -d SPY --type csv</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>This creates a new file in the <a href="https://docs.openbb.co/terminal/usage/guides/data" target="_blank" rel="noopener noreferrer">OpenBBUserData folder</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="feature-engineering">Feature Engineering<a href="#feature-engineering" class="hash-link" aria-label="Direct link to Feature Engineering" title="Direct link to Feature Engineering"></a></h3><p>The Feature Engineering section provides methods for making fast calculations with a dataset. Each one is listed below with a short description.</p><table><thead><tr><th align="left">Function</th><th align="right">Description</th></tr></thead><tbody><tr><td align="left">atr</td><td align="right">Add Average True Range</td></tr><tr><td align="left">delta</td><td align="right">Add % Change</td></tr><tr><td align="left">ema</td><td align="right">Add Exponentially Weighted Moving Average</td></tr><tr><td align="left">mom</td><td align="right">Add Momentum</td></tr><tr><td align="left">roc</td><td align="right">Add Rate of Change</td></tr><tr><td align="left">rsi</td><td align="right">Add Relative Strength Index</td></tr><tr><td align="left">sto</td><td align="right">Add Stochastic Oscillator %K and %D</td></tr><tr><td align="left">signal</td><td align="right">Add Price Signal (short vs. long term)</td></tr></tbody></table><p>Each function will have slight variations to the command syntax, but will generally operate similarly. Print the help dialogue as a reminder.</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">usage: rsi [-d {vix,SPY}] [-c TARGET_COLUMN] [--period PERIOD] [-h]</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Add rsi to dataset based on specific column.</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">options:</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> -d {vix,SPY}, --dataset {vix,SPY}</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> The name of the dataset you want to select (default: None)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> -c TARGET_COLUMN, --target-column TARGET_COLUMN</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> The name of the specific column you want to use (default: close)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> --period PERIOD The period to use (default: 10)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> -h, --help show this help message (default: False)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">For more information and examples, use 'about rsi' to access the related guide.</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">usage: atr [--close-col CLOSE_COL] [--high-col HIGH_COL] [--low-col LOW_COL] [-d {vix,SPY}]</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> [-c TARGET_COLUMN] [-h]</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Add Average True Range to dataset of specific stock ticker.</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">options:</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> --close-col CLOSE_COL</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> Close column name to use for Average True Range. (default: close)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> --high-col HIGH_COL High column name to use for Average True Range. (default: high)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> --low-col LOW_COL Low column name to use for Average True Range. (default: low)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> -d {vix,SPY}, --dataset {vix,SPY}</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> The name of the dataset you want to select (default: None)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> -c TARGET_COLUMN, --target-column TARGET_COLUMN</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> The name of the specific column you want to use (default: close)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> -h, --help show this help message (default: False)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">For more information and examples, use 'about atr' to access the related guide.</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>To use these commands with the default settings, apply the syntax below.</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">atr -d SPY</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">rsi -d SPY</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>There are now two new columns in the SPY dataset, <code>true_range, RSI_10_close</code>. To keep the dataset organized, it may be worth renaming these columns.</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">rename -d SPY --oldcol RSI_10_close --newcol spy_rsi10</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">rename -d SPY --oldcol true_range --newcol spy_atr</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="time-series-forecasting">Time Series Forecasting<a href="#time-series-forecasting" class="hash-link" aria-label="Direct link to Time Series Forecasting" title="Direct link to Time Series Forecasting"></a></h3><p>This group of features applies models to a target dataset and its columns. There are a wide selection to choose from. Please note that this guide is meant explain how to use the functions and does not attempt to explain the models themselves. This menu is an implementation of the <a href="https://unit8.com/resources/darts-time-series-made-easy-in-python/" target="_blank" rel="noopener noreferrer">Unit8 Darts Time Series for Python</a> library.</p><table><thead><tr><th align="left">Function</th><th align="left">Description</th><th align="left">Accepts Past Covariates?</th></tr></thead><tbody><tr><td align="left">autoselect</td><td align="left">Select best statistical model from AutoARIMA, AutoETS, AutoCES, MSTL, etc.</td><td align="left">No</td></tr><tr><td align="left">autoarima</td><td align="left">Automatic ARIMA Model</td><td align="left">No</td></tr><tr><td align="left">autoces</td><td align="left">Automatic Complex Exponential Smoothing Model</td><td align="left">No</td></tr><tr><td align="left">autoets</td><td align="left">Automatic ETS (Error, Trend, Seasonality) Model</td><td align="left">No</td></tr><tr><td align="left">mstl</td><td align="left">Multiple Seasonalities and Trend using Loess (MSTL) Model</td><td align="left">No</td></tr><tr><td align="left">rwd</td><td align="left">Random Walk with Drift Model</td><td align="left">No</td></tr><tr><td align="left">seasonalnaive</td><td align="left">Seasonal Naive Model</td><td align="left">No</td></tr><tr><td align="left">expo</td><td align="left">Probabilistic Exponential Smoothing</td><td align="left">No</td></tr><tr><td align="left">theta</td><td align="left">Theta Method</td><td align="left">No</td></tr><tr><td align="left">linregr</td><td align="left">Probabilistic Linear Regression</td><td align="left">Yes</td></tr><tr><td align="left">regr</td><td align="left">Regression</td><td align="left">Yes</td></tr><tr><td align="left">brnn</td><td align="left">Block Recurrent Neural Network (RNN, LSTM, GRU)</td><td align="left">Yes</td></tr><tr><td align="left">nbeats</td><td align="left">Neural Bayesian Estimation</td><td align="left">Yes</td></tr><tr><td align="left">nhits</td><td align="left">Neural Hierarchical Interpolation</td><td align="left">Yes</td></tr><tr><td align="left">tcn</td><td align="left">Temporal Convolutional Neural Network</td><td align="left">Yes</td></tr><tr><td align="left">trans</td><td align="left">Transformer Network</td><td align="left">Yes</td></tr><tr><td align="left">tft</td><td align="left">Temporal Fusion Transformer Network</td><td align="left">Yes</td></tr></tbody></table><p>Within this list of models, there are two distinct categories:</p><ul><li>Without past covariates.</li><li>With past covariates.</li></ul><p>The models featuring past covariates will accept an unlimited number of columns, or all columns can be chosen. The latter being more appropriate for when a dataset contains only columns which are deemed fit for the purpose. To use any model in its default state, all that is required is the command name and the target dataset's name. The default target column will always be <code>close</code> so, a column must be defined to run a model if the target dataset does not contain a column with this name. With the target column as <code>close</code>, the basic default syntax will look like:</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">rwd -d SPY</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><img loading="lazy" src="https://user-images.githubusercontent.com/85772166/233540491-34ba7cf0-dade-42d8-a165-5709ccf1e9fa.png" alt="Random Walk Drift" class="img_ev3q"></p><p>Each model should be reviewed carefully to understand what the adjustable parameters are, and how they should be defined.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="quantile-anomaly-detection">Quantile Anomaly Detection<a href="#quantile-anomaly-detection" class="hash-link" aria-label="Direct link to Quantile Anomaly Detection" title="Direct link to Quantile Anomaly Detection"></a></h3><p><code>anom</code> performs a Quantile Anomaly detection on a given dataset. Read more about this calculation <a href="https://unit8co.github.io/darts/generated_api/darts.ad.detectors.quantile_detector.html" target="_blank" rel="noopener noreferrer">here</a>.</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">anom -d SPY</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><img loading="lazy" src="https://user-images.githubusercontent.com/85772166/233540548-1899cb39-35ef-4ea4-ac3c-1d1757f93ea8.png" alt="Quantile Anomaly Detection" class="img_ev3q"></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="miscellaneous-ai-tools">Miscellaneous AI Tools<a href="#miscellaneous-ai-tools" class="hash-link" aria-label="Direct link to Miscellaneous AI Tools" title="Direct link to Miscellaneous AI Tools"></a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="whisper">Whisper<a href="#whisper" class="hash-link" aria-label="Direct link to Whisper" title="Direct link to Whisper"></a></h4><p>The <code>whisper</code> feature allows users to transcribe, translate, and summarize videos on YouTube. These abilities empowers users to perform deeper research than ever before, and opens the door to a more complete view of the macroeconomic landscape. The models are not installed until the first time it is used, and they can be quite significant in size. Performance will vary, and there is currently not a method for offloading processing to dedicated GPUs.</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">whisper https://www.youtube.com/watch?v=G0Q0BtGQzrA</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">[DISCLAIMER]: This is a beta feature that uses standard NLP models. More recent models such as GPT will be added in future releases.</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Downloading and Loading NLP Pipelines from cache...</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">All NLP Pipelines loaded.</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Transcribing and summarizing...</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Downloaded video "China stuck in 8 trillion dollar debt crisis | GyanJaraHatke with Sourabh Maheshwari". Generating subtitles...</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Detected language: Hindi</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">100%|████████████████████████████████████████████████████████| 83567/83567 [04:25<00:00, 314.21frames/s]</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">100%|███████████████████████████████████████████████████████████████████| 11/11 [02:44<00:00, 14.99s/it]</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">-------------------------</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Summary: Reduction: 81.38%</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Sentiment: NEGATIVE: 73.2596</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">-------------------------</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">China is the largest economy in the world. Usually China's economy is seen in the global level of the economy of America...</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>A file with the transcript is saved to the OpenBBUserData folder.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="sample-workflow-1-beginner">Sample Workflow #1 (Beginner)<a href="#sample-workflow-1-beginner" class="hash-link" aria-label="Direct link to Sample Workflow #1 (Beginner)" title="Direct link to Sample Workflow #1 (Beginner)"></a></h2><p>Let's begin by using one of the datasets we loaded in previously : <code>SPY</code></p><p>We will be forecasting <code>5 Business days</code> ahead for the remaider of these workflows unless specified.</p><p><strong>Note:</strong> All models automatically perform Historical backtesting on the test split before providing a prediction.</p><p>We use <a href="https://en.wikipedia.org/wiki/Mean_absolute_percentage_error" target="_blank" rel="noopener noreferrer">MAPE</a> for the default as it is quite convenient and scale independent since it calculates error as a percentage instead of an absolute value. There are many more metrics to compare time series. The metrics will compare only common slices of series when the two series are not aligned, and parallelize computation over a large number of pairs of series. Additional metrics to choose from are RMSE, MSE, and SMAPE.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="plot">plot<a href="#plot" class="hash-link" aria-label="Direct link to plot" title="Direct link to plot"></a></h3><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">plot SPY.close</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><img loading="lazy" src="https://user-images.githubusercontent.com/85772166/233540628-cc0b58e6-6259-4893-9dfe-4fb73217a181.png" alt="Plot" class="img_ev3q"></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="desc">desc<a href="#desc" class="hash-link" aria-label="Direct link to desc" title="Direct link to desc"></a></h3><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">desc SPY</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><img loading="lazy" src="https://user-images.githubusercontent.com/85772166/233540670-3d4df645-8fff-41a6-a4f7-0a1005dbdb11.png" alt="Describe" class="img_ev3q"></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="expo">expo<a href="#expo" class="hash-link" aria-label="Direct link to expo" title="Direct link to expo"></a></h3><p>Let's use a simple <strong>Probabilistic Exponential Smoothing Model</strong> to predict the close price. Keep in mind all models are performing automatic historical backtesting before providing future forecasts. Note that all models forecast <code>close</code> by default.</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">expo SPY</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><img loading="lazy" src="https://user-images.githubusercontent.com/85772166/233540707-1d87add0-b398-4083-9185-978e8e0bfe8c.png" alt="Probalistic Exponential Smoothing Model" class="img_ev3q"></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rnn">rnn<a href="#rnn" class="hash-link" aria-label="Direct link to rnn" title="Direct link to rnn"></a></h3><p>We can also play with some models that are bit more advanced. As we go down the list, models begin to become larger in parameter size and complexity. This will play a key role later on when we want to train models with <code>past_covariates</code> (aka. external factors).</p><p>This time lets test with a <strong>Recurrent Neural Network</strong> which by default uses an <code>LSTM</code> backbone. We can also choose to test out a <code>GRU</code> backbone to experiment. Let's do both and see if we can improve our accuracy and reduce the overall MAPE.</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">rnn SPY --forecast-only</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Epoch 50: 100%|█████████████████████████████████████| 214/214 [00:02<00:00, 77.77it/s, loss=-4.31, v_num=logs, train_loss=-4.46, val_loss=-.985]</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">RNN model obtains MAPE: 3.13%</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><img loading="lazy" src="https://user-images.githubusercontent.com/85772166/233540770-28abd8d5-c301-4d26-bd88-77287a6d71d7.png" alt="RNN" class="img_ev3q"></p><p>This result expresses a different view from the Probabilistic Exponential Smoothing Model.</p><p>For the second task, we would like to change the model type from <code>LSTM</code> --> <code>GRU</code>. Let's find out of this improves the MAPE score. Use the <code>-h</code> flag to understand the particular parameters one can change for RNN. (Please note that the parameters are different for each model).</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">rnn -h</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">usage: rnn [--hidden-dim HIDDEN_DIM] [--training_length TRAINING_LENGTH] [--naive] [-d {vix,SPY}] [-c TARGET_COLUMN] [-n N_DAYS]</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> [-t TRAIN_SPLIT] [-i INPUT_CHUNK_LENGTH] [--force-reset FORCE_RESET] [--save-checkpoints SAVE_CHECKPOINTS]</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> [--model-save-name MODEL_SAVE_NAME] [--n-epochs N_EPOCHS] [--model-type MODEL_TYPE] [--dropout DROPOUT] [--batch-size BATCH_SIZE]</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> [--end S_END_DATE] [--start S_START_DATE] [--learning-rate LEARNING_RATE] [--residuals] [--forecast-only] [--export-pred-raw]</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> [--metric {rmse,mse,mape,smape}] [-h] [--export EXPORT]</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Perform RNN forecast (Vanilla RNN, LSTM, GRU): https://unit8co.github.io/darts/generated_api/darts.models.forecasting.rnn_model.html</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">options:</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> --hidden-dim HIDDEN_DIM</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> Size for feature maps for each hidden RNN layer (h_n) (default: 20)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> --training_length TRAINING_LENGTH</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> The length of both input (target and covariates) and output (target) time series used during training. Generally</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> speaking, training_length should have a higher value than input_chunk_length because otherwise during training the RNN</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> is never run for as many iterations as it will during training. (default: 20)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> --naive Show the naive baseline for a model. (default: False)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> -d {vix,SPY}, --dataset {vix,SPY}</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> The name of the dataset you want to select (default: None)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> -c TARGET_COLUMN, --target-column TARGET_COLUMN</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> The name of the specific column you want to use (default: close)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> -n N_DAYS, --n-days N_DAYS</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> prediction days. (default: 5)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> -t TRAIN_SPLIT, --train-split TRAIN_SPLIT</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> Start point for rolling training and forecast window. 0.0-1.0 (default: 0.85)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> -i INPUT_CHUNK_LENGTH, --input-chunk-length INPUT_CHUNK_LENGTH</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> Number of past time steps for forecasting module at prediction time. (default: 14)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> --force-reset FORCE_RESET</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> If set to True, any previously-existing model with the same name will be reset (all checkpoints will be discarded).</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> (default: True)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> --save-checkpoints SAVE_CHECKPOINTS</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> Whether to automatically save the untrained model and checkpoints. (default: True)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> --model-save-name MODEL_SAVE_NAME</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> Name of the model to save. (default: rnn_model)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> --n-epochs N_EPOCHS Number of epochs over which to train the model. (default: 300)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> --model-type MODEL_TYPE</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> Enter a string specifying the RNN module type ("RNN", "LSTM" or "GRU") (default: LSTM)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> --dropout DROPOUT Fraction of neurons affected by Dropout, from 0 to 1. (default: 0)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> --batch-size BATCH_SIZE</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> Number of time series (input and output) used in each training pass (default: 32)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> --end S_END_DATE The end date (format YYYY-MM-DD) to select for testing (default: None)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> --start S_START_DATE The start date (format YYYY-MM-DD) to select for testing (default: None)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> --learning-rate LEARNING_RATE</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> Learning rate during training. (default: 0.001)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> --residuals Show the residuals for the model. (default: False)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> --forecast-only Do not plot the historical data without forecasts. (default: False)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> --export-pred-raw Export predictions to a csv file. (default: False)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> --metric {rmse,mse,mape,smape}</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> Calculate precision based on a specific metric (rmse, mse, mape) (default: mape)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> -h, --help show this help message (default: False)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"> --export EXPORT Export figure into png, jpg, pdf, svg (default: )</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">For more information and examples, use 'about rnn' to access the related guide.</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Lets change the <code>--model-type</code> parameter to <code>GRU</code> and rerun.</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">rnn SPY --model-type GRU --forecast-only</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Epoch 85: 100%|█████████████████████████████████████| 214/214 [00:02<00:00, 75.10it/s, loss=-4.45, v_num=logs, train_loss=-4.35, val_loss=-2.35]</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">RNN model obtains MAPE: 2.77% </span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><img loading="lazy" src="https://user-images.githubusercontent.com/85772166/233540843-2167a3ad-0088-4d84-a298-7b8b3b3655ff.png" alt="RNN with GRU" class="img_ev3q"></p><p>We improved the accuracy score, great work!</p><div class="theme-admonition theme-admonition-note alert alert--secondary admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_S0QG"><p>The take away for this is that all models should work out of the box when forecasting for a particular time series. One can switch the target by specifying a <code>-c</code> for <code>TARGET_COLUMN</code> and test out performance with multiple different models with a single command.</p></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="sample-workflow-2-advanced">Sample Workflow #2 (Advanced)<a href="#sample-workflow-2-advanced" class="hash-link" aria-label="Direct link to Sample Workflow #2 (Advanced)" title="Direct link to Sample Workflow #2 (Advanced)"></a></h2><p>To build successful models and improve accuracy over time, it is important to capture external data related to the time series you are training on. This can be seen in everyday applications:</p><ul><li>Observed rainfalls and known weather forecasts can help to predict hydro and solar electricity production</li><li>Recently-observed activity on an e-commerce website can help predict future sales.</li><li>Making the model aware of up-coming holidays can help sales forecasting.</li></ul><p>In fact, more often than not, strictly relying on the history of a time series
|
||
to predict its future is missing a lot of valuable information.</p><p><strong>Past covariates</strong> are time series whose past values are known at prediction
|
||
time. Those series often contain values that have to be observed to be known.</p><p><img loading="lazy" src="https://user-images.githubusercontent.com/105685594/190244764-ce8cf01f-c959-4827-a326-62b0e172332d.png" alt="image" class="img_ev3q"></p><p>To explore this topic more, please read the <a href="https://medium.com/unit8-machine-learning-publication/time-series-forecasting-using-past-and-future-external-data-with-darts-1f0539585993" target="_blank" rel="noopener noreferrer">blog post</a> written by the authors of Darts.</p><p>Note that only the following models can handle <code>past_covariates</code>: <code>BlockRNNModel</code>, <code>NBEATSModel</code>, <code>TCNModel</code>, <code>TransformerModel</code>, <code>RegressionModel</code> (incl. <code>LinearRegressionModel</code>), <code>Temporal Fusion Transformer</code></p><p>Earlier on in the guide we managed to accomplish the following:</p><ul><li>Load multiple datasets.</li><li>Combine datasets.</li><li>Rename columns.</li><li>Delete columns.</li></ul><p>We will continue this workflow by:</p><ul><li>Adding some correlation analysis.</li><li>Train models with <code>past_covariates</code>.</li></ul><p>For practice, let's start fresh and rebuild the same dataset. The <a href="https://docs.openbb.co/terminal/usage/guides/scripts-and-routines" target="_blank" rel="noopener noreferrer">OpenBB Routine Scripts</a> can make quick work out of this chore. Copy the block below and create a new <code>.openbb</code> file, in <code>~/OpenBBUserData/routines/</code>, to follow along.</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">/stocks</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">load SPY --start 1997-01-01</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">forecast</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">..</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">load ^VIX --start 1997-01-01</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">forecast</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">combine --dataset SPY -c ^VIX.high</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">combine --dataset SPY -c ^VIX.low</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">delete --delete SPY.adj_close</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">delete --delete SPY.stock_splits</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">delete --delete SPY.dividends</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">atr -d SPY</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">rsi -d SPY</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">rename -d SPY --oldcol RSI_10_close --newcol SPY_rsi10</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">rename -d SPY --oldcol true_range --newcol SPY_atr</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">show SPY</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Restart the Terminal to ensure that the routine file is found by the <code>/exe</code> command, and then run it.</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">exe --file forecast_demo.openbb</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><img loading="lazy" src="https://user-images.githubusercontent.com/85772166/233540963-b62b6f6b-a595-4cee-8ce9-8876024b3da8.png" alt="Forecast Routine Demo" class="img_ev3q"></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="brnn">brnn<a href="#brnn" class="hash-link" aria-label="Direct link to brnn" title="Direct link to brnn"></a></h3><p>Now take the new dataset and train a simple <code>Block RNN</code> model on SPY's <code>close</code> price, and again using <code>past_covariates</code> on a single column.</p><p>Without past covariates:</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">brnn SPY --forecast-only</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">Epoch 196: 100%|███████████████████████████████████| 214/214 [00:01<00:00, 107.42it/s, loss=-4.09, v_num=logs, train_loss=-4.07, val_loss=-1.53]</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Block RNN model obtains MAPE: 3.25% </span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><img loading="lazy" src="https://user-images.githubusercontent.com/85772166/233541019-7bc0545e-f2f1-4a6d-84a2-7e7ac1de9043.png" alt="BRNN Without Covariates" class="img_ev3q"></p><p>With covariates:</p><p>To use any covariates, there are two options:</p><ul><li>specify specific columns with <code>--past-covariates</code></li><li>specify all columns as past covariates except the one you are forecasting
|
||
<code>--all-past-covariates</code></li></ul><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">brnn SPY --forecast-only --past-covariates volume</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #0: volume</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Epoch 86: 100%|████████████████████████████████████████| 214/214 [00:02<00:00, 74.77it/s, loss=-4, v_num=logs, train_loss=-4.19, val_loss=-1.53]</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Block RNN model obtains MAPE: 4.69% </span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><img loading="lazy" src="https://user-images.githubusercontent.com/85772166/233541054-552243aa-0509-47fd-8ac8-42c0b433095a.png" alt="BRNN With Past Covariates" class="img_ev3q"></p><p>It is evident here that adding in the external variable of <code>volume</code> negatively affected the accuracy.</p><p>Let's try adding a new column for the 200-day moving average.</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">ema -d SPY --period 200/brnn -d SPY --past-covariates EMA_200</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">Successfully added 'EMA_200' to 'SPY' dataset</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #0: EMA_200</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Epoch 79: 100%|█████████████████████████████████████| 214/214 [00:02<00:00, 87.78it/s, loss=-3.81, v_num=logs, train_loss=-3.78, val_loss=-.435</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Block RNN model obtains MAPE: 4.60%</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><img loading="lazy" src="https://user-images.githubusercontent.com/85772166/233541105-0f8dc802-e569-4ce2-b16a-0610e1cb99b7.png" alt="BRNN With EMA200" class="img_ev3q"></p><p>This isn't an improvement. It's possible that there is too much noise in the data, so let's try shortening the length of time being used to train.</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">brnn -d SPY --past-covariates EMA_200 -t 0.95</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #0: EMA_200</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Epoch 87: 100%|█████████████████████████████████████| 215/215 [00:02<00:00, 82.81it/s, loss=-3.87, v_num=logs, train_loss=-4.29, val_loss=-1.59]</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Block RNN model obtains MAPE: 3.38% </span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><img loading="lazy" src="https://user-images.githubusercontent.com/85772166/233541148-707d2167-46ee-47b1-b6dc-ed56b239f32f.png" alt="Parameter Adjustments" class="img_ev3q"></p><p>Removing the 2020 volatility from the window of observation made a massive improvement to the forecast. Now let's see add all the columns in the dataset as past covariates.</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">brnn -d SPY --all-past-covariates -t 0.95</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #0: open</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #1: high</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #2: low</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #3: volume</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #4: ^VIX_high</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #5: ^VIX_low</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #6: SPY_atr</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #7: SPY_rsi10</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #8: EMA_200</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Epoch 39: 100%|█████████████████████████████████████| 215/215 [00:02<00:00, 83.50it/s, loss=-3.92, v_num=logs, train_loss=-4.03, val_loss=-2.14]</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Block RNN model obtains MAPE: 3.57% </span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><img loading="lazy" src="https://user-images.githubusercontent.com/85772166/233541177-7ddd64be-ec79-4aaf-b30f-41607a7b7f68.png" alt="BRNN with All Past Covariates" class="img_ev3q"></p><p>Adding all of the columns that were created doesn't improve the MAPE score, but it does narrow the range of forecasted prices. Playing around like this shows how small changes can have a large impact on a forecast. It is important to test many variables and parameters without getting too caught up overfitting any particular model. Validate a thesis before dedicating a large amount of time into it.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="regr">regr<a href="#regr" class="hash-link" aria-label="Direct link to regr" title="Direct link to regr"></a></h3><p>Using the <code>regr</code> function with <code>all-past-covariates</code> on the same dataset gives dramatically different forecast.</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">regr SPY --all-past-covariates</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #0: open</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #1: high</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #2: low</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #3: volume</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #4: ^VIX_high</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #5: ^VIX_low</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #6: SPY_atr</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #7: SPY_rsi10</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Predicting Regression for 5 days</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">100%|███████████████████████████████████████████████████████████████████████████████████████████████████████| 1026/1026 [00:48<00:00, 21.35it/s]</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Regression model obtains MAPE: 2.68%</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><img loading="lazy" src="https://user-images.githubusercontent.com/85772166/233541224-c2cbbaba-0b33-4d79-930a-dd2629d6ed94.png" alt="regr" class="img_ev3q"></p><p>Now that we know how to use covariates, and are starting to understand their effects, let's examine the impact of MSFT and AAPL closing prices on the regression forecast for SPY. We will discard the previous work and start fresh.</p><p>The cache can be purged by resetting the Terminal. Use this command to clear it:</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">/r</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Now we will fetch the data and combine the columns:</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">/stocks/load spy</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">forecast</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">..</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">load aapl</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">forecast</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">..</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">load msft</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">forecast</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">delete --delete SPY.stock_splits</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">delete --delete SPY.adj_close</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">delete --delete SPY.dividends</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">combine SPY -c AAPL.close</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">combine SPY -c MSFT.close</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">regr SPY --forecast-only --past-covariates AAPL_close,MSFT_close</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Remember: You can use unlimited number of <code>past_covariates</code> but they must all be combined into a single dataframe with the target forecast time series before training.</strong></p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #0: AAPL_close</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #1: MSFT_close</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Predicting Regression for 5 days</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████| 115/115 [00:01<00:00, 96.07it/s]</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Regression model obtains MAPE: 1.77%</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><img loading="lazy" src="https://user-images.githubusercontent.com/85772166/233541267-42a541e2-ff5f-429e-a9fd-b9d2c76060ce.png" alt="Regression with Past Covariates" class="img_ev3q"></p><p>Adding the rest of the columns as past covariates improves the MAPE score slightly and starts to take a more directional view.</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_m3Ux"><pre tabindex="0" class="prism-code language-console codeBlock_qGQc thin-scrollbar"><code class="codeBlockLines_p187"><span class="token-line" style="color:#9CDCFE"><span class="token plain">regr --all-past-covariates -d SPY</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #0: open</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #1: high</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #2: low</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #3: volume</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #4: AAPL_close</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Covariate #5: MSFT_close</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Predicting Regression for 5 days</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">100%|████████████████████████████████████████████████████████████████████████████████████████████████████████| 115/115 [00:00<00:00, 117.16it/s]</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Regression model obtains MAPE: 1.66% </span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><img loading="lazy" src="https://user-images.githubusercontent.com/85772166/233541328-931117ff-9a84-437d-b8e8-b653d56335bc.png" alt="Regression with All Past Covariates" class="img_ev3q"></p><div class="theme-admonition theme-admonition-note alert alert--secondary admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_S0QG"><p>The examples here are over-simplified as a means for demonstrating a framework to create and conduct experiments. It is important to keep in mind that these are tools, they are not oracles, and that results may vary. If you have any questions, requests for new feature engineering and model additions, or just want to be part of the conversation, please join us on <a href="/terminal/usage/intros/openbb.co/discord">Discord</a>. Happy hacking!</p></div></div></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/OpenBB-finance/OpenBBTerminal/edit/main/website/content/terminal/usage/intros/forecast.md" target="_blank" rel="noreferrer noopener" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_vwxv"></div></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/terminal/usage/intros/fixedincome"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Fixed Income</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/terminal/usage/intros/forex"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Forex</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_jeP5 thin-scrollbar text-sm mt-[48px] xl:max-w-[216px] theme-doc-toc-desktop"><p class="uppercase text-sm font-bold text-grey-600 dark:text-grey-200 tracking-widest mb-2">On this page</p><ul class="border-l border-grey-300 dark:border-grey-600 list-none pl-4"><li class="pb-1"><a href="#the-forecast-menu" class="text-grey-400 capitalize !no-underline">The Forecast Menu</a><ul class="list-none ml-1 border-l border-grey-300 dark:border-grey-600 mt-2"><li class="pb-1 pl-3"><a href="#loading-data" class="text-grey-400 capitalize !no-underline">Loading Data</a></li><li class="py-1 pl-3"><a href="#exploration" class="text-grey-400 capitalize !no-underline">Exploration</a></li><li class="py-1 pl-3"><a href="#feature-engineering" class="text-grey-400 capitalize !no-underline">Feature Engineering</a></li><li class="py-1 pl-3"><a href="#time-series-forecasting" class="text-grey-400 capitalize !no-underline">Time Series Forecasting</a></li><li class="py-1 pl-3"><a href="#quantile-anomaly-detection" class="text-grey-400 capitalize !no-underline">Quantile Anomaly Detection</a></li><li class="py-1 pl-3"><a href="#miscellaneous-ai-tools" class="text-grey-400 capitalize !no-underline">Miscellaneous AI Tools</a></li></ul></li><li class="py-1"><a href="#sample-workflow-1-beginner" class="text-grey-400 capitalize !no-underline">Sample Workflow #1 (Beginner)</a><ul class="list-none ml-1 border-l border-grey-300 dark:border-grey-600 mt-2"><li class="pb-1 pl-3"><a href="#plot" class="text-grey-400 capitalize !no-underline">plot</a></li><li class="py-1 pl-3"><a href="#desc" class="text-grey-400 capitalize !no-underline">desc</a></li><li class="py-1 pl-3"><a href="#expo" class="text-grey-400 capitalize !no-underline">expo</a></li><li class="py-1 pl-3"><a href="#rnn" class="text-grey-400 capitalize !no-underline">rnn</a></li></ul></li><li class="py-1"><a href="#sample-workflow-2-advanced" class="text-grey-400 capitalize !no-underline">Sample Workflow #2 (Advanced)</a><ul class="list-none ml-1 border-l border-grey-300 dark:border-grey-600 mt-2"><li class="pb-1 pl-3"><a href="#brnn" class="text-grey-400 capitalize !no-underline">brnn</a></li><li class="py-1 pl-3"><a href="#regr" class="text-grey-400 capitalize !no-underline">regr</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="px-4 border-t dark:border-grey-600/50 lg:px-12 py-14 bg-white dark:bg-grey-850 z-10 overflow-hidden flex flex-col gap-10 items-center justify-center"><div class="flex w-full flex-col justify-between gap-10 md:flex-row md:items-start"><div class="ml-2 mb-2 space-y-10 md:m-0"><a aria-label="Home" class="hover:text-grey-700 dark:text-white dark:hover:text-gray-50" href="/"><svg viewBox="0 0 170 17" width="170" height="17" fill="none" xmlns="http://www.w3.org/2000/svg" class="h-[14px] w-[140px]"><path d="M106.107 1.889v11.334l-.961-.946-.959-.945-.962-.943-.959-.946-.961-.943-.962-.945-.959-.944-.961-.945-.96-.943-.961-.946-.96-.943-.96-.945H92.66V17H94.582V4.723l.96.943.96.945.961.944.96.945.961.943.959.946.962.943.961.945.959.946.962.943.959.945.961.944.96.945h.961V1.889H106.107ZM137.03 7.557h-1.921V1.889h-11.524V17h15.37V7.546h-1.92l-.005.01Zm-11.524-.946V3.773h7.683v3.78h-7.683V6.61Zm11.524 3.778v4.727h-11.524v-5.67h11.524v.943ZM168.901 7.557h-2.88V1.889h-11.526V0h-1.921v1.889h1.921V17h15.365V7.546l-.959.01Zm-12.485-.946V3.773h7.684v3.78h-7.684V6.61Zm11.526 3.778v4.727h-11.526v-5.67h11.526v.943ZM75.314 1.889H61.867V17H77.23V15.111H63.787V11.332h11.521V9.443H63.788V3.777H77.23V1.89h-1.916ZM13.444 1.889H0V17h15.367V1.889h-1.922Zm0 2.834V15.11H1.918V3.773h11.527v.95ZM44.397 1.889H30.952V17h1.92v-5.666h13.445V1.88h-1.92v.009Zm0 2.834V9.45H32.873V3.773h11.524v.95Z" fill="currentColor"></path></svg></a><a class="flex h-[32px] w-[172px] rounded-md border border-grey-300 hover:bg-grey-100 dark:border-white bg-grey-100 dark:bg-white text-xs hover:no-underline" href="https://github.com/OpenBB-finance/OpenBBTerminal" target="_blank" rel="noreferrer"><span class="inline-flex w-[60%] items-center gap-x-[6px] px-3 py-2 text-grey-800"><svg viewBox="0 0 24 24" width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg" style="margin-bottom:3px" class="h-[14.67px] w-[14.67px]"><path d="m12 1 3.263 7.439L23 9.403l-5.72 5.562L18.798 23 12 18.999 5.202 23l1.518-8.035L1 9.403l7.737-.964L12 1Z" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"></path></svg>Star us</span><span class="inline-flex w-[40%] items-center justify-center rounded-r-md bg-grey-850 text-grey-200">0</span></a></div></div><div class="flex w-full flex-col items-center justify-between gap-4 md:flex-row md:gap-0"><div class="flex flex-col items-start justify-end gap-4 self-start font-light text-grey-500 md:flex-row md:items-center"><p class="text-sm">© 2023 OpenBB</p><div class="_divider-x hidden h-[20px] border-[0.5px] md:block"></div><a href="https://openbb.co/legal/privacy-policy" target="_blank" rel="noopener noreferrer" class="text-sm dark:hover:text-white">Privacy Policy</a><div class="_divider-x hidden h-[20px] border-[0.5px] md:block"></div><a href="https://openbb.co/legal/terms-of-service" target="_blank" rel="noopener noreferrer" class="text-sm dark:hover:text-white">Terms</a></div><div class="mt-4 mb-10 grid grid-cols-4 gap-4 self-start md:my-0 md:grid-cols-8 md:self-end"><a aria-label="GitHub Link" class="h-8 w-8 dark:hover:!text-white hover:text-grey-700" target="_blank" rel="noreferrer" href="https://github.com/OpenBB-finance/OpenBBTerminal"><svg width="15" height="16" viewBox="0 0 15 16" fill="none" xmlns="http://www.w3.org/2000/svg" class="h-4 w-4"><path d="M6 12.76c-3.333 1-3.333-1.667-4.667-2l4.667 2Zm4.667 2v-2.58a2.246 2.246 0 0 0-.627-1.74c2.094-.233 4.294-1.027 4.294-4.667 0-.93-.359-1.825-1-2.5a3.38 3.38 0 0 0-.06-2.513s-.787-.233-2.607.987a8.92 8.92 0 0 0-4.667 0C4.18.527 3.393.76 3.393.76a3.38 3.38 0 0 0-.06 2.513 3.627 3.627 0 0 0-1 2.52c0 3.614 2.2 4.407 4.294 4.667A2.248 2.248 0 0 0 6 12.18v2.58" fill="currentColor"></path><path d="M10.667 14.76v-2.58a2.246 2.246 0 0 0-.627-1.74c2.094-.233 4.294-1.027 4.294-4.667 0-.93-.359-1.825-1-2.5a3.38 3.38 0 0 0-.06-2.513s-.787-.233-2.607.987a8.92 8.92 0 0 0-4.667 0C4.18.527 3.393.76 3.393.76a3.38 3.38 0 0 0-.06 2.513 3.627 3.627 0 0 0-1 2.52c0 3.614 2.2 4.407 4.294 4.667A2.248 2.248 0 0 0 6 12.18v2.58m0-2c-3.333 1-3.333-1.667-4.667-2l4.667 2Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path></svg></a><a aria-label="LinkedIn Link" class="h-8 w-8 dark:hover:!text-white hover:text-grey-700" target="_blank" rel="noreferrer" href="https://www.linkedin.com/company/openbb-finance/"><svg viewBox="0 0 24 24" width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg" class="h-4 w-4"><path d="M13 21H9V9h4v2a4.618 4.618 0 0 1 3.525-1.763A4.5 4.5 0 0 1 21 13.75V21h-4v-6.75a2.265 2.265 0 0 0-2.247-1.944A1.815 1.815 0 0 0 13 14.25V21Zm-6 0H3V9h4v12ZM5 7a2 2 0 1 1 0-4 2 2 0 0 1 0 4Z" fill="currentColor"></path></svg></a><a aria-label="Twitter Link" class="h-8 w-8 dark:hover:!text-white hover:text-grey-700" target="_blank" rel="noreferrer" href="https://twitter.com/openbb_finance"><svg viewBox="0 0 16 14" width="16" height="14" fill="none" xmlns="http://www.w3.org/2000/svg" class="h-4 w-4"><path d="M14.115 2.481A3.36 3.36 0 0 0 15.56.618a6.472 6.472 0 0 1-2.085.817A3.229 3.229 0 0 0 9.532.778c-1.308.718-1.985 2.246-1.654 3.73C5.24 4.37 2.78 3.092 1.114.987c-.87 1.54-.426 3.507 1.015 4.497a3.208 3.208 0 0 1-1.486-.422v.042c0 1.604 1.102 2.985 2.634 3.302-.484.135-.99.155-1.483.058.431 1.372 1.663 2.31 3.067 2.339A6.48 6.48 0 0 1 0 12.199a9.12 9.12 0 0 0 5.032 1.513 9.157 9.157 0 0 0 6.623-2.787 9.644 9.644 0 0 0 2.716-6.795c0-.146-.003-.291-.01-.436A6.767 6.767 0 0 0 16 1.951a6.433 6.433 0 0 1-1.885.53Z" fill="currentColor"></path></svg></a><a aria-label="Tiktok Link" class="h-8 w-8 dark:hover:!text-white hover:text-grey-700" target="_blank" rel="noreferrer" href="https://www.tiktok.com/@openbb"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round" class="h-5 w-5 pl-[2.5px]"><path d="M0 0h24v24H0z" stroke="none"></path><path d="M9 12a4 4 0 1 0 4 4V4a5 5 0 0 0 5 5"></path></svg></a><a aria-label="Reddit Link" class="h-8 w-8 dark:hover:!text-white hover:text-grey-700" target="_blank" rel="noreferrer" href="https://www.reddit.com/r/openbb/"><svg viewBox="0 0 16 16" width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg" class="h-4 w-4"><path d="M8 14.667A6.667 6.667 0 1 1 14.667 8 6.674 6.674 0 0 1 8 14.667ZM4.538 7.029a.973.973 0 0 0-.405 1.858 1.707 1.707 0 0 0 0 .292c0 1.494 1.743 2.708 3.886 2.708 2.142 0 3.886-1.214 3.886-2.708a1.857 1.857 0 0 0 0-.292.96.96 0 0 0-.432-1.825h-.035a.97.97 0 0 0-.638.271 4.744 4.744 0 0 0-2.567-.82l.434-2.08 1.425.3a.667.667 0 0 0 .735.591A.667.667 0 1 0 10.685 4a.667.667 0 0 0-.506.328L8.547 4a.207.207 0 0 0-.244.158l-.499 2.315a4.749 4.749 0 0 0-2.6.82.967.967 0 0 0-.666-.264Zm3.582 3.987h-.225a2.568 2.568 0 0 1-1.534-.515.18.18 0 0 1 .139-.294.18.18 0 0 1 .114.04c.374.274.825.421 1.289.42h.216c.457 0 .903-.143 1.274-.41a.187.187 0 0 1 .267 0 .19.19 0 0 1-.003.267v-.027a2.557 2.557 0 0 1-1.537.518v.001Zm1.418-1.63h-.01l.005-.025a.626.626 0 1 1 .49-.188.659.659 0 0 1-.462.214h-.024.001Zm-3.091-.053a.667.667 0 1 1 0-1.333.667.667 0 0 1 0 1.333Z" fill="currentColor"></path></svg></a><a aria-label="Discord Link" class="h-8 w-8 dark:hover:!text-white hover:text-grey-700" target="_blank" rel="noreferrer" href="https://discord.gg/xPHTuHCmuV"><svg viewBox="0 0 16 12" width="16" height="12" fill="none" xmlns="http://www.w3.org/2000/svg" class="h-4 w-4"><path d="M13.38 8.836a4.375 4.375 0 0 1-2.474 1.507c.407.481.897 1.025.901 1.03 1.655.033 3.221-.688 4.193-1.929-.05-2.572-.724-5.1-1.973-7.397A7.139 7.139 0 0 0 10.194.71h-.016l-.192.203a9.52 9.52 0 0 1 3.412 1.61 11.875 11.875 0 0 0-4.125-1.217 12.415 12.415 0 0 0-2.766.025c-.065.001-.13.008-.193.019h-.04a10.98 10.98 0 0 0-3.11.801c-.493.21-.796.362-.809.368-.013.005 0 0 0-.01A10.022 10.022 0 0 1 5.96.866L5.815.714h-.009a7.142 7.142 0 0 0-3.833 1.335A16.003 16.003 0 0 0 0 9.447c.96 1.249 2.528 1.972 4.182 1.929 0 0 .517-.583.92-1.054a4.307 4.307 0 0 1-2.405-1.496c.01.006.153.096.384.213a.17.17 0 0 0 .056.04.409.409 0 0 0 .058.031 8.043 8.043 0 0 0 1.064.462c.653.24 1.33.423 2.019.548.604.106 1.217.16 1.832.16.576 0 1.15-.049 1.717-.146a9.64 9.64 0 0 0 1.986-.546 8.203 8.203 0 0 0 1.566-.752Zm-2.94-.57c-.627.05-1.224-.26-1.502-.784a1.335 1.335 0 0 1 .244-1.581 1.612 1.612 0 0 1 1.68-.363c.586.212.973.735.973 1.319.032.745-.592 1.374-1.396 1.41h.001Zm-5.001 0c-.79-.064-1.395-.676-1.395-1.41 0-.733.606-1.345 1.395-1.408.363 0 .71.138.963.38.286.276.442.645.433 1.027.033.747-.59 1.378-1.396 1.411Z" fill="currentColor"></path></svg></a><a aria-label="Youtube Link" class="h-8 w-8 dark:hover:!text-white hover:text-grey-700" target="_blank" rel="noreferrer noopener" href="https://www.youtube.com/channel/UCaeFEx-W16IuxRsHlM1ywBQ"><svg viewBox="0 0 24 24" width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg" class="h-4 w-4"><path d="M22.54 6.42a2.78 2.78 0 0 0-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 2A29 29 0 0 0 1 11.75a29 29 0 0 0 .46 5.33A2.78 2.78 0 0 0 3.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-2c.313-1.732.467-3.49.46-5.25a29.005 29.005 0 0 0-.46-5.33v0Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="m9.75 15.017 5.75-3.27-5.75-3.27v6.54Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></a></div></div></footer></div>
|
||
<script src="/assets/js/runtime~main.9c92d1c8.js"></script>
|
||
<script src="/assets/js/main.0a6180ed.js"></script>
|
||
</body>
|
||
</html> |