diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/01 Introduction.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/01 Introduction.html new file mode 100644 index 0000000000..6edd3cab57 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/01 Introduction.html @@ -0,0 +1,3 @@ +

Factors by QuantConnect provides precomputed factors for individual US Equities plus unlinked factors that aren't tied to a tradable security, such as US Treasury yield curve rates. The data starts in 1998, covers every US Equity that has appeared in the SPY ETF constituents universe since August 2015, and is delivered on a daily frequency. This dataset is created by computing each factor from our own datasets with the same LEAN tooling an algorithm would use, so backtest and precomputed values match exactly.

+ +

For more information about the Factors dataset, including CLI commands and pricing, see the dataset listing.

\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Spectral Tick Flow Signal/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Spectral Tick Flow Signal/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/03 Getting Started.html new file mode 100644 index 0000000000..c524976e62 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/03 Getting Started.html @@ -0,0 +1,17 @@ +

The following snippet demonstrates how to request data from the Factors dataset: +

+
# Factors linked to a specific stock:
+self._equity = self.add_equity("AAPL", Resolution.DAILY)
+self._equity.factors = self.add_data(Factors, self._equity.symbol).symbol
+# Unlinked factors:
+self._unlinked_factors = self.add_data(Factors, Factors.UNLINKED).symbol
+# All factors:
+self._universe = self.add_universe(FactorsUniverse, self._select_assets)
+
// Factors linked to a specific stock:
+_equity = AddEquity("SPY", Resolution.Daily);
+_equityFactors = AddData<Factors>(_equity.Symbol).Symbol;
+// Unlinked factors:
+_unlinkedFactors = AddData<Factors>(Factors.Unlinked).Symbol;
+// All factors:
+_universe = AddUniverse<FactorsUniverse>(SelectAssets);
+
\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/04 Data Summary.html new file mode 100644 index 0000000000..bbdf965e8b --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/04 Data Summary.html @@ -0,0 +1,15 @@ +

The following table describes the dataset properties:

+ + + + + + + + + + + + + +
PropertyValue
Start DateJanuary 1998
Data DensityDense
Asset CoverageAll US Equities in the SPY ETF, plus unlinked factors
ResolutionDaily
TimezoneNew York
\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/05 Requesting Data.html new file mode 100644 index 0000000000..c0f7ff9857 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/05 Requesting Data.html @@ -0,0 +1,28 @@ +

To add Factors data to your algorithm, call the AddDataadd_data method. For the factors linked to a specific Equity, pass the underlying Equity Symbol. For the unlinked factors, which aren't tied to any tradable security, pass Factors.UnlinkedFactors.UNLINKED. Save a reference to each dataset Symbol so you can access the data later in your algorithm.

+ +
+
class FactorsDataAlgorithm(QCAlgorithm):
+
+    def initialize(self) -> None:
+        self.set_start_date(2014, 3, 25)
+        self.set_end_date(2014, 4, 8)
+        self.set_cash(100000)
+        self._equity = self.add_equity("SPY", Resolution.DAILY)
+        self._equity.factors = self.add_data(Factors, self._equity.symbol).symbol
+        self._unlinked_factors = self.add_data(Factors, Factors.UNLINKED).symbol
+
public class FactorsDataAlgorithm : QCAlgorithm
+{
+    private Equity _equity;
+    private Symbol _equityFactors, _unlinkedFactors;
+
+    public override void Initialize()
+    {
+        SetStartDate(2014, 3, 25);
+        SetEndDate(2014, 4, 8);
+        SetCash(100000);
+        _equity = AddEquity("SPY", Resolution.Daily);
+        _equityFactors = AddData<Factors>(_equity.Symbol).Symbol;
+        _unlinkedFactors = AddData<Factors>(Factors.Unlinked).Symbol;
+    }
+}
+
\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/06 Accessing Data.html new file mode 100644 index 0000000000..13f5411e8f --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/06 Accessing Data.html @@ -0,0 +1,28 @@ +

To get the current factor data, index the current Slice with the dataset Symbol. +Slice objects deliver unique events to your algorithm as they happen, but the Slice may not contain data for your dataset at every time step. To avoid issues, check if the Slice contains the data you want before you index it. Each Factors object behaves like a dictionary, mapping the factor name to its value. Index the object with a factor name constant (for example, Factors.Technical.Roc1DayFactors.Technical.ROC_1_DAY is "technical_roc_1d") to get the value. + +

+ +
+
def on_data(self, data: Slice) -> None:
+    equity_factors = data.get(Factors).get(self._equity.factors)
+    if equity_factors:
+        value = equity_factors[Factors.ROC_1_DAY]
+
+    unlinked_factors = data.get(Factors).get(self._unlinked_factors)
+    if unlinked_factors:
+        ust_yield = unlinked_factors[Factors.UST_YIELD_1_MONTH]
+
public override void OnData(Slice data)
+{
+    if (data.Get<Factors>().TryGetValue(_equityFactors, out var equityFactors))
+    {
+        var value = equityFactors[Factors.Roc1Day];
+    }
+
+    if (data.Get<Factors>().TryGetValue(_unlinkedFactors, out var unlinkedFactors))
+    {
+        var ustYield = unlinkedFactors[Factors.UstYield1Month];
+    }
+}
+
+
\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/07 Historical Data.html new file mode 100644 index 0000000000..d04716c60a --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/07 Historical Data.html @@ -0,0 +1,16 @@ +

To get historical factor data, call the Historyhistory method with the dataset Symbol. +If there is no data in the period you request, the history result is empty.

+ +
+
# DataFrames
+equity_factors_history_df = self.history(self._equity.factors, 100, Resolution.DAILY)
+unlinked_factors_history_df = self.history(self._unlinked_factors, 100, Resolution.DAILY)
+
+# Dataset objects
+equity_factors_history = self.history[Factors](self._equity.factors, 100, Resolution.DAILY)
+market_factors_history = self.history[Factors](self._unlinked_factors, 100, Resolution.DAILY)
+
var equityFactorsHistory = History<Factors>(_equityFactors, 100, Resolution.Daily);
+var unlinkedFactorsHistory = History<Factors>(_marketFactors, 100, Resolution.Daily);
+
+ +

For more information about historical data, see History Requests.

\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/08 Universe Selection.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/08 Universe Selection.html new file mode 100644 index 0000000000..40d9e91edd --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/08 Universe Selection.html @@ -0,0 +1,54 @@ +

To select a dynamic universe of US Equities based on factor values, call the AddUniverseadd_universe method with the FactorsUniverse class and a selection function.

+ +
+
def initialize(self) -> None:
+    self._universe = self.add_universe(FactorsUniverse, self._select_assets)
+
+def _select_assets(self, data: List[FactorsUniverse]) -> List[Symbol]:
+    ust_yield = None
+    positive = []
+    negative = []
+    for factors in data:
+        if Factors.UST_YIELD_1_MONTH in factors.keys:
+            ust_yield = factors[Factors.UST_YIELD_1_MONTH]
+        elif Factors.ROC_1_DAY in factors.keys:
+            if factors[Factors.ROC_1_DAY] > 0:
+                positive.append(factors.symbol)
+            else:
+                negative.append(factors.symbol)
+    return positive if ust_yield < 4 else negative
+
private Universe _universe;
+
+public override void Initialize()
+{
+    _universe = AddUniverse<FactorsUniverse>(SelectAssets);
+}
+
+private IEnumerable<Symbol> SelectAssets(IEnumerable<BaseData> data)
+{
+    decimal? ustYield = null;
+    var positive = new List<Symbol>();
+    var negative = new List<Symbol>();
+    foreach (var factors in data.OfType<FactorsUniverse>())
+    {
+        if (factors.ContainsKey(Factors.UstYield1Month))
+        {
+            ustYield = factors[Factors.UstYield1Month];
+        }
+        else if (factors.ContainsKey(Factors.Roc1Day))
+        {
+            if (factors[Factors.Roc1Day] > 0)
+            {
+                positive.Add(factors.Symbol);
+            }
+            else
+            {
+                negative.Add(factors.Symbol);
+            }
+        }
+    }
+    return ustYield < 4 ? positive : negative;
+}
+
+ +

For more information about dynamic universes, see Universes.

\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/09 Universe History.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/09 Universe History.html new file mode 100644 index 0000000000..2e6f39288e --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/09 Universe History.html @@ -0,0 +1,48 @@ +

You can get historical universe data in an algorithm and in the Research Environment.

+ +

Historical Universe Data in Algorithms

+

To get historical universe data in an algorithm, call the Historyhistory method with the Universe object and the lookback period. If there is no data in the period you request, the history result is empty.

+ +
+
var universeHistory = History(_universe, 30, Resolution.Daily);
+foreach (var universeDay in universeHistory)
+{
+    foreach (FactorsUniverse factors in universeDay)
+    {
+        if (factors.TryGetValue(Factors.Roc1Day, out var value))
+        {
+            // ...
+        }
+    }
+}
+
# DataFrame example where the columns are the FactorsUniverse attributes:
+history_df = self.history(self._universe, 30, Resolution.DAILY, flatten=True)
+
+# Series example where the values are lists of FactorsUniverse objects:
+universe_history = self.history(self._universe, 30, Resolution.DAILY)
+for (_, time), universe_day in universe_history.items():
+    for factors in universe_day:
+        if Factors.ROC_1_DAY in factors.keys:
+            value = factors[Factors.ROC_1_DAY]
+
+ +

Historical Universe Data in Research

+

To get historical universe data in research, call the UniverseHistoryuniverse_history method with the Universe object, a start date, and an end date. This method returns the filtered universe. If there is no data in the period you request, the history result is empty.

+ +
+
var universeHistory = qb.History(universe, qb.Time.AddDays(-30), qb.Time);
+foreach (var universeDay in universeHistory)
+{
+    foreach (FactorsUniverse factors in universeDay)
+    {
+        if (factors.TryGetValue(Factors.Roc1Day, out var value))
+        {
+            // ...
+        }
+    }
+}
+
# DataFrame example where the columns are the FactorsUniverse attributes:
+history = qb.history(universe, qb.time - timedelta(30), qb.time, flatten=True)
+
+ +

You can call the Historyhistory method in Research.

\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/10 Remove Subscriptions.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/10 Remove Subscriptions.html new file mode 100644 index 0000000000..8d54690fe9 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/10 Remove Subscriptions.html @@ -0,0 +1,8 @@ +

To remove a subscription, call the RemoveSecurityremove_security method.

+ +
+
self.remove_security(self._equity.factors)
+
RemoveSecurity(_equityFactors);
+
+ +

If you subscribe to Factors data for assets in a dynamic universe, remove the dataset subscription when the asset leaves your universe. To view a common design pattern, see Track Security Changes.

\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/11 Supported Factors.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/11 Supported Factors.html new file mode 100644 index 0000000000..26a07d1ec3 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/11 Supported Factors.html @@ -0,0 +1,29 @@ +

The Factors and FactorsUniverse objects behave like a dictionary, mapping the factor name to its value. The Factors class provides name constants for every factor.

+ +

Linked Factors

+

Linked factors are factors that are tied to a specific tradable security. The Factors dataset provides the following linked factors for each US Equity:

+ + +

Unlinked Factors

+

Unlinked factors are factors that aren't tied to a specific tradable security, like weather data or interest rates. The Factors dataset provides the following unlinked factors:

+ \ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/98 Example Applications.html new file mode 100644 index 0000000000..aac7b08309 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/98 Example Applications.html @@ -0,0 +1,701 @@ +

+The QuantConnect Factors dataset enables researchers to accurately design strategies harnessing precomputed, point-in-time factor values. Examples include: +

+ + +

Classic Algorithm Example

+

The following example algorithm ranks the S&P 500 constituents on every linked factor each day and weights each factor by how it performed over the trailing year in market conditions like today's, as measured by unlinked factors such as the VIX and the 1-month Treasury yield. It then buys the 5% of constituents with the highest weighted-rank scores, sizes each position by its score, and rebalances at every market open.

+ +
+
# region imports
+from AlgorithmImports import *
+from collections import deque
+from datetime import date
+from scipy.stats import rankdata
+# endregion
+
+
+class DaySnapshot:
+    """What the algorithm knows about one trading day before its open."""
+
+    def __init__(self, day: date, symbols: List[Symbol], ranks: np.ndarray, active: np.ndarray, unlinked: np.ndarray) -> None:
+        self.day = day                # the trading day
+        self.symbols = symbols        # S&P 500 constituents of the day
+        self.ranks = ranks            # scaled ranks: one row per constituent, one column per linked factor
+        self.active = active          # linked factors with ranks that day
+        self.unlinked = unlinked      # unlinked factor values known before the open
+
+
+class FactorsPortfolioAlgorithm(QCAlgorithm):
+    """Conditional multi-factor long-only portfolio on the QuantConnect Factors dataset.
+
+    Every trading day before the open, the algorithm ranks the S&P 500 constituents on each
+    linked factor, measures each factor's daily payoff with a cross-sectional regression of
+    open-to-open returns on all the ranks at once, and predicts each factor's payoff from its
+    trailing-year payoffs, conditioned on the standardized unlinked factors. A stock's score is
+    its predicted open-to-open return relative to the day's average. The algorithm holds the
+    top 5% of the scores, weighted by score and fully invested.
+    """
+
+    _MONTH = 21                       # sessions in the dataset's month
+    _LOOKBACK = 12 * _MONTH           # complete days in the estimation window
+    _TAIL_FRACTION = 0.05             # share of the eligible stocks the portfolio holds
+
+    def initialize(self) -> None:
+        self.set_start_date(2024, 11, 1)
+        self.set_end_date(2026, 10, 1)
+        self.set_cash(10_000_000)
+        self.settings.seed_initial_prices = True
+        self.universe_settings.resolution = Resolution.DAILY
+        self._linked = list(Factors.EQUITY_FACTOR_NAMES)
+        self._unlinked = list(Factors.UNLINKED_FACTOR_NAMES)
+        self._members = {}            # constituent -> linked factor values, from the latest universe data
+        self._new_data = False        # whether universe data arrived since the last rebalance
+        self._unlinked_values = {}    # most recent value of each unlinked factor
+        self._opens = {}              # session date -> {symbol: open price}
+        self._days = deque(maxlen=2)  # the last two trading days, kept until their returns are complete
+        self._payoffs = deque(maxlen=self._LOOKBACK)  # (day, payoff of each linked factor, unlinked values)
+        self._first_payoff = {}       # linked factor index -> day of its first payoff
+        self.add_universe(FactorsUniverse, self._select)
+        self.schedule.on(self.date_rules.every_day("SPY"), self.time_rules.at(8, 0), self._rebalance)
+        # The estimation window comes from the year before the start date.
+        self.set_warm_up(timedelta(days=380))
+
+    def _select(self, rows: List[Factors]) -> List[Symbol]:
+        previous = set(self._members)
+        members = {}
+        for row in rows:
+            keys = set(row.keys)
+            if row.is_unlinked:
+                self._unlinked_values.update({name: float(row[name]) for name in self._unlinked if name in keys})
+            else:
+                members[row.symbol] = {name: float(row[name]) for name in self._linked if name in keys}
+        self._members = members
+        self._new_data = True
+        # Keep the previous constituents subscribed one more session, so a stock that leaves the
+        # index still has the next open that completes its last open-to-open return.
+        return list(previous | set(members))
+
+    def on_data(self, slice: Slice) -> None:
+        for symbol, bar in slice.bars.items():
+            if not bar.is_fill_forward:
+                self._opens.setdefault(bar.time.date(), {})[symbol] = bar.open
+
+    def _rebalance(self) -> None:
+        # The day two sessions back now has a complete open-to-open return.
+        if len(self._days) == 2:
+            self._record_payoff(*self._days)
+        today = self._snapshot()
+        self._days.append(today)
+        if self.is_warming_up or today.ranks is None:
+            return
+        model = self._factor_weights(today.unlinked)
+        if model is None:
+            return
+        carried, weights = model
+        targets = self._targets(today, carried, weights)
+        names = [name for name, keep in zip(self._linked, carried) if keep]
+        for name, weight in zip(names, weights):
+            self.plot("Factor Weights", name, float(weight))
+        self.set_holdings(targets, liquidate_existing_holdings=True)
+
+    def _snapshot(self) -> DaySnapshot:
+        unlinked = np.array([self._unlinked_values.get(name, np.nan) for name in self._unlinked])
+        if not self._new_data:
+            return DaySnapshot(self.time.date(), [], None, None, unlinked)
+        self._new_data = False
+        symbols = list(self._members)
+        ranks = np.zeros((len(symbols), len(self._linked)))
+        active = np.zeros(len(self._linked), dtype=bool)
+        for k, name in enumerate(self._linked):
+            rows = [i for i, symbol in enumerate(symbols) if name in self._members[symbol]]
+            if len(rows) < 2:
+                continue
+            values = [self._members[symbols[i]][name] for i in rows]
+            # Ranks scaled to run from -1/2 to 1/2; a constituent without a value keeps the middle rank, 0.
+            ranks[rows, k] = (rankdata(values) - 1) / (len(rows) - 1) - 0.5
+            active[k] = True
+        if not active.any():
+            return DaySnapshot(self.time.date(), symbols, None, None, unlinked)
+        return DaySnapshot(self.time.date(), symbols, ranks, active, unlinked)
+
+    def _record_payoff(self, day: DaySnapshot, next_day: DaySnapshot) -> None:
+        start_opens = self._opens.pop(day.day, {})
+        end_opens = self._opens.get(next_day.day, {})
+        for stale in [session for session in self._opens if session < next_day.day]:
+            del self._opens[stale]
+        if day.ranks is None:
+            return
+        rows, returns = [], []
+        for i, symbol in enumerate(day.symbols):
+            start, end = start_opens.get(symbol), end_opens.get(symbol)
+            if start and end:
+                rows.append(i)
+                returns.append(end / start - 1)
+        if not rows:
+            return
+        # Regress the open-to-open returns on all active factors' ranks at once, with an intercept.
+        columns = np.flatnonzero(day.active)
+        design = np.column_stack([np.ones(len(rows)), day.ranks[np.ix_(rows, columns)]])
+        coefficients = np.linalg.lstsq(design, np.array(returns), rcond=None)[0]
+        payoff = np.full(len(self._linked), np.nan)
+        payoff[columns] = coefficients[1:]
+        self._payoffs.append((day.day, payoff, day.unlinked))
+        for k in columns:
+            self._first_payoff.setdefault(k, day.day)
+
+    def _factor_weights(self, unlinked_today: np.ndarray) -> tuple[np.ndarray, np.ndarray] | None:
+        """The linked factors that carry weight today, and the predicted payoff of each."""
+        if len(self._payoffs) < self._LOOKBACK:
+            return None
+        window_start = self._payoffs[0][0]
+        # A linked factor carries weight once its payoff history spans the full window.
+        carried = np.array([k in self._first_payoff and self._first_payoff[k] <= window_start for k in range(len(self._linked))])
+        if not carried.any():
+            return None
+        payoffs = np.array([payoff for _, payoff, _ in self._payoffs])[:, carried]
+        unlinked = np.array([values for _, _, values in self._payoffs])
+        rows = ~np.isnan(payoffs).any(axis=1)
+        # An unlinked factor takes part when it has values throughout the window and today, and it moved.
+        known = ~np.isnan(unlinked).any(axis=0) & ~np.isnan(unlinked_today)
+        mean = unlinked[:, known].mean(axis=0)
+        std = unlinked[:, known].std(axis=0)
+        moved = std > 0
+        z = (unlinked[:, known][:, moved] - mean[moved]) / std[moved]
+        z_today = (unlinked_today[known][moved] - mean[moved]) / std[moved]
+        design = np.column_stack([np.ones(rows.sum()), z[rows]])
+        # The fit needs more complete days than coefficients.
+        if len(design) <= design.shape[1]:
+            return None
+        # Regress each factor's payoffs on the standardized unlinked values and predict at today's values.
+        coefficients = np.linalg.lstsq(design, payoffs[rows], rcond=None)[0]
+        point = np.concatenate([[1.0], z_today])
+        return carried, point @ coefficients
+
+    def _targets(self, today: DaySnapshot, carried: np.ndarray, weights: np.ndarray) -> List[PortfolioTarget]:
+        eligible = [
+            i for i, symbol in enumerate(today.symbols)
+            if symbol in self.securities and self.securities[symbol].is_tradable and self.securities[symbol].price > 0
+        ]
+        if not eligible:
+            return []
+        scores = today.ranks[eligible][:, carried] @ weights
+        # Hold the highest tail of the scores, each stock weighted by its score above the day's average.
+        excess = scores - scores.mean()
+        count = int(len(eligible) * self._TAIL_FRACTION)
+        top = np.argsort(excess)[len(eligible) - count:]
+        positions = np.zeros(len(eligible))
+        positions[top] = np.maximum(excess[top], 0)
+        total = positions.sum()
+        if total == 0:
+            return []
+        positions = positions / total
+        return [PortfolioTarget(today.symbols[i], weight) for i, weight in zip(eligible, positions) if weight != 0]
+
#region imports
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using MathNet.Numerics.LinearAlgebra;
+using QuantConnect.Algorithm.Framework.Portfolio;
+using QuantConnect.Data;
+using QuantConnect.DataSource;
+#endregion
+
+namespace QuantConnect.Algorithm.CSharp
+{
+    /// <summary>
+    /// What the algorithm knows about one trading day before its open.
+    /// </summary>
+    public class DaySnapshot
+    {
+        public DateTime Day;          // the trading day
+        public List<Symbol> Symbols;  // S&P 500 constituents of the day
+        public double[,] Ranks;       // scaled ranks: one row per constituent, one column per linked factor
+        public bool[] Active;         // linked factors with ranks that day
+        public double[] Unlinked;     // unlinked factor values known before the open
+    }
+
+    /// <summary>
+    /// Conditional multi-factor long-only portfolio on the QuantConnect Factors dataset.
+    ///
+    /// Every trading day before the open, the algorithm ranks the S&P 500 constituents on each
+    /// linked factor, measures each factor's daily payoff with a cross-sectional regression of
+    /// open-to-open returns on all the ranks at once, and predicts each factor's payoff from its
+    /// trailing-year payoffs, conditioned on the standardized unlinked factors. A stock's score is
+    /// its predicted open-to-open return relative to the day's average. The algorithm holds the
+    /// top 5% of the scores, weighted by score and fully invested.
+    /// </summary>
+    public class FactorsPortfolioAlgorithm : QCAlgorithm
+    {
+        private const int Month = 21;               // sessions in the dataset's month
+        private const int Lookback = 12 * Month;    // complete days in the estimation window
+        private const double TailFraction = 0.05;   // share of the eligible stocks the portfolio holds
+
+        private string[] _linked;
+        private string[] _unlinked;
+        // constituent -> linked factor values, from the latest universe data
+        private Dictionary<Symbol, Dictionary<string, double>> _members = new();
+        // the constituents in the universe data's order
+        private List<Symbol> _memberOrder = new();
+        // whether universe data arrived since the last rebalance
+        private bool _newData;
+        // most recent value of each unlinked factor
+        private readonly Dictionary<string, double> _unlinkedValues = new();
+        // session date -> {symbol: open price}
+        private readonly Dictionary<DateTime, Dictionary<Symbol, decimal>> _opens = new();
+        // the last two trading days, kept until their returns are complete
+        private readonly List<DaySnapshot> _days = new();
+        // (day, payoff of each linked factor, unlinked values) of the Lookback most recent complete days
+        private readonly List<(DateTime Day, double[] Payoff, double[] Unlinked)> _payoffs = new();
+        // linked factor index -> day of its first payoff
+        private readonly Dictionary<int, DateTime> _firstPayoff = new();
+
+        public override void Initialize()
+        {
+            SetStartDate(2024, 11, 1);
+            SetEndDate(2026, 10, 1);
+            SetCash(10_000_000);
+            Settings.SeedInitialPrices = true;
+            UniverseSettings.Resolution = Resolution.Daily;
+            _linked = Factors.EquityFactorNames;
+            _unlinked = Factors.UnlinkedFactorNames;
+            AddUniverse<FactorsUniverse>(Select);
+            Schedule.On(DateRules.EveryDay("SPY"), TimeRules.At(8, 0), Rebalance);
+            // The estimation window comes from the year before the start date.
+            SetWarmUp(TimeSpan.FromDays(380));
+        }
+
+        private IEnumerable<Symbol> Select(IEnumerable<BaseData> rows)
+        {
+            var selected = _members.Keys.ToHashSet();
+            var members = new Dictionary<Symbol, Dictionary<string, double>>();
+            var order = new List<Symbol>();
+            foreach (var row in rows.OfType<Factors>())
+            {
+                if (row.IsUnlinked)
+                {
+                    foreach (var name in _unlinked)
+                    {
+                        if (row.TryGetValue(name, out var value))
+                        {
+                            _unlinkedValues[name] = (double)value;
+                        }
+                    }
+                    continue;
+                }
+                var values = new Dictionary<string, double>();
+                foreach (var name in _linked)
+                {
+                    if (row.TryGetValue(name, out var value))
+                    {
+                        values[name] = (double)value;
+                    }
+                }
+                if (members.TryAdd(row.Symbol, values))
+                {
+                    order.Add(row.Symbol);
+                }
+            }
+            _members = members;
+            _memberOrder = order;
+            _newData = true;
+            // Keep the previous constituents subscribed one more session, so a stock that leaves the
+            // index still has the next open that completes its last open-to-open return.
+            selected.UnionWith(order);
+            return selected;
+        }
+
+        public override void OnData(Slice slice)
+        {
+            foreach (var bar in slice.Bars.Values)
+            {
+                if (bar.IsFillForward)
+                {
+                    continue;
+                }
+                if (!_opens.TryGetValue(bar.Time.Date, out var opens))
+                {
+                    _opens[bar.Time.Date] = opens = new Dictionary<Symbol, decimal>();
+                }
+                opens[bar.Symbol] = bar.Open;
+            }
+        }
+
+        private void Rebalance()
+        {
+            // The day two sessions back now has a complete open-to-open return.
+            if (_days.Count == 2)
+            {
+                RecordPayoff(_days[0], _days[1]);
+                _days.RemoveAt(0);
+            }
+            var today = Snapshot();
+            _days.Add(today);
+            if (IsWarmingUp || today.Ranks == null)
+            {
+                return;
+            }
+            var model = FactorWeights(today.Unlinked);
+            if (model == null)
+            {
+                return;
+            }
+            var (carried, weights) = model.Value;
+            var targets = Targets(today, carried, weights);
+            var names = _linked.Where((name, k) => carried[k]).ToArray();
+            for (var j = 0; j < names.Length; j++)
+            {
+                Plot("Factor Weights", names[j], weights[j]);
+            }
+            SetHoldings(targets, liquidateExistingHoldings: true);
+        }
+
+        private DaySnapshot Snapshot()
+        {
+            var unlinked = _unlinked
+                .Select(name => _unlinkedValues.TryGetValue(name, out var value) ? value : double.NaN)
+                .ToArray();
+            if (!_newData)
+            {
+                return new DaySnapshot { Day = Time.Date, Symbols = new List<Symbol>(), Unlinked = unlinked };
+            }
+            _newData = false;
+            var symbols = _memberOrder;
+            var ranks = new double[symbols.Count, _linked.Length];
+            var active = new bool[_linked.Length];
+            for (var k = 0; k < _linked.Length; k++)
+            {
+                var name = _linked[k];
+                var rows = Enumerable.Range(0, symbols.Count)
+                    .Where(i => _members[symbols[i]].ContainsKey(name))
+                    .ToList();
+                if (rows.Count < 2)
+                {
+                    continue;
+                }
+                var rank = AverageRanks(rows.Select(i => _members[symbols[i]][name]).ToArray());
+                // Ranks scaled to run from -1/2 to 1/2; a constituent without a value keeps the middle rank, 0.
+                for (var j = 0; j < rows.Count; j++)
+                {
+                    ranks[rows[j], k] = (rank[j] - 1) / (rows.Count - 1) - 0.5;
+                }
+                active[k] = true;
+            }
+            if (!active.Any(isActive => isActive))
+            {
+                return new DaySnapshot { Day = Time.Date, Symbols = symbols, Unlinked = unlinked };
+            }
+            return new DaySnapshot { Day = Time.Date, Symbols = symbols, Ranks = ranks, Active = active, Unlinked = unlinked };
+        }
+
+        // Ranks from 1 for the lowest value to n for the highest; tied values share their average rank.
+        private static double[] AverageRanks(double[] values)
+        {
+            var order = Enumerable.Range(0, values.Length).OrderBy(i => values[i]).ToArray();
+            var ranks = new double[values.Length];
+            var start = 0;
+            while (start < order.Length)
+            {
+                var end = start;
+                while (end + 1 < order.Length && values[order[end + 1]] == values[order[start]])
+                {
+                    end++;
+                }
+                for (var j = start; j <= end; j++)
+                {
+                    ranks[order[j]] = (start + end) / 2.0 + 1;
+                }
+                start = end + 1;
+            }
+            return ranks;
+        }
+
+        private void RecordPayoff(DaySnapshot day, DaySnapshot nextDay)
+        {
+            _opens.Remove(day.Day, out var startOpens);
+            _opens.TryGetValue(nextDay.Day, out var endOpens);
+            foreach (var stale in _opens.Keys.Where(session => session < nextDay.Day).ToList())
+            {
+                _opens.Remove(stale);
+            }
+            if (day.Ranks == null || startOpens == null || endOpens == null)
+            {
+                return;
+            }
+            var rows = new List<int>();
+            var returns = new List<double>();
+            for (var i = 0; i < day.Symbols.Count; i++)
+            {
+                if (startOpens.TryGetValue(day.Symbols[i], out var start) && start != 0
+                    && endOpens.TryGetValue(day.Symbols[i], out var end) && end != 0)
+                {
+                    rows.Add(i);
+                    returns.Add((double)end / (double)start - 1);
+                }
+            }
+            if (rows.Count == 0)
+            {
+                return;
+            }
+            // Regress the open-to-open returns on all active factors' ranks at once, with an intercept.
+            var columns = Enumerable.Range(0, _linked.Length).Where(k => day.Active[k]).ToArray();
+            var design = Matrix<double>.Build.Dense(rows.Count, columns.Length + 1,
+                (i, j) => j == 0 ? 1 : day.Ranks[rows[i], columns[j - 1]]);
+            var coefficients = design.PseudoInverse() * Vector<double>.Build.DenseOfEnumerable(returns);
+            var payoff = Enumerable.Repeat(double.NaN, _linked.Length).ToArray();
+            for (var j = 0; j < columns.Length; j++)
+            {
+                payoff[columns[j]] = coefficients[j + 1];
+                _firstPayoff.TryAdd(columns[j], day.Day);
+            }
+            _payoffs.Add((day.Day, payoff, day.Unlinked));
+            if (_payoffs.Count > Lookback)
+            {
+                _payoffs.RemoveAt(0);
+            }
+        }
+
+        // The linked factors that carry weight today, and the predicted payoff of each.
+        private (bool[] Carried, double[] Weights)? FactorWeights(double[] unlinkedToday)
+        {
+            if (_payoffs.Count < Lookback)
+            {
+                return null;
+            }
+            var windowStart = _payoffs[0].Day;
+            // A linked factor carries weight once its payoff history spans the full window.
+            var carried = Enumerable.Range(0, _linked.Length)
+                .Select(k => _firstPayoff.TryGetValue(k, out var first) && first <= windowStart)
+                .ToArray();
+            var factors = Enumerable.Range(0, _linked.Length).Where(k => carried[k]).ToArray();
+            if (factors.Length == 0)
+            {
+                return null;
+            }
+            var rows = _payoffs.Where(day => factors.All(k => !double.IsNaN(day.Payoff[k]))).ToList();
+            // An unlinked factor takes part when it has values throughout the window and today, and it moved.
+            var conditions = new List<(int Index, double Mean, double Std)>();
+            for (var j = 0; j < _unlinked.Length; j++)
+            {
+                var index = j;
+                if (double.IsNaN(unlinkedToday[index]) || _payoffs.Any(day => double.IsNaN(day.Unlinked[index])))
+                {
+                    continue;
+                }
+                var mean = _payoffs.Average(day => day.Unlinked[index]);
+                var std = Math.Sqrt(_payoffs.Average(day => Math.Pow(day.Unlinked[index] - mean, 2)));
+                if (std > 0)
+                {
+                    conditions.Add((index, mean, std));
+                }
+            }
+            var design = Matrix<double>.Build.Dense(rows.Count, conditions.Count + 1,
+                (i, j) => j == 0 ? 1 : (rows[i].Unlinked[conditions[j - 1].Index] - conditions[j - 1].Mean) / conditions[j - 1].Std);
+            // The fit needs more complete days than coefficients.
+            if (design.RowCount <= design.ColumnCount)
+            {
+                return null;
+            }
+            // Regress each factor's payoffs on the standardized unlinked values and predict at today's values.
+            var payoffs = Matrix<double>.Build.Dense(rows.Count, factors.Length, (i, j) => rows[i].Payoff[factors[j]]);
+            var coefficients = design.PseudoInverse() * payoffs;
+            var point = Vector<double>.Build.Dense(conditions.Count + 1,
+                j => j == 0 ? 1 : (unlinkedToday[conditions[j - 1].Index] - conditions[j - 1].Mean) / conditions[j - 1].Std);
+            return (carried, (coefficients.Transpose() * point).ToArray());
+        }
+
+        private List<PortfolioTarget> Targets(DaySnapshot today, bool[] carried, double[] weights)
+        {
+            var eligible = Enumerable.Range(0, today.Symbols.Count)
+                .Where(i => Securities.TryGetValue(today.Symbols[i], out var security) && security.IsTradable && security.Price > 0)
+                .ToList();
+            if (eligible.Count == 0)
+            {
+                return new List<PortfolioTarget>();
+            }
+            var factors = Enumerable.Range(0, _linked.Length).Where(k => carried[k]).ToArray();
+            var scores = eligible
+                .Select(i => factors.Select((k, j) => today.Ranks[i, k] * weights[j]).Sum())
+                .ToArray();
+            // Hold the highest tail of the scores, each stock weighted by its score above the day's average.
+            var mean = scores.Average();
+            var excess = scores.Select(score => score - mean).ToArray();
+            var count = (int)(eligible.Count * TailFraction);
+            var top = Enumerable.Range(0, eligible.Count)
+                .OrderBy(i => excess[i])
+                .Skip(eligible.Count - count)
+                .ToHashSet();
+            var positions = excess.Select((value, i) => top.Contains(i) ? Math.Max(value, 0) : 0).ToArray();
+            var total = positions.Sum();
+            if (total == 0)
+            {
+                return new List<PortfolioTarget>();
+            }
+            return eligible
+                .Select((i, j) => (Symbol: today.Symbols[i], Weight: positions[j] / total))
+                .Where(target => target.Weight != 0)
+                .Select(target => new PortfolioTarget(target.Symbol, (decimal)target.Weight))
+                .ToList();
+        }
+    }
+}
+
+

Framework Algorithm Example

+

The following example algorithm selects the SPY constituents, the dataset's coverage universe. The Alpha model emits daily ROC-weighted insights for the Equities that moved more than 1% over the last trading session, targeting only long positions while the 1-month US Treasury yield is below 4% and only short positions otherwise.

+ +
+
from AlgorithmImports import *
+
+
+class FactorsFrameworkAlgorithm(QCAlgorithm):
+
+    def initialize(self) -> None:
+        self.set_start_date(2025, 9, 1)
+        self.set_end_date(2025, 12, 31)
+        self.set_cash(10_000_000)
+
+        self.universe_settings.resolution = Resolution.DAILY
+        self.add_universe_selection(ETFConstituentsUniverseSelectionModel("SPY"))
+        self.add_alpha(FactorsAlphaModel(self))
+        self.set_portfolio_construction(InsightWeightingPortfolioConstructionModel())
+
+
+class FactorsAlphaModel(AlphaModel):
+
+    def __init__(self, algorithm: QCAlgorithm) -> None:
+        self._unlinked_factors = algorithm.add_data(Factors, Factors.UNLINKED).symbol
+        self._roc_by_symbol = {}
+
+    def update(self, algorithm: QCAlgorithm, data: Slice) -> List[Insight]:
+        # Cache the Equities that moved more than 1%. Their factors arrive with
+        # the session's 4PM close, ahead of the unlinked factors row.
+        for symbol, factors in data.get(Factors).items():
+            if Factors.ROC_1_DAY in factors.keys and abs(factors[Factors.ROC_1_DAY]) > 0.01:
+                self._roc_by_symbol[symbol.underlying] = factors[Factors.ROC_1_DAY]
+
+        # The unlinked factors arrive at 4:30PM, when the US Treasury publishes
+        # the daily yield curve rates, completing the session's signals.
+        unlinked_factors = data.get(Factors).get(self._unlinked_factors)
+        if not unlinked_factors or Factors.UST_YIELD_1_MONTH not in unlinked_factors.keys:
+            return []
+
+        # Consume the session's cache so stale values never roll into the
+        # next emission.
+        roc_by_symbol = self._roc_by_symbol
+        self._roc_by_symbol = {}
+
+        # While short-term rates are low, only target long assets. Otherwise,
+        # only target short assets.
+        if unlinked_factors[Factors.UST_YIELD_1_MONTH] < 4:
+            direction = InsightDirection.UP
+            selected = {s: roc for s, roc in roc_by_symbol.items() if roc > 0}
+        else:
+            direction = InsightDirection.DOWN
+            selected = {s: roc for s, roc in roc_by_symbol.items() if roc < 0}
+        if not selected:
+            return []
+
+        # Weight each insight by the magnitude of the asset's ROC.
+        total_roc = sum(abs(roc) for roc in selected.values())
+        return [
+            Insight.price(symbol, timedelta(1), direction, weight=abs(roc)/total_roc)
+            for symbol, roc in selected.items()
+        ]
+
+    def on_securities_changed(self, algorithm: QCAlgorithm, changes: SecurityChanges) -> None:
+        for security in changes.added_securities:
+            security.factors = algorithm.add_data(Factors, security.symbol).symbol
+        for security in changes.removed_securities:
+            algorithm.remove_security(security.factors)
+            self._roc_by_symbol.pop(security.symbol, None)
+
public class FactorsFrameworkAlgorithm : QCAlgorithm
+{
+    public override void Initialize()
+    {
+        SetStartDate(2025, 9, 1);
+        SetEndDate(2025, 12, 31);
+        SetCash(10000000);
+
+        UniverseSettings.Resolution = Resolution.Daily;
+        AddUniverseSelection(new ETFConstituentsUniverseSelectionModel("SPY"));
+        AddAlpha(new FactorsAlphaModel(this));
+        SetPortfolioConstruction(new InsightWeightingPortfolioConstructionModel());
+    }
+}
+
+public class FactorsAlphaModel : AlphaModel
+{
+    private readonly Symbol _unlinkedFactors;
+    private Dictionary<Symbol, decimal> _rocBySymbol = new Dictionary<Symbol, decimal>();
+
+    public FactorsAlphaModel(QCAlgorithm algorithm)
+    {
+        _unlinkedFactors = algorithm.AddData<Factors>(Factors.Unlinked).Symbol;
+    }
+
+    public override IEnumerable<Insight> Update(QCAlgorithm algorithm, Slice data)
+    {
+        // Cache the Equities that moved more than 1%. Their factors arrive with
+        // the session's 4PM close, ahead of the unlinked factors row.
+        foreach (var factors in data.Get<Factors>().Values)
+        {
+            if (factors.ContainsKey(Factors.Roc1Day) && Math.Abs(factors[Factors.Roc1Day]) > 0.01m)
+            {
+                _rocBySymbol[factors.Symbol.Underlying] = factors[Factors.Roc1Day];
+            }
+        }
+
+        // The unlinked factors arrive at 4:30PM, when the US Treasury publishes
+        // the daily yield curve rates, completing the session's signals.
+        if (!data.Get<Factors>().TryGetValue(_unlinkedFactors, out var unlinkedFactors) || !unlinkedFactors.ContainsKey(Factors.UstYield1Month))
+        {
+            return Enumerable.Empty<Insight>();
+        }
+
+        // Consume the session's cache so stale values never roll into the
+        // next emission.
+        var rocBySymbol = _rocBySymbol;
+        _rocBySymbol = new Dictionary<Symbol, decimal>();
+
+        // While short-term rates are low, only target long assets. Otherwise,
+        // only target short assets.
+        InsightDirection direction;
+        List<KeyValuePair<Symbol, decimal>> selected;
+        if (unlinkedFactors[Factors.UstYield1Month] < 4)
+        {
+            direction = InsightDirection.Up;
+            selected = rocBySymbol.Where(kvp => kvp.Value > 0).ToList();
+        }
+        else
+        {
+            direction = InsightDirection.Down;
+            selected = rocBySymbol.Where(kvp => kvp.Value < 0).ToList();
+        }
+        if (selected.Count == 0)
+        {
+            return Enumerable.Empty<Insight>();
+        }
+
+        // Weight each insight by the magnitude of the asset's ROC.
+        var totalRoc = selected.Sum(kvp => Math.Abs(kvp.Value));
+        return selected.Select(kvp =>
+            Insight.Price(kvp.Key, TimeSpan.FromDays(1), direction, weight: (double)(Math.Abs(kvp.Value) / totalRoc)));
+    }
+
+    public override void OnSecuritiesChanged(QCAlgorithm algorithm, SecurityChanges changes)
+    {
+        foreach (dynamic security in changes.AddedSecurities)
+        {
+            security.Factors = algorithm.AddData<Factors>(security.Symbol).Symbol;
+        }
+        foreach (dynamic security in changes.RemovedSecurities)
+        {
+            algorithm.RemoveSecurity(security.Factors);
+            _rocBySymbol.Remove(security.Symbol);
+        }
+    }
+}
+
\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/99 Data Point Attributes.html new file mode 100644 index 0000000000..8da14fbaea --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/99 Data Point Attributes.html @@ -0,0 +1,9 @@ +

The Factors dataset provides Factors and FactorsUniverse objects.

+ +

Factors Attributes

+

Factors objects has the following attributes:

+
+ +

FactorsUniverse Attributes

+

FactorsUniverse objects has the following attributes:

+
\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/metadata.json b/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/metadata.json new file mode 100644 index 0000000000..69c1641b8d --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Factors/metadata.json @@ -0,0 +1,12 @@ +{ + "type": "metadata", + "values": { + "description": "Factors dataset from QuantConnect.", + "keywords": "data, financial data, alternative dataset", + "og:description": "Factors dataset from QuantConnect.", + "og:title": "Factors - Documentation QuantConnect.com", + "og:type": "website", + "og:site_name": "Factors - QuantConnect.com", + "og:image": "https://cdn.quantconnect.com/docs/i/writing-algorithms/datasets/quantconnect/factors.png" + } +} \ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Fama French/01 Introduction.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fama French/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Fama French/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fama French/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Fama French/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fama French/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Fama French/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fama French/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Fama French/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fama French/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Fama French/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fama French/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Fama French/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fama French/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Fama French/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fama French/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Fama French/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fama French/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Fama French/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fama French/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Fama French/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fama French/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Fama French/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fama French/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Fama French/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fama French/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Fama French/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fama French/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Fama French/08 Remove Subscriptions.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fama French/08 Remove Subscriptions.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Fama French/08 Remove Subscriptions.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fama French/08 Remove Subscriptions.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Fama French/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fama French/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Fama French/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fama French/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Fama French/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fama French/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Fama French/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fama French/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Fama French/metadata.json b/03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fama French/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/13 Fama French/metadata.json rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fama French/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fear and Greed/01 Introduction.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/15 Fear and Greed/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fear and Greed/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/15 Fear and Greed/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fear and Greed/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/15 Fear and Greed/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fear and Greed/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/15 Fear and Greed/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fear and Greed/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/15 Fear and Greed/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fear and Greed/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/15 Fear and Greed/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fear and Greed/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/15 Fear and Greed/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fear and Greed/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/15 Fear and Greed/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fear and Greed/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/15 Fear and Greed/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fear and Greed/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/15 Fear and Greed/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fear and Greed/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/15 Fear and Greed/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fear and Greed/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/15 Fear and Greed/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fear and Greed/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/15 Fear and Greed/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fear and Greed/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/15 Fear and Greed/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fear and Greed/08 Remove Subscription.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/15 Fear and Greed/08 Remove Subscription.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fear and Greed/08 Remove Subscription.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/15 Fear and Greed/08 Remove Subscription.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fear and Greed/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/15 Fear and Greed/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fear and Greed/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/15 Fear and Greed/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fear and Greed/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/15 Fear and Greed/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fear and Greed/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/15 Fear and Greed/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fear and Greed/metadata.json b/03 Writing Algorithms/14 Datasets/02 QuantConnect/15 Fear and Greed/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/14 Fear and Greed/metadata.json rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/15 Fear and Greed/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/15 International Future Universe/01 Introduction.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/16 International Future Universe/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/15 International Future Universe/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/16 International Future Universe/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/15 International Future Universe/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/16 International Future Universe/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/15 International Future Universe/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/16 International Future Universe/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/15 International Future Universe/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/16 International Future Universe/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/15 International Future Universe/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/16 International Future Universe/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/15 International Future Universe/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/16 International Future Universe/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/15 International Future Universe/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/16 International Future Universe/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/15 International Future Universe/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/16 International Future Universe/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/15 International Future Universe/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/16 International Future Universe/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/15 International Future Universe/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/16 International Future Universe/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/15 International Future Universe/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/16 International Future Universe/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/15 International Future Universe/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/16 International Future Universe/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/15 International Future Universe/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/16 International Future Universe/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/15 International Future Universe/08 Supported Assets.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/16 International Future Universe/08 Supported Assets.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/15 International Future Universe/08 Supported Assets.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/16 International Future Universe/08 Supported Assets.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/15 International Future Universe/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/16 International Future Universe/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/15 International Future Universe/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/16 International Future Universe/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/15 International Future Universe/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/16 International Future Universe/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/15 International Future Universe/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/16 International Future Universe/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/15 International Future Universe/metadata.json b/03 Writing Algorithms/14 Datasets/02 QuantConnect/16 International Future Universe/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/15 International Future Universe/metadata.json rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/16 International Future Universe/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/01 Introduction.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/08 Universe Selection.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/08 Universe Selection.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/08 Universe Selection.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/08 Universe Selection.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/09 Universe History.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/09 Universe History.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/09 Universe History.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/09 Universe History.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/10 Remove Subscriptions.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/10 Remove Subscriptions.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/10 Remove Subscriptions.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/10 Remove Subscriptions.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/11 Supported Assets.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/11 Supported Assets.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/11 Supported Assets.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/11 Supported Assets.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/metadata.json b/03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/16 Kraken Crypto Price Data/metadata.json rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Kraken Crypto Price Data/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Spectral Tick Flow Signal/01 Introduction.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/18 Spectral Tick Flow Signal/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Spectral Tick Flow Signal/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/18 Spectral Tick Flow Signal/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equity Coarse Universe/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/18 Spectral Tick Flow Signal/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equity Coarse Universe/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/18 Spectral Tick Flow Signal/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Spectral Tick Flow Signal/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/18 Spectral Tick Flow Signal/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Spectral Tick Flow Signal/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/18 Spectral Tick Flow Signal/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Spectral Tick Flow Signal/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/18 Spectral Tick Flow Signal/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Spectral Tick Flow Signal/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/18 Spectral Tick Flow Signal/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Spectral Tick Flow Signal/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/18 Spectral Tick Flow Signal/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Spectral Tick Flow Signal/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/18 Spectral Tick Flow Signal/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Spectral Tick Flow Signal/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/18 Spectral Tick Flow Signal/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Spectral Tick Flow Signal/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/18 Spectral Tick Flow Signal/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Spectral Tick Flow Signal/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/18 Spectral Tick Flow Signal/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Spectral Tick Flow Signal/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/18 Spectral Tick Flow Signal/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Spectral Tick Flow Signal/08 Universe Selection.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/18 Spectral Tick Flow Signal/08 Universe Selection.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Spectral Tick Flow Signal/08 Universe Selection.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/18 Spectral Tick Flow Signal/08 Universe Selection.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Spectral Tick Flow Signal/09 Remove Subscriptions.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/18 Spectral Tick Flow Signal/09 Remove Subscriptions.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Spectral Tick Flow Signal/09 Remove Subscriptions.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/18 Spectral Tick Flow Signal/09 Remove Subscriptions.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Spectral Tick Flow Signal/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/18 Spectral Tick Flow Signal/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Spectral Tick Flow Signal/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/18 Spectral Tick Flow Signal/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Spectral Tick Flow Signal/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/18 Spectral Tick Flow Signal/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Spectral Tick Flow Signal/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/18 Spectral Tick Flow Signal/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Spectral Tick Flow Signal/metadata.json b/03 Writing Algorithms/14 Datasets/02 QuantConnect/18 Spectral Tick Flow Signal/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/17 Spectral Tick Flow Signal/metadata.json rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/18 Spectral Tick Flow Signal/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/18 US ETF Constituents/01 Introduction.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US ETF Constituents/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/18 US ETF Constituents/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US ETF Constituents/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/18 US ETF Constituents/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US ETF Constituents/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/18 US ETF Constituents/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US ETF Constituents/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/18 US ETF Constituents/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US ETF Constituents/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/18 US ETF Constituents/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US ETF Constituents/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/18 US ETF Constituents/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US ETF Constituents/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/18 US ETF Constituents/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US ETF Constituents/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/18 US ETF Constituents/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US ETF Constituents/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/18 US ETF Constituents/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US ETF Constituents/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/18 US ETF Constituents/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US ETF Constituents/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/18 US ETF Constituents/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US ETF Constituents/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/18 US ETF Constituents/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US ETF Constituents/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/18 US ETF Constituents/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US ETF Constituents/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/18 US ETF Constituents/08 Supported ETFs.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US ETF Constituents/08 Supported ETFs.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/18 US ETF Constituents/08 Supported ETFs.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US ETF Constituents/08 Supported ETFs.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/18 US ETF Constituents/09 Downloading Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US ETF Constituents/09 Downloading Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/18 US ETF Constituents/09 Downloading Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US ETF Constituents/09 Downloading Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/18 US ETF Constituents/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US ETF Constituents/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/18 US ETF Constituents/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US ETF Constituents/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/18 US ETF Constituents/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US ETF Constituents/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/18 US ETF Constituents/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US ETF Constituents/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/18 US ETF Constituents/metadata.json b/03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US ETF Constituents/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/18 US ETF Constituents/metadata.json rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US ETF Constituents/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US Equities Short Availability/01 Introduction.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equities Short Availability/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US Equities Short Availability/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equities Short Availability/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US Equities Short Availability/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equities Short Availability/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US Equities Short Availability/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equities Short Availability/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US Equities Short Availability/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equities Short Availability/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US Equities Short Availability/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equities Short Availability/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US Equities Short Availability/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equities Short Availability/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US Equities Short Availability/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equities Short Availability/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US Equities Short Availability/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equities Short Availability/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US Equities Short Availability/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equities Short Availability/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US Equities Short Availability/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equities Short Availability/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US Equities Short Availability/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equities Short Availability/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US Equities Short Availability/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equities Short Availability/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US Equities Short Availability/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equities Short Availability/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US Equities Short Availability/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equities Short Availability/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US Equities Short Availability/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equities Short Availability/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US Equities Short Availability/metadata.json b/03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equities Short Availability/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/19 US Equities Short Availability/metadata.json rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equities Short Availability/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equity Coarse Universe/01 Introduction.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Coarse Universe/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equity Coarse Universe/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Coarse Universe/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Option Universe/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Coarse Universe/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Option Universe/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Coarse Universe/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equity Coarse Universe/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Coarse Universe/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equity Coarse Universe/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Coarse Universe/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equity Coarse Universe/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Coarse Universe/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equity Coarse Universe/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Coarse Universe/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equity Coarse Universe/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Coarse Universe/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equity Coarse Universe/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Coarse Universe/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equity Coarse Universe/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Coarse Universe/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equity Coarse Universe/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Coarse Universe/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equity Coarse Universe/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Coarse Universe/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equity Coarse Universe/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Coarse Universe/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equity Coarse Universe/08 Downloading Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Coarse Universe/08 Downloading Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equity Coarse Universe/08 Downloading Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Coarse Universe/08 Downloading Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equity Coarse Universe/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Coarse Universe/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equity Coarse Universe/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Coarse Universe/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equity Coarse Universe/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Coarse Universe/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equity Coarse Universe/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Coarse Universe/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equity Coarse Universe/metadata.json b/03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Coarse Universe/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/20 US Equity Coarse Universe/metadata.json rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Coarse Universe/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Option Universe/01 Introduction.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Option Universe/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Option Universe/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Option Universe/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Future Option Universe/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Option Universe/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Future Option Universe/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Option Universe/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Option Universe/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Option Universe/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Option Universe/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Option Universe/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Option Universe/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Option Universe/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Option Universe/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Option Universe/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Option Universe/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Option Universe/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Option Universe/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Option Universe/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Option Universe/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Option Universe/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Option Universe/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Option Universe/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Option Universe/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Option Universe/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Option Universe/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Option Universe/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Option Universe/08 Supported Assets.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Option Universe/08 Supported Assets.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Option Universe/08 Supported Assets.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Option Universe/08 Supported Assets.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Option Universe/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Option Universe/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Option Universe/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Option Universe/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Option Universe/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Option Universe/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Option Universe/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Option Universe/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Option Universe/metadata.json b/03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Option Universe/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/21 US Equity Option Universe/metadata.json rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Option Universe/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/01 Introduction.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/03 Data Summary.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/03 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/03 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/03 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/04 Getting Started.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/04 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/04 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/04 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/05 Accessing Splits.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/05 Accessing Splits.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/05 Accessing Splits.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/05 Accessing Splits.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/06 Accessing Dividends.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/06 Accessing Dividends.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/06 Accessing Dividends.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/06 Accessing Dividends.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/07 Accessing Delistings.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/07 Accessing Delistings.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/07 Accessing Delistings.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/07 Accessing Delistings.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/08 Accessing Symbol Change Events.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/08 Accessing Symbol Change Events.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/08 Accessing Symbol Change Events.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/08 Accessing Symbol Change Events.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/09 Historical Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/09 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/09 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/09 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/10 Live Trading Considerations.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/10 Live Trading Considerations.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/10 Live Trading Considerations.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/10 Live Trading Considerations.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/11 Supported Assets.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/11 Supported Assets.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/11 Supported Assets.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/11 Supported Assets.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/metadata.json b/03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/22 US Equity Security Master/metadata.json rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Equity Security Master/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Future Option Universe/01 Introduction.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Option Universe/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Future Option Universe/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Option Universe/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Universe/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Option Universe/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Universe/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Option Universe/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Future Option Universe/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Option Universe/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Future Option Universe/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Option Universe/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Future Option Universe/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Option Universe/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Future Option Universe/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Option Universe/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Future Option Universe/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Option Universe/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Future Option Universe/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Option Universe/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Future Option Universe/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Option Universe/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Future Option Universe/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Option Universe/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Future Option Universe/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Option Universe/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Future Option Universe/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Option Universe/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Future Option Universe/08 Supported Assets.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Option Universe/08 Supported Assets.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Future Option Universe/08 Supported Assets.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Option Universe/08 Supported Assets.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Future Option Universe/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Option Universe/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Future Option Universe/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Option Universe/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Future Option Universe/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Option Universe/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Future Option Universe/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Option Universe/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Future Option Universe/metadata.json b/03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Option Universe/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/23 US Future Option Universe/metadata.json rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Option Universe/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Universe/01 Introduction.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Future Universe/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Universe/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Future Universe/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Future Universe/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Future Universe/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Universe/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Future Universe/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Universe/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Future Universe/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Universe/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Future Universe/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Universe/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Future Universe/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Universe/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Future Universe/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Universe/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Future Universe/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Universe/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Future Universe/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Universe/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Future Universe/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Universe/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Future Universe/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Universe/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Future Universe/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Universe/08 Supported Assets.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Future Universe/08 Supported Assets.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Universe/08 Supported Assets.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Future Universe/08 Supported Assets.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Universe/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Future Universe/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Universe/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Future Universe/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Universe/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Future Universe/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Universe/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Future Universe/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Universe/metadata.json b/03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Future Universe/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/24 US Future Universe/metadata.json rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Future Universe/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/01 Introduction.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Index Option Universe/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Index Option Universe/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/05 Key Concept.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/05 Key Concept.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/05 Key Concept.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/05 Key Concept.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/06 Data Normalization Modes.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/06 Data Normalization Modes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/06 Data Normalization Modes.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/06 Data Normalization Modes.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/07 Data Mapping Modes.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/07 Data Mapping Modes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/07 Data Mapping Modes.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/07 Data Mapping Modes.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/08 Tracking Contract Changes.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/08 Tracking Contract Changes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/08 Tracking Contract Changes.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/08 Tracking Contract Changes.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/09 Live Trading Considerations.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/09 Live Trading Considerations.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/09 Live Trading Considerations.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/09 Live Trading Considerations.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/10 Data Format.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/10 Data Format.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/10 Data Format.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/10 Data Format.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/11 Historical Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/11 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/11 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/11 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/12 Supported Assets.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/12 Supported Assets.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/12 Supported Assets.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/12 Supported Assets.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/metadata.json b/03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/25 US Futures Security Master/metadata.json rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Futures Security Master/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Index Option Universe/01 Introduction.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/27 US Index Option Universe/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Index Option Universe/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/27 US Index Option Universe/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/27 US Index Option Universe/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/27 US Index Option Universe/02 About the Provider.html new file mode 100644 index 0000000000..d679d3ccb1 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/02 QuantConnect/27 US Index Option Universe/02 About the Provider.html @@ -0,0 +1,3 @@ +

+QuantConnect was founded in 2012 to serve quants everywhere with the best possible algorithmic trading technology. Seeking to disrupt a notoriously closed-source industry, QuantConnect takes a radically open-source approach to algorithmic trading. Through the QuantConnect web platform, more than 50,000 quants are served every month. +

\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Index Option Universe/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/27 US Index Option Universe/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Index Option Universe/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/27 US Index Option Universe/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Index Option Universe/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/27 US Index Option Universe/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Index Option Universe/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/27 US Index Option Universe/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Index Option Universe/05 Specification Over Time.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/27 US Index Option Universe/05 Specification Over Time.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Index Option Universe/05 Specification Over Time.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/27 US Index Option Universe/05 Specification Over Time.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Index Option Universe/06 Requesting Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/27 US Index Option Universe/06 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Index Option Universe/06 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/27 US Index Option Universe/06 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Index Option Universe/07 Accessing Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/27 US Index Option Universe/07 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Index Option Universe/07 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/27 US Index Option Universe/07 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Index Option Universe/08 Historical Data.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/27 US Index Option Universe/08 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Index Option Universe/08 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/27 US Index Option Universe/08 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Index Option Universe/09 Supported Assets.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/27 US Index Option Universe/09 Supported Assets.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Index Option Universe/09 Supported Assets.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/27 US Index Option Universe/09 Supported Assets.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Index Option Universe/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/27 US Index Option Universe/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Index Option Universe/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/27 US Index Option Universe/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Index Option Universe/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/02 QuantConnect/27 US Index Option Universe/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Index Option Universe/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/27 US Index Option Universe/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Index Option Universe/metadata.json b/03 Writing Algorithms/14 Datasets/02 QuantConnect/27 US Index Option Universe/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/02 QuantConnect/26 US Index Option Universe/metadata.json rename to 03 Writing Algorithms/14 Datasets/02 QuantConnect/27 US Index Option Universe/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/00.json b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/00.json new file mode 100644 index 0000000000..2b74681ad8 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/00.json @@ -0,0 +1,8 @@ +{ + "type": "landing", + "heading": "Federal Deposit Insurance Corporation", + "subHeading": "", + "content": "

The Federal Deposit Insurance Corporation is an independent agency created by Congress in 1933 to maintain stability and public confidence in the nation's financial system. The FDIC insures deposits, examines and supervises financial institutions for safety and soundness and consumer protection, and manages receiverships when banks fail.

", + "alsoLinks": [], + "featureShortDescription": {} +} \ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/01 Introduction.html b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/01 Introduction.html new file mode 100644 index 0000000000..e4d339ced6 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/01 Introduction.html @@ -0,0 +1,3 @@ +

The US Bank Failures dataset by the Federal Deposit Insurance Corporation (FDIC) tracks the failures of FDIC-insured banks, with the assets and deposits of each bank and how the FDIC resolved it. The data covers 4,117 bank failures, starts in April 1934, and is delivered on a daily frequency. This dataset is created by parsing the list of failed banks the FDIC publishes. The data does not include the FDIC's estimated cost of each failure.

+ +

For more information about the US Bank Failures dataset, including CLI commands and pricing, see the dataset listing.

\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/02 About the Provider.html new file mode 100644 index 0000000000..0eb1f16b29 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/02 About the Provider.html @@ -0,0 +1 @@ +

The Federal Deposit Insurance Corporation is an independent agency created by Congress in 1933 to maintain stability and public confidence in the nation's financial system. The FDIC insures deposits, examines and supervises financial institutions for safety and soundness and consumer protection, and manages receiverships when banks fail.

\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/03 Getting Started.html new file mode 100644 index 0000000000..f598da374f --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/03 Getting Started.html @@ -0,0 +1,6 @@ +

The following snippet demonstrates how to request data from the US Bank Failures dataset:

+ +
+
self._dataset_symbol = self.add_data(FDICBankFailures, FDIC.FAILURES).symbol
+
_datasetSymbol = AddData<FDICBankFailures>(FDIC.Failures).Symbol;
+
\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/04 Data Summary.html new file mode 100644 index 0000000000..51b91b44f6 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/04 Data Summary.html @@ -0,0 +1,5 @@ +

The following table describes the dataset properties:

+ +
PropertyValue
Start DateApril 1934
Asset Coverage*4,117 Bank Failures
Data DensitySparse
ResolutionDaily
TimezoneNew York
+ +

* The coverage includes all assets since the start date. It increases over time.

\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/05 Requesting Data.html new file mode 100644 index 0000000000..9ed9b3f0a5 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/05 Requesting Data.html @@ -0,0 +1,23 @@ +

To add US Bank Failures data to your algorithm, call the AddDataadd_data method. Save a reference to the dataset Symbol so you can access the data later in your algorithm.

+ +
+
class FDICBankFailuresDataAlgorithm(QCAlgorithm):
+
+    def initialize(self) -> None:
+        self.set_start_date(2019, 1, 1)
+        self.set_end_date(2021, 3, 31)
+        self.set_cash(100000)
+        self._dataset_symbol = self.add_data(FDICBankFailures, FDIC.FAILURES).symbol
+
public class FDICBankFailuresDataAlgorithm : QCAlgorithm
+{
+    private Symbol _datasetSymbol;
+
+    public override void Initialize()
+    {
+        SetStartDate(2019, 1, 1);
+        SetEndDate(2021, 3, 31);
+        SetCash(100000);
+        _datasetSymbol = AddData<FDICBankFailures>(FDIC.Failures).Symbol;
+    }
+}
+
\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/06 Accessing Data.html new file mode 100644 index 0000000000..b1e4950fc8 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/06 Accessing Data.html @@ -0,0 +1,19 @@ +

To get the current US Bank Failures data, index the current Slice with the dataset Symbol. Slice objects deliver unique events to your algorithm as they happen, but the Slice may not contain data for your dataset at every time step. To avoid issues, check if the Slice contains the data you want before you index it.

+ +
+
def on_data(self, slice: Slice) -> None:
+    failures = slice.get(FDICBankFailures).get(self._dataset_symbol)
+    if failures:
+        for failure in failures.data:
+            self.log(f"{failure.institution_name} ({failure.state}): assets {failure.total_assets}")
+
public override void OnData(Slice slice)
+{
+    if (slice.TryGet<FDICBankFailures>(_datasetSymbol, out var failures))
+    {
+        foreach (FDICBankFailure failure in failures.Data)
+        {
+            Log($"{failure.InstitutionName} ({failure.State}): assets {failure.TotalAssets}");
+        }
+    }
+}
+
\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/07 Historical Data.html new file mode 100644 index 0000000000..502c7af370 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/07 Historical Data.html @@ -0,0 +1,8 @@ +

To get historical US Bank Failures data, call the Historyhistory method with the dataset Symbol. If there is no data in the period you request, the history result is empty.

+ +
+
history = self.history[FDICBankFailures](self._dataset_symbol, timedelta(days=730), Resolution.DAILY)
+
var history = History<FDICBankFailures>(_datasetSymbol, TimeSpan.FromDays(730), Resolution.Daily);
+
+ +

For more information about historical data, see History Requests.

\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/08 Remove Subscriptions.html b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/08 Remove Subscriptions.html new file mode 100644 index 0000000000..df624001d1 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/08 Remove Subscriptions.html @@ -0,0 +1,6 @@ +

To remove your subscription to US Bank Failures data, call the RemoveSecurityremove_security method.

+ +
+
self.remove_security(self._dataset_symbol)
+
RemoveSecurity(_datasetSymbol);
+
\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/98 Example Applications.html new file mode 100644 index 0000000000..017a484ea7 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/98 Example Applications.html @@ -0,0 +1,193 @@ +

The US Bank Failures dataset enables you to follow stress in the US banking system as it happens. Examples include the following strategies:

+ + +

Classic Algorithm Example

+

The following example algorithm holds SPY and liquidates it for 30 days after an FDIC-insured bank fails.

+ +
+
from AlgorithmImports import *
+
+
+class FDICBankFailuresDataAlgorithm(QCAlgorithm):
+
+    def initialize(self):
+        self.set_start_date(2019, 1, 1)
+        self.set_end_date(2021, 3, 31)
+        self.set_cash(100000)
+
+        self.equity = self.add_equity("SPY", Resolution.DAILY).symbol
+        self.dataset_symbol = self.add_data(FDICBankFailures, FDIC.FAILURES).symbol
+        self.last_failure = datetime.min
+
+    def on_data(self, slice):
+        failures = slice.get(FDICBankFailures).get(self.dataset_symbol)
+        if failures:
+            for failure in failures.data:
+                self.log(f"{failure.institution_name} ({failure.state}) failed with assets of {failure.total_assets}")
+            self.last_failure = self.time
+
+        # Liquidate SPY for 30 days after a bank fails.
+        if self.time - self.last_failure < timedelta(days=30):
+            self.liquidate(self.equity)
+        elif not self.portfolio.invested:
+            self.set_holdings(self.equity, 1)
+
using System;
+using QuantConnect;
+using QuantConnect.Algorithm;
+using QuantConnect.Data;
+using QuantConnect.DataSource;
+
+    public class FDICBankFailuresDataAlgorithm : QCAlgorithm
+    {
+        private Symbol _equity, _datasetSymbol;
+        private DateTime _lastFailure = DateTime.MinValue;
+
+        public override void Initialize()
+        {
+            SetStartDate(2019, 1, 1);
+            SetEndDate(2021, 3, 31);
+            SetCash(100000);
+
+            _equity = AddEquity("SPY", Resolution.Daily).Symbol;
+            _datasetSymbol = AddData<FDICBankFailures>(FDIC.Failures).Symbol;
+        }
+
+        public override void OnData(Slice slice)
+        {
+            if (slice.TryGet<FDICBankFailures>(_datasetSymbol, out var failures))
+            {
+                foreach (FDICBankFailure failure in failures.Data)
+                {
+                    Log($"{failure.InstitutionName} ({failure.State}) failed with assets of {failure.TotalAssets}");
+                }
+                _lastFailure = Time;
+            }
+
+            // Liquidate SPY for 30 days after a bank fails.
+            if (Time - _lastFailure < TimeSpan.FromDays(30))
+            {
+                Liquidate(_equity);
+            }
+            else if (!Portfolio.Invested)
+            {
+                SetHoldings(_equity, 1);
+            }
+        }
+    }
+
+

Framework Algorithm Example

+

The following example algorithm emits a flat insight for SPY when an FDIC-insured bank failed in the last 30 days. Otherwise, it emits an up insight.

+ +
+
from AlgorithmImports import *
+
+
+class FDICBankFailuresFrameworkAlgorithm(QCAlgorithm):
+
+    def initialize(self):
+        self.set_start_date(2019, 1, 1)
+        self.set_end_date(2021, 3, 31)
+        self.set_cash(100000)
+
+        self.universe_settings.resolution = Resolution.DAILY
+        self.set_universe_selection(ManualUniverseSelectionModel(
+            [Symbol.create("SPY", SecurityType.EQUITY, Market.USA)]))
+
+        self.add_alpha(BankFailureAlphaModel(self))
+        self.set_portfolio_construction(EqualWeightingPortfolioConstructionModel())
+        self.set_execution(ImmediateExecutionModel())
+
+
+class BankFailureAlphaModel(AlphaModel):
+
+    def __init__(self, algorithm):
+        self._dataset_symbol = algorithm.add_data(FDICBankFailures, FDIC.FAILURES).symbol
+        self._last_failure = datetime.min
+        self._symbols = set()
+
+    def update(self, algorithm, data):
+        if data.get(FDICBankFailures).get(self._dataset_symbol):
+            self._last_failure = algorithm.time
+
+        # Emit a flat insight within 30 days of a bank failure, otherwise an up insight.
+        failed_recently = algorithm.time - self._last_failure < timedelta(days=30)
+        direction = InsightDirection.FLAT if failed_recently else InsightDirection.UP
+        return [Insight.price(symbol, timedelta(days=1), direction) for symbol in self._symbols]
+
+    def on_securities_changed(self, algorithm, changes):
+        for security in changes.added_securities:
+            self._symbols.add(security.symbol)
+        for security in changes.removed_securities:
+            self._symbols.discard(security.symbol)
+
using System;
+using System.Collections.Generic;
+using System.Linq;
+using QuantConnect;
+using QuantConnect.Algorithm;
+using QuantConnect.Algorithm.Framework.Alphas;
+using QuantConnect.Algorithm.Framework.Execution;
+using QuantConnect.Algorithm.Framework.Portfolio;
+using QuantConnect.Algorithm.Framework.Selection;
+using QuantConnect.Data;
+using QuantConnect.Data.UniverseSelection;
+using QuantConnect.DataSource;
+
+    public class FDICBankFailuresFrameworkAlgorithm : QCAlgorithm
+    {
+        public override void Initialize()
+        {
+            SetStartDate(2019, 1, 1);
+            SetEndDate(2021, 3, 31);
+            SetCash(100000);
+
+            UniverseSettings.Resolution = Resolution.Daily;
+            SetUniverseSelection(new ManualUniverseSelectionModel(
+                QuantConnect.Symbol.Create("SPY", SecurityType.Equity, Market.USA)));
+
+            AddAlpha(new BankFailureAlphaModel(this));
+            SetPortfolioConstruction(new EqualWeightingPortfolioConstructionModel());
+            SetExecution(new ImmediateExecutionModel());
+        }
+    }
+
+    public class BankFailureAlphaModel : AlphaModel
+    {
+        private readonly Symbol _datasetSymbol;
+        private readonly HashSet<Symbol> _symbols = new();
+        private DateTime _lastFailure = DateTime.MinValue;
+
+        public BankFailureAlphaModel(QCAlgorithm algorithm)
+        {
+            _datasetSymbol = algorithm.AddData<FDICBankFailures>(FDIC.Failures).Symbol;
+        }
+
+        public override IEnumerable<Insight> Update(QCAlgorithm algorithm, Slice data)
+        {
+            if (data.ContainsKey(_datasetSymbol))
+            {
+                _lastFailure = algorithm.Time;
+            }
+
+            // Emit a flat insight within 30 days of a bank failure, otherwise an up insight.
+            var failedRecently = algorithm.Time - _lastFailure < TimeSpan.FromDays(30);
+            var direction = failedRecently ? InsightDirection.Flat : InsightDirection.Up;
+            return _symbols.Select(symbol => Insight.Price(symbol, TimeSpan.FromDays(1), direction)).ToList();
+        }
+
+        public override void OnSecuritiesChanged(QCAlgorithm algorithm, SecurityChanges changes)
+        {
+            foreach (var security in changes.AddedSecurities)
+            {
+                _symbols.Add(security.Symbol);
+            }
+            foreach (var security in changes.RemovedSecurities)
+            {
+                _symbols.Remove(security.Symbol);
+            }
+        }
+    }
+
\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/99 Data Point Attributes.html new file mode 100644 index 0000000000..bc95279114 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/99 Data Point Attributes.html @@ -0,0 +1,9 @@ +

The US Bank Failures dataset provides FDICBankFailures and FDICBankFailure objects.

+ +

FDICBankFailures

+

FDICBankFailures objects have the following attributes:

+
+ +

FDICBankFailure

+

FDICBankFailure objects have the following attributes:

+
\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/metadata.json b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/metadata.json new file mode 100644 index 0000000000..b62cc3b971 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/01 US Bank Failures/metadata.json @@ -0,0 +1,12 @@ +{ + "type": "metadata", + "values": { + "description": "US Bank Failures dataset from Federal Deposit Insurance Corporation.", + "keywords": "data, financial data, alternative dataset", + "og:description": "US Bank Failures dataset from Federal Deposit Insurance Corporation.", + "og:title": "US Bank Failures - Documentation QuantConnect.com", + "og:type": "website", + "og:site_name": "US Bank Failures - QuantConnect.com", + "og:image": "https://cdn.quantconnect.com/docs/i/writing-algorithms/datasets/federal-deposit-insurance-corporation/us-bank-failures.png" + } +} \ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/01 Introduction.html b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/01 Introduction.html new file mode 100644 index 0000000000..4448556671 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/01 Introduction.html @@ -0,0 +1,3 @@ +

The US Bank Financials dataset by the Federal Deposit Insurance Corporation (FDIC) tracks the quarterly call report of every FDIC-insured bank, with its balance sheet, deposits, loans, asset quality, and regulatory capital. The data covers 24,064 banks, starts in June 1984, and is delivered on a quarterly frequency. This dataset is created by parsing the call reports the FDIC publishes. The banks of listed companies are linked to 644 US Equities from March 1998.

+ +

For more information about the US Bank Financials dataset, including CLI commands and pricing, see the dataset listing.

\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/02 About the Provider.html new file mode 100644 index 0000000000..0eb1f16b29 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/02 About the Provider.html @@ -0,0 +1 @@ +

The Federal Deposit Insurance Corporation is an independent agency created by Congress in 1933 to maintain stability and public confidence in the nation's financial system. The FDIC insures deposits, examines and supervises financial institutions for safety and soundness and consumer protection, and manages receiverships when banks fail.

\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/03 Getting Started.html new file mode 100644 index 0000000000..e4fe5f211b --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/03 Getting Started.html @@ -0,0 +1,10 @@ +

The following snippet demonstrates how to request data from the US Bank Financials dataset:

+ +
+
self._symbol = self.add_equity("BAC", Resolution.DAILY).symbol
+self._dataset_symbol = self.add_data(FDICBankFinancials, self._symbol).symbol
+self._all_banks_symbol = self.add_data(FDICBankReports, FDIC.Banks.ALL).symbol
+
_symbol = AddEquity("BAC", Resolution.Daily).Symbol;
+_datasetSymbol = AddData<FDICBankFinancials>(_symbol).Symbol;
+_allBanksSymbol = AddData<FDICBankReports>(FDIC.Banks.All).Symbol;
+
\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/04 Data Summary.html new file mode 100644 index 0000000000..d3e58d122f --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/04 Data Summary.html @@ -0,0 +1,7 @@ +

The following table describes the dataset properties:

+ +
PropertyValue
Start DateJune 1984
Asset Coverage*24,064 Banks
Data DensitySparse
Resolution**Daily
TimezoneNew York
+ +

* The coverage includes all assets since the start date. It increases over time.

+ +

** Quarterly data we fetch daily.

\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/05 Requesting Data.html new file mode 100644 index 0000000000..452f2b1717 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/05 Requesting Data.html @@ -0,0 +1,27 @@ +

To add US Bank Financials data to your algorithm, call the AddDataadd_data method. Save a reference to the dataset Symbol so you can access the data later in your algorithm.

+ +
+
class FDICBankFinancialsDataAlgorithm(QCAlgorithm):
+
+    def initialize(self) -> None:
+        self.set_start_date(2019, 1, 1)
+        self.set_end_date(2021, 3, 31)
+        self.set_cash(100000)
+        self._symbol = self.add_equity("BAC", Resolution.DAILY).symbol
+        self._dataset_symbol = self.add_data(FDICBankFinancials, self._symbol).symbol
+        self._all_banks_symbol = self.add_data(FDICBankReports, FDIC.Banks.ALL).symbol
+
public class FDICBankFinancialsDataAlgorithm : QCAlgorithm
+{
+    private Symbol _symbol, _datasetSymbol, _allBanksSymbol;
+
+    public override void Initialize()
+    {
+        SetStartDate(2019, 1, 1);
+        SetEndDate(2021, 3, 31);
+        SetCash(100000);
+        _symbol = AddEquity("BAC", Resolution.Daily).Symbol;
+        _datasetSymbol = AddData<FDICBankFinancials>(_symbol).Symbol;
+        _allBanksSymbol = AddData<FDICBankReports>(FDIC.Banks.All).Symbol;
+    }
+}
+
\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/06 Accessing Data.html new file mode 100644 index 0000000000..a7d3c7a60a --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/06 Accessing Data.html @@ -0,0 +1,39 @@ +

To get the current US Bank Financials data, index the current Slice with the dataset Symbol. Slice objects deliver unique events to your algorithm as they happen, but the Slice may not contain data for your dataset at every time step. To avoid issues, check if the Slice contains the data you want before you index it.

+ +
+
def on_data(self, slice: Slice) -> None:
+    reports = slice.get(FDICBankFinancials).get(self._dataset_symbol)
+    if reports:
+        for report in reports.data:
+            self.log(f"{report.institution_name} {report.report_date}: {report.estimated_uninsured_deposits}")
+
public override void OnData(Slice slice)
+{
+    if (slice.TryGet<FDICBankFinancials>(_datasetSymbol, out var reports))
+    {
+        foreach (FDICBankFinancial report in reports.Data)
+        {
+            Log($"{report.InstitutionName} {report.ReportDate}: {report.EstimatedUninsuredDeposits}");
+        }
+    }
+}
+
+ +

To iterate through all of the dataset objects in the current Slice, call the Getget method.

+ +
+
def on_data(self, slice: Slice) -> None:
+    for dataset_symbol, reports in slice.get(FDICBankFinancials).items():
+        for report in reports.data:
+            self.log(f"{dataset_symbol} {report.institution_name}: {report.total_deposits}")
+
public override void OnData(Slice slice)
+{
+    foreach (var kvp in slice.Get<FDICBankFinancials>())
+    {
+        var datasetSymbol = kvp.Key;
+        foreach (FDICBankFinancial report in kvp.Value.Data)
+        {
+            Log($"{datasetSymbol} {report.InstitutionName}: {report.TotalDeposits}");
+        }
+    }
+}
+
\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/07 Historical Data.html new file mode 100644 index 0000000000..c3cf93d087 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/07 Historical Data.html @@ -0,0 +1,8 @@ +

To get historical US Bank Financials data, call the Historyhistory method with the dataset Symbol. If there is no data in the period you request, the history result is empty.

+ +
+
history = self.history[FDICBankFinancials](self._dataset_symbol, timedelta(days=365), Resolution.DAILY)
+
var history = History<FDICBankFinancials>(_datasetSymbol, TimeSpan.FromDays(365), Resolution.Daily);
+
+ +

For more information about historical data, see History Requests.

\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/08 Universe Selection.html b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/08 Universe Selection.html new file mode 100644 index 0000000000..dd4a426282 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/08 Universe Selection.html @@ -0,0 +1,20 @@ +

To select a dynamic universe of US Equities based on US Bank Financials data, call the AddUniverseadd_universe method with the FDICBankFinancialsUniverse class and a selection function.

+ +
+
def initialize(self) -> None:
+    self._universe = self.add_universe(FDICBankFinancialsUniverse, self.universe_selection)
+
+def universe_selection(self, alt_coarse: List[FDICBankFinancialsUniverse]) -> List[Symbol]:
+    return list({d.symbol for d in alt_coarse if d.domestic_deposits and (d.estimated_uninsured_deposits or 0) / d.domestic_deposits < 0.3})
+
private Universe _universe;
+
+public override void Initialize()
+{
+    _universe = AddUniverse<FDICBankFinancialsUniverse>(altCoarse =>
+        (from d in altCoarse.OfType<FDICBankFinancialsUniverse>()
+        where d.DomesticDeposits > 0m && (d.EstimatedUninsuredDeposits ?? 0m) / d.DomesticDeposits < 0.3m
+        select d.Symbol).Distinct());
+}
+
+ +

For more information about dynamic universes, see Universes.

\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/09 Remove Subscriptions.html b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/09 Remove Subscriptions.html new file mode 100644 index 0000000000..deccd7c9ac --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/09 Remove Subscriptions.html @@ -0,0 +1,8 @@ +

To remove your subscription to US Bank Financials data, call the RemoveSecurityremove_security method.

+ +
+
self.remove_security(self._dataset_symbol)
+
RemoveSecurity(_datasetSymbol);
+
+ +

If you subscribe to US Bank Financials data for assets in a dynamic universe, remove the dataset subscription when the asset leaves your universe. To view a common design pattern, see Track Security Changes.

\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/10 Supported Banks.html b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/10 Supported Banks.html new file mode 100644 index 0000000000..93922db5df --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/10 Supported Banks.html @@ -0,0 +1,3 @@ +

The following table shows the accessor code you need to add each bank to your algorithm:

+ +
BankConstantHeadquarters
JPMorgan Chase Bank, National AssociationFDIC.Banks.Ohio.JPMorganChaseBankNationalAssociationFDIC.Banks.Ohio.JP_MORGAN_CHASE_BANK_NATIONAL_ASSOCIATIONColumbus, OH
Bank of America, National AssociationFDIC.Banks.NorthCarolina.BankOfAmericaNationalAssociationFDIC.Banks.NorthCarolina.BANK_OF_AMERICA_NATIONAL_ASSOCIATIONCharlotte, NC
Citibank, National AssociationFDIC.Banks.SouthDakota.CitibankNationalAssociationFDIC.Banks.SouthDakota.CITIBANK_NATIONAL_ASSOCIATIONSioux Falls, SD
Wells Fargo Bank, National AssociationFDIC.Banks.SouthDakota.WellsFargoBankNationalAssociationFDIC.Banks.SouthDakota.WELLS_FARGO_BANK_NATIONAL_ASSOCIATIONSioux Falls, SD
Goldman Sachs Bank USAFDIC.Banks.NewYork.GoldmanSachsBankUsaFDIC.Banks.NewYork.GOLDMAN_SACHS_BANK_USANew York, NY
U.S. Bank National AssociationFDIC.Banks.Ohio.USBankNationalAssociationFDIC.Banks.Ohio.US_BANK_NATIONAL_ASSOCIATIONCincinnati, OH
Capital One, National AssociationFDIC.Banks.Virginia.CapitalOneNationalAssociationFDIC.Banks.Virginia.CAPITAL_ONE_NATIONAL_ASSOCIATIONMcLean, VA
PNC Bank, National AssociationFDIC.Banks.Delaware.PncBankNationalAssociationFDIC.Banks.Delaware.PNC_BANK_NATIONAL_ASSOCIATIONWilmington, DE
Truist BankFDIC.Banks.NorthCarolina.TruistBankFDIC.Banks.NorthCarolina.TRUIST_BANKCharlotte, NC
The Bank of New York MellonFDIC.Banks.NewYork.TheBankOfNewYorkMellonFDIC.Banks.NewYork.THE_BANK_OF_NEW_YORK_MELLONNew York, NY
Morgan Stanley Bank, National AssociationFDIC.Banks.Utah.MorganStanleyBankNationalAssociationFDIC.Banks.Utah.MORGAN_STANLEY_BANK_NATIONAL_ASSOCIATIONSalt Lake City, UT
State Street Bank and Trust CompanyFDIC.Banks.Massachusetts.StateStreetBankAndTrustCompanyFDIC.Banks.Massachusetts.STATE_STREET_BANK_AND_TRUST_COMPANYBoston, MA
TD Bank, National AssociationFDIC.Banks.Delaware.TdBankNationalAssociationFDIC.Banks.Delaware.TD_BANK_NATIONAL_ASSOCIATIONWilmington, DE
Fifth Third Bank, National AssociationFDIC.Banks.Ohio.FifthThirdBankNationalAssociationFDIC.Banks.Ohio.FIFTH_THIRD_BANK_NATIONAL_ASSOCIATIONCincinnati, OH
The Huntington National BankFDIC.Banks.Ohio.TheHuntingtonNationalBankFDIC.Banks.Ohio.THE_HUNTINGTON_NATIONAL_BANKColumbus, OH
BMO Bank National AssociationFDIC.Banks.Illinois.BmoBankNationalAssociationFDIC.Banks.Illinois.BMO_BANK_NATIONAL_ASSOCIATIONChicago, IL
Charles Schwab Bank, SSBFDIC.Banks.Texas.CharlesSchwabBankSsbFDIC.Banks.Texas.CHARLES_SCHWAB_BANK_SSBWestlake, TX
Morgan Stanley Private Bank, National AssociationFDIC.Banks.NewYork.MorganStanleyPrivateBankNationalAssociationFDIC.Banks.NewYork.MORGAN_STANLEY_PRIVATE_BANK_NATIONAL_ASSOCIATIONPurchase, NY
First-Citizens Bank & Trust CompanyFDIC.Banks.NorthCarolina.FirstCitizensBankAndTrustCompanyFDIC.Banks.NorthCarolina.FIRST_CITIZENS_BANK_AND_TRUST_COMPANYRaleigh, NC
Citizens Bank, National AssociationFDIC.Banks.RhodeIsland.CitizensBankNationalAssociationFDIC.Banks.RhodeIsland.CITIZENS_BANK_NATIONAL_ASSOCIATIONProvidence, RI
\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/98 Example Applications.html new file mode 100644 index 0000000000..7b92e8880f --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/98 Example Applications.html @@ -0,0 +1,227 @@ +

The US Bank Financials dataset enables you to monitor the funding, asset quality, and capital of US banks. Examples include the following strategies:

+ + +

Classic Algorithm Example

+

The following example algorithm buys BAC when the share of uninsured deposits across its banks falls from the previous quarter. Otherwise, it liquidates the position.

+ +
+
from AlgorithmImports import *
+
+
+class FDICBankFinancialsDataAlgorithm(QCAlgorithm):
+
+    def initialize(self):
+        self.set_start_date(2019, 1, 1)
+        self.set_end_date(2021, 3, 31)
+        self.set_cash(100000)
+
+        self.equity = self.add_equity("BAC", Resolution.DAILY).symbol
+        self.dataset_symbol = self.add_data(FDICBankFinancials, self.equity).symbol
+        self.previous_share = None
+
+    def on_data(self, slice):
+        reports = slice.get(FDICBankFinancials).get(self.dataset_symbol)
+        if not reports:
+            return
+
+        # Sum the latest quarter over every bank the company owns.
+        latest = max(report.report_date for report in reports.data)
+        quarter = [report for report in reports.data if report.report_date == latest]
+        deposits = sum(report.domestic_deposits or 0 for report in quarter)
+        if not deposits:
+            return
+        share = sum(report.estimated_uninsured_deposits or 0 for report in quarter) / deposits
+
+        # Hold the stock while the share of uninsured deposits falls.
+        if self.previous_share is None or share <= self.previous_share:
+            self.set_holdings(self.equity, 1)
+        else:
+            self.liquidate(self.equity)
+        self.previous_share = share
+
using System;
+using System.Linq;
+using QuantConnect;
+using QuantConnect.Algorithm;
+using QuantConnect.Data;
+using QuantConnect.DataSource;
+
+    public class FDICBankFinancialsDataAlgorithm : QCAlgorithm
+    {
+        private Symbol _equity, _datasetSymbol;
+        private decimal? _previousShare;
+
+        public override void Initialize()
+        {
+            SetStartDate(2019, 1, 1);
+            SetEndDate(2021, 3, 31);
+            SetCash(100000);
+
+            _equity = AddEquity("BAC", Resolution.Daily).Symbol;
+            _datasetSymbol = AddData<FDICBankFinancials>(_equity).Symbol;
+        }
+
+        public override void OnData(Slice slice)
+        {
+            if (!slice.TryGet<FDICBankFinancials>(_datasetSymbol, out var reports))
+            {
+                return;
+            }
+
+            // Sum the latest quarter over every bank the company owns.
+            var records = reports.Data.OfType<FDICBankFinancial>().ToList();
+            var latest = records.Max(report => report.ReportDate);
+            var quarter = records.Where(report => report.ReportDate == latest).ToList();
+            var deposits = quarter.Sum(report => report.DomesticDeposits ?? 0m);
+            if (deposits == 0m)
+            {
+                return;
+            }
+            var share = quarter.Sum(report => report.EstimatedUninsuredDeposits ?? 0m) / deposits;
+
+            // Hold the stock while the share of uninsured deposits falls.
+            if (_previousShare == null || share <= _previousShare)
+            {
+                SetHoldings(_equity, 1);
+            }
+            else
+            {
+                Liquidate(_equity);
+            }
+            _previousShare = share;
+        }
+    }
+
+

Framework Algorithm Example

+

The following example algorithm emits an up insight for BAC when the share of uninsured deposits across its banks falls from the previous quarter. Otherwise, it emits a flat insight.

+ +
+
from AlgorithmImports import *
+
+
+class FDICBankFinancialsFrameworkAlgorithm(QCAlgorithm):
+
+    def initialize(self):
+        self.set_start_date(2019, 1, 1)
+        self.set_end_date(2021, 3, 31)
+        self.set_cash(100000)
+
+        self.universe_settings.resolution = Resolution.DAILY
+        self.set_universe_selection(ManualUniverseSelectionModel(
+            [Symbol.create("BAC", SecurityType.EQUITY, Market.USA)]))
+
+        self.add_alpha(UninsuredDepositsAlphaModel())
+        self.set_portfolio_construction(EqualWeightingPortfolioConstructionModel())
+        self.set_execution(ImmediateExecutionModel())
+
+
+class UninsuredDepositsAlphaModel(AlphaModel):
+
+    def __init__(self):
+        self._dataset_symbols = {}
+        self._previous_share = {}
+
+    def update(self, algorithm, data):
+        insights = []
+        for dataset_symbol, reports in data.get(FDICBankFinancials).items():
+            equity = dataset_symbol.underlying
+            latest = max(report.report_date for report in reports.data)
+            quarter = [report for report in reports.data if report.report_date == latest]
+            deposits = sum(report.domestic_deposits or 0 for report in quarter)
+            if not deposits:
+                continue
+            share = sum(report.estimated_uninsured_deposits or 0 for report in quarter) / deposits
+
+            # Emit an up insight while the share of uninsured deposits falls.
+            previous = self._previous_share.get(equity)
+            direction = InsightDirection.UP if previous is None or share <= previous else InsightDirection.FLAT
+            insights.append(Insight.price(equity, timedelta(days=90), direction))
+            self._previous_share[equity] = share
+        return insights
+
+    def on_securities_changed(self, algorithm, changes):
+        for security in changes.added_securities:
+            self._dataset_symbols[security.symbol] = algorithm.add_data(FDICBankFinancials, security.symbol).symbol
+        for security in changes.removed_securities:
+            dataset_symbol = self._dataset_symbols.pop(security.symbol, None)
+            if dataset_symbol:
+                algorithm.remove_security(dataset_symbol)
+
using System;
+using System.Collections.Generic;
+using System.Linq;
+using QuantConnect;
+using QuantConnect.Algorithm;
+using QuantConnect.Algorithm.Framework.Alphas;
+using QuantConnect.Algorithm.Framework.Execution;
+using QuantConnect.Algorithm.Framework.Portfolio;
+using QuantConnect.Algorithm.Framework.Selection;
+using QuantConnect.Data;
+using QuantConnect.Data.UniverseSelection;
+using QuantConnect.DataSource;
+
+    public class FDICBankFinancialsFrameworkAlgorithm : QCAlgorithm
+    {
+        public override void Initialize()
+        {
+            SetStartDate(2019, 1, 1);
+            SetEndDate(2021, 3, 31);
+            SetCash(100000);
+
+            UniverseSettings.Resolution = Resolution.Daily;
+            SetUniverseSelection(new ManualUniverseSelectionModel(
+                QuantConnect.Symbol.Create("BAC", SecurityType.Equity, Market.USA)));
+
+            AddAlpha(new UninsuredDepositsAlphaModel());
+            SetPortfolioConstruction(new EqualWeightingPortfolioConstructionModel());
+            SetExecution(new ImmediateExecutionModel());
+        }
+    }
+
+    public class UninsuredDepositsAlphaModel : AlphaModel
+    {
+        private readonly Dictionary<Symbol, Symbol> _datasetSymbols = new();
+        private readonly Dictionary<Symbol, decimal> _previousShare = new();
+
+        public override IEnumerable<Insight> Update(QCAlgorithm algorithm, Slice data)
+        {
+            var insights = new List<Insight>();
+            foreach (var kvp in data.Get<FDICBankFinancials>())
+            {
+                var equity = kvp.Key.Underlying;
+                var records = kvp.Value.Data.OfType<FDICBankFinancial>().ToList();
+                var latest = records.Max(report => report.ReportDate);
+                var quarter = records.Where(report => report.ReportDate == latest).ToList();
+                var deposits = quarter.Sum(report => report.DomesticDeposits ?? 0m);
+                if (deposits == 0m)
+                {
+                    continue;
+                }
+                var share = quarter.Sum(report => report.EstimatedUninsuredDeposits ?? 0m) / deposits;
+
+                // Emit an up insight while the share of uninsured deposits falls.
+                var rising = !_previousShare.TryGetValue(equity, out var previous) || share <= previous;
+                insights.Add(Insight.Price(equity, TimeSpan.FromDays(90), rising ? InsightDirection.Up : InsightDirection.Flat));
+                _previousShare[equity] = share;
+            }
+            return insights;
+        }
+
+        public override void OnSecuritiesChanged(QCAlgorithm algorithm, SecurityChanges changes)
+        {
+            foreach (var security in changes.AddedSecurities)
+            {
+                _datasetSymbols[security.Symbol] = algorithm.AddData<FDICBankFinancials>(security.Symbol).Symbol;
+            }
+            foreach (var security in changes.RemovedSecurities)
+            {
+                if (_datasetSymbols.Remove(security.Symbol, out var datasetSymbol))
+                {
+                    algorithm.RemoveSecurity(datasetSymbol);
+                }
+            }
+        }
+    }
+
\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/99 Data Point Attributes.html new file mode 100644 index 0000000000..f6cadb55d6 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/99 Data Point Attributes.html @@ -0,0 +1,17 @@ +

The US Bank Financials dataset provides FDICBankFinancials, FDICBankReports, FDICBankFinancial, and FDICBankFinancialsUniverse objects.

+ +

FDICBankFinancials

+

FDICBankFinancials objects have the following attributes:

+
+ +

FDICBankReports

+

FDICBankReports objects have the following attributes:

+
+ +

FDICBankFinancial

+

FDICBankFinancial objects have the following attributes:

+
+ +

FDICBankFinancialsUniverse

+

FDICBankFinancialsUniverse objects have the following attributes:

+
\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/metadata.json b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/metadata.json new file mode 100644 index 0000000000..7ca020b580 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/18 Federal Deposit Insurance Corporation/02 US Bank Financials/metadata.json @@ -0,0 +1,12 @@ +{ + "type": "metadata", + "values": { + "description": "US Bank Financials dataset from Federal Deposit Insurance Corporation.", + "keywords": "data, financial data, alternative dataset", + "og:description": "US Bank Financials dataset from Federal Deposit Insurance Corporation.", + "og:title": "US Bank Financials - Documentation QuantConnect.com", + "og:type": "website", + "og:site_name": "US Bank Financials - QuantConnect.com", + "og:image": "https://cdn.quantconnect.com/docs/i/writing-algorithms/datasets/federal-deposit-insurance-corporation/us-bank-financials.png" + } +} \ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Reserve Bank of St Louis/00.json b/03 Writing Algorithms/14 Datasets/19 Federal Reserve Bank of St Louis/00.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/18 Federal Reserve Bank of St Louis/00.json rename to 03 Writing Algorithms/14 Datasets/19 Federal Reserve Bank of St Louis/00.json diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Reserve Bank of St Louis/01 US Interest Rate/01 Introduction.html b/03 Writing Algorithms/14 Datasets/19 Federal Reserve Bank of St Louis/01 US Interest Rate/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/18 Federal Reserve Bank of St Louis/01 US Interest Rate/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/19 Federal Reserve Bank of St Louis/01 US Interest Rate/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Reserve Bank of St Louis/01 US Interest Rate/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/19 Federal Reserve Bank of St Louis/01 US Interest Rate/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/18 Federal Reserve Bank of St Louis/01 US Interest Rate/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/19 Federal Reserve Bank of St Louis/01 US Interest Rate/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Reserve Bank of St Louis/01 US Interest Rate/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/19 Federal Reserve Bank of St Louis/01 US Interest Rate/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/18 Federal Reserve Bank of St Louis/01 US Interest Rate/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/19 Federal Reserve Bank of St Louis/01 US Interest Rate/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Reserve Bank of St Louis/01 US Interest Rate/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/19 Federal Reserve Bank of St Louis/01 US Interest Rate/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/18 Federal Reserve Bank of St Louis/01 US Interest Rate/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/19 Federal Reserve Bank of St Louis/01 US Interest Rate/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Reserve Bank of St Louis/01 US Interest Rate/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/19 Federal Reserve Bank of St Louis/01 US Interest Rate/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/18 Federal Reserve Bank of St Louis/01 US Interest Rate/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/19 Federal Reserve Bank of St Louis/01 US Interest Rate/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Reserve Bank of St Louis/01 US Interest Rate/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/19 Federal Reserve Bank of St Louis/01 US Interest Rate/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/18 Federal Reserve Bank of St Louis/01 US Interest Rate/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/19 Federal Reserve Bank of St Louis/01 US Interest Rate/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Reserve Bank of St Louis/01 US Interest Rate/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/19 Federal Reserve Bank of St Louis/01 US Interest Rate/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/18 Federal Reserve Bank of St Louis/01 US Interest Rate/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/19 Federal Reserve Bank of St Louis/01 US Interest Rate/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Reserve Bank of St Louis/01 US Interest Rate/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/19 Federal Reserve Bank of St Louis/01 US Interest Rate/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/18 Federal Reserve Bank of St Louis/01 US Interest Rate/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/19 Federal Reserve Bank of St Louis/01 US Interest Rate/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/18 Federal Reserve Bank of St Louis/01 US Interest Rate/metadata.json b/03 Writing Algorithms/14 Datasets/19 Federal Reserve Bank of St Louis/01 US Interest Rate/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/18 Federal Reserve Bank of St Louis/01 US Interest Rate/metadata.json rename to 03 Writing Algorithms/14 Datasets/19 Federal Reserve Bank of St Louis/01 US Interest Rate/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/00.json b/03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/00.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/00.json rename to 03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/00.json diff --git a/03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/01 OTC Transparency/01 Introduction.html b/03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/01 OTC Transparency/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/01 OTC Transparency/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/01 OTC Transparency/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/01 OTC Transparency/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/01 OTC Transparency/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/01 OTC Transparency/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/01 OTC Transparency/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/01 OTC Transparency/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/01 OTC Transparency/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/01 OTC Transparency/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/01 OTC Transparency/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/01 OTC Transparency/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/01 OTC Transparency/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/01 OTC Transparency/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/01 OTC Transparency/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/01 OTC Transparency/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/01 OTC Transparency/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/01 OTC Transparency/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/01 OTC Transparency/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/01 OTC Transparency/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/01 OTC Transparency/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/01 OTC Transparency/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/01 OTC Transparency/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/01 OTC Transparency/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/01 OTC Transparency/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/01 OTC Transparency/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/01 OTC Transparency/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/01 OTC Transparency/08 Universe Selection.html b/03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/01 OTC Transparency/08 Universe Selection.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/01 OTC Transparency/08 Universe Selection.html rename to 03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/01 OTC Transparency/08 Universe Selection.html diff --git a/03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/01 OTC Transparency/09 Remove Subscriptions.html b/03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/01 OTC Transparency/09 Remove Subscriptions.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/01 OTC Transparency/09 Remove Subscriptions.html rename to 03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/01 OTC Transparency/09 Remove Subscriptions.html diff --git a/03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/01 OTC Transparency/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/01 OTC Transparency/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/01 OTC Transparency/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/01 OTC Transparency/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/01 OTC Transparency/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/01 OTC Transparency/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/01 OTC Transparency/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/01 OTC Transparency/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/01 OTC Transparency/metadata.json b/03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/01 OTC Transparency/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/01 OTC Transparency/metadata.json rename to 03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/01 OTC Transparency/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/02 Regulation SHO/01 Introduction.html b/03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/02 Regulation SHO/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/02 Regulation SHO/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/02 Regulation SHO/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/02 Regulation SHO/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/02 Regulation SHO/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/02 Regulation SHO/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/02 Regulation SHO/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/02 Regulation SHO/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/02 Regulation SHO/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/02 Regulation SHO/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/02 Regulation SHO/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/02 Regulation SHO/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/02 Regulation SHO/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/02 Regulation SHO/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/02 Regulation SHO/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/02 Regulation SHO/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/02 Regulation SHO/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/02 Regulation SHO/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/02 Regulation SHO/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/02 Regulation SHO/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/02 Regulation SHO/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/02 Regulation SHO/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/02 Regulation SHO/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/02 Regulation SHO/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/02 Regulation SHO/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/02 Regulation SHO/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/02 Regulation SHO/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/02 Regulation SHO/08 Universe Selection.html b/03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/02 Regulation SHO/08 Universe Selection.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/02 Regulation SHO/08 Universe Selection.html rename to 03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/02 Regulation SHO/08 Universe Selection.html diff --git a/03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/02 Regulation SHO/09 Remove Subscriptions.html b/03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/02 Regulation SHO/09 Remove Subscriptions.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/02 Regulation SHO/09 Remove Subscriptions.html rename to 03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/02 Regulation SHO/09 Remove Subscriptions.html diff --git a/03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/02 Regulation SHO/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/02 Regulation SHO/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/02 Regulation SHO/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/02 Regulation SHO/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/02 Regulation SHO/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/02 Regulation SHO/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/02 Regulation SHO/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/02 Regulation SHO/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/02 Regulation SHO/metadata.json b/03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/02 Regulation SHO/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/19 Financial Industry Regulatory Authority/02 Regulation SHO/metadata.json rename to 03 Writing Algorithms/14 Datasets/20 Financial Industry Regulatory Authority/02 Regulation SHO/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/20 Kavout/00.json b/03 Writing Algorithms/14 Datasets/21 Kavout/00.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/20 Kavout/00.json rename to 03 Writing Algorithms/14 Datasets/21 Kavout/00.json diff --git a/03 Writing Algorithms/14 Datasets/20 Kavout/01 Composite Factor Bundle/01 Introduction.html b/03 Writing Algorithms/14 Datasets/21 Kavout/01 Composite Factor Bundle/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/20 Kavout/01 Composite Factor Bundle/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/21 Kavout/01 Composite Factor Bundle/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/20 Kavout/01 Composite Factor Bundle/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/21 Kavout/01 Composite Factor Bundle/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/20 Kavout/01 Composite Factor Bundle/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/21 Kavout/01 Composite Factor Bundle/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/20 Kavout/01 Composite Factor Bundle/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/21 Kavout/01 Composite Factor Bundle/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/20 Kavout/01 Composite Factor Bundle/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/21 Kavout/01 Composite Factor Bundle/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/20 Kavout/01 Composite Factor Bundle/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/21 Kavout/01 Composite Factor Bundle/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/20 Kavout/01 Composite Factor Bundle/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/21 Kavout/01 Composite Factor Bundle/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/20 Kavout/01 Composite Factor Bundle/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/21 Kavout/01 Composite Factor Bundle/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/20 Kavout/01 Composite Factor Bundle/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/21 Kavout/01 Composite Factor Bundle/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/20 Kavout/01 Composite Factor Bundle/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/21 Kavout/01 Composite Factor Bundle/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/20 Kavout/01 Composite Factor Bundle/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/21 Kavout/01 Composite Factor Bundle/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/20 Kavout/01 Composite Factor Bundle/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/21 Kavout/01 Composite Factor Bundle/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/20 Kavout/01 Composite Factor Bundle/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/21 Kavout/01 Composite Factor Bundle/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/20 Kavout/01 Composite Factor Bundle/08 Remove Subscriptions.html b/03 Writing Algorithms/14 Datasets/21 Kavout/01 Composite Factor Bundle/08 Remove Subscriptions.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/20 Kavout/01 Composite Factor Bundle/08 Remove Subscriptions.html rename to 03 Writing Algorithms/14 Datasets/21 Kavout/01 Composite Factor Bundle/08 Remove Subscriptions.html diff --git a/03 Writing Algorithms/14 Datasets/20 Kavout/01 Composite Factor Bundle/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/21 Kavout/01 Composite Factor Bundle/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/20 Kavout/01 Composite Factor Bundle/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/21 Kavout/01 Composite Factor Bundle/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/20 Kavout/01 Composite Factor Bundle/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/21 Kavout/01 Composite Factor Bundle/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/20 Kavout/01 Composite Factor Bundle/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/21 Kavout/01 Composite Factor Bundle/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/20 Kavout/01 Composite Factor Bundle/metadata.json b/03 Writing Algorithms/14 Datasets/21 Kavout/01 Composite Factor Bundle/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/20 Kavout/01 Composite Factor Bundle/metadata.json rename to 03 Writing Algorithms/14 Datasets/21 Kavout/01 Composite Factor Bundle/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/21 Nasdaq/00.json b/03 Writing Algorithms/14 Datasets/22 Nasdaq/00.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/21 Nasdaq/00.json rename to 03 Writing Algorithms/14 Datasets/22 Nasdaq/00.json diff --git a/03 Writing Algorithms/14 Datasets/21 Nasdaq/01 Data Link/01 Introduction.html b/03 Writing Algorithms/14 Datasets/22 Nasdaq/01 Data Link/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/21 Nasdaq/01 Data Link/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/22 Nasdaq/01 Data Link/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/21 Nasdaq/01 Data Link/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/22 Nasdaq/01 Data Link/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/21 Nasdaq/01 Data Link/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/22 Nasdaq/01 Data Link/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/21 Nasdaq/01 Data Link/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/22 Nasdaq/01 Data Link/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/21 Nasdaq/01 Data Link/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/22 Nasdaq/01 Data Link/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/21 Nasdaq/01 Data Link/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/22 Nasdaq/01 Data Link/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/21 Nasdaq/01 Data Link/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/22 Nasdaq/01 Data Link/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/21 Nasdaq/01 Data Link/05 Backward Compatibility.html b/03 Writing Algorithms/14 Datasets/22 Nasdaq/01 Data Link/05 Backward Compatibility.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/21 Nasdaq/01 Data Link/05 Backward Compatibility.html rename to 03 Writing Algorithms/14 Datasets/22 Nasdaq/01 Data Link/05 Backward Compatibility.html diff --git a/03 Writing Algorithms/14 Datasets/21 Nasdaq/01 Data Link/06 Requesting Data.html b/03 Writing Algorithms/14 Datasets/22 Nasdaq/01 Data Link/06 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/21 Nasdaq/01 Data Link/06 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/22 Nasdaq/01 Data Link/06 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/21 Nasdaq/01 Data Link/07 Accessing Data.html b/03 Writing Algorithms/14 Datasets/22 Nasdaq/01 Data Link/07 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/21 Nasdaq/01 Data Link/07 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/22 Nasdaq/01 Data Link/07 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/21 Nasdaq/01 Data Link/08 Historical Data.html b/03 Writing Algorithms/14 Datasets/22 Nasdaq/01 Data Link/08 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/21 Nasdaq/01 Data Link/08 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/22 Nasdaq/01 Data Link/08 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/21 Nasdaq/01 Data Link/09 Remove Subscriptions.html b/03 Writing Algorithms/14 Datasets/22 Nasdaq/01 Data Link/09 Remove Subscriptions.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/21 Nasdaq/01 Data Link/09 Remove Subscriptions.html rename to 03 Writing Algorithms/14 Datasets/22 Nasdaq/01 Data Link/09 Remove Subscriptions.html diff --git a/03 Writing Algorithms/14 Datasets/21 Nasdaq/01 Data Link/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/22 Nasdaq/01 Data Link/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/21 Nasdaq/01 Data Link/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/22 Nasdaq/01 Data Link/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/21 Nasdaq/01 Data Link/metadata.json b/03 Writing Algorithms/14 Datasets/22 Nasdaq/01 Data Link/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/21 Nasdaq/01 Data Link/metadata.json rename to 03 Writing Algorithms/14 Datasets/22 Nasdaq/01 Data Link/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/00.json b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/00.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/00.json rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/00.json diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/01 CNBC Trading/01 Introduction.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/01 CNBC Trading/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/01 CNBC Trading/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/01 CNBC Trading/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/01 CNBC Trading/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/01 CNBC Trading/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/01 CNBC Trading/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/01 CNBC Trading/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/01 CNBC Trading/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/01 CNBC Trading/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/01 CNBC Trading/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/01 CNBC Trading/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/01 CNBC Trading/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/01 CNBC Trading/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/01 CNBC Trading/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/01 CNBC Trading/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/01 CNBC Trading/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/01 CNBC Trading/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/01 CNBC Trading/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/01 CNBC Trading/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/01 CNBC Trading/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/01 CNBC Trading/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/01 CNBC Trading/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/01 CNBC Trading/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/01 CNBC Trading/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/01 CNBC Trading/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/01 CNBC Trading/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/01 CNBC Trading/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/01 CNBC Trading/08 Universe Selection.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/01 CNBC Trading/08 Universe Selection.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/01 CNBC Trading/08 Universe Selection.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/01 CNBC Trading/08 Universe Selection.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/01 CNBC Trading/09 Universe History.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/01 CNBC Trading/09 Universe History.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/01 CNBC Trading/09 Universe History.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/01 CNBC Trading/09 Universe History.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/01 CNBC Trading/10 Remove Subscriptions.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/01 CNBC Trading/10 Remove Subscriptions.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/01 CNBC Trading/10 Remove Subscriptions.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/01 CNBC Trading/10 Remove Subscriptions.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/01 CNBC Trading/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/01 CNBC Trading/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/01 CNBC Trading/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/01 CNBC Trading/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/01 CNBC Trading/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/01 CNBC Trading/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/01 CNBC Trading/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/01 CNBC Trading/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/01 CNBC Trading/metadata.json b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/01 CNBC Trading/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/01 CNBC Trading/metadata.json rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/01 CNBC Trading/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/02 Corporate Lobbying/01 Introduction.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/02 Corporate Lobbying/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/02 Corporate Lobbying/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/02 Corporate Lobbying/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/02 Corporate Lobbying/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/02 Corporate Lobbying/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/02 Corporate Lobbying/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/02 Corporate Lobbying/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/02 Corporate Lobbying/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/02 Corporate Lobbying/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/02 Corporate Lobbying/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/02 Corporate Lobbying/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/02 Corporate Lobbying/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/02 Corporate Lobbying/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/02 Corporate Lobbying/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/02 Corporate Lobbying/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/02 Corporate Lobbying/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/02 Corporate Lobbying/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/02 Corporate Lobbying/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/02 Corporate Lobbying/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/02 Corporate Lobbying/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/02 Corporate Lobbying/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/02 Corporate Lobbying/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/02 Corporate Lobbying/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/02 Corporate Lobbying/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/02 Corporate Lobbying/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/02 Corporate Lobbying/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/02 Corporate Lobbying/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/02 Corporate Lobbying/08 Universe Selection.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/02 Corporate Lobbying/08 Universe Selection.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/02 Corporate Lobbying/08 Universe Selection.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/02 Corporate Lobbying/08 Universe Selection.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/02 Corporate Lobbying/09 Universe History.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/02 Corporate Lobbying/09 Universe History.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/02 Corporate Lobbying/09 Universe History.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/02 Corporate Lobbying/09 Universe History.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/02 Corporate Lobbying/10 Remove Subscriptions.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/02 Corporate Lobbying/10 Remove Subscriptions.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/02 Corporate Lobbying/10 Remove Subscriptions.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/02 Corporate Lobbying/10 Remove Subscriptions.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/02 Corporate Lobbying/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/02 Corporate Lobbying/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/02 Corporate Lobbying/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/02 Corporate Lobbying/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/02 Corporate Lobbying/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/02 Corporate Lobbying/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/02 Corporate Lobbying/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/02 Corporate Lobbying/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/02 Corporate Lobbying/metadata.json b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/02 Corporate Lobbying/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/02 Corporate Lobbying/metadata.json rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/02 Corporate Lobbying/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/03 Insider Trading/01 Introduction.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/03 Insider Trading/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/03 Insider Trading/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/03 Insider Trading/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/03 Insider Trading/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/03 Insider Trading/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/03 Insider Trading/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/03 Insider Trading/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/03 Insider Trading/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/03 Insider Trading/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/03 Insider Trading/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/03 Insider Trading/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/03 Insider Trading/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/03 Insider Trading/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/03 Insider Trading/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/03 Insider Trading/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/03 Insider Trading/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/03 Insider Trading/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/03 Insider Trading/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/03 Insider Trading/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/03 Insider Trading/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/03 Insider Trading/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/03 Insider Trading/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/03 Insider Trading/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/03 Insider Trading/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/03 Insider Trading/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/03 Insider Trading/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/03 Insider Trading/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/03 Insider Trading/08 Universe Selection.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/03 Insider Trading/08 Universe Selection.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/03 Insider Trading/08 Universe Selection.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/03 Insider Trading/08 Universe Selection.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/03 Insider Trading/09 Universe History.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/03 Insider Trading/09 Universe History.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/03 Insider Trading/09 Universe History.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/03 Insider Trading/09 Universe History.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/03 Insider Trading/10 Remove Subscriptions.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/03 Insider Trading/10 Remove Subscriptions.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/03 Insider Trading/10 Remove Subscriptions.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/03 Insider Trading/10 Remove Subscriptions.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/03 Insider Trading/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/03 Insider Trading/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/03 Insider Trading/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/03 Insider Trading/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/03 Insider Trading/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/03 Insider Trading/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/03 Insider Trading/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/03 Insider Trading/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/03 Insider Trading/metadata.json b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/03 Insider Trading/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/03 Insider Trading/metadata.json rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/03 Insider Trading/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/04 US Congress Trading/01 Introduction.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/04 US Congress Trading/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/04 US Congress Trading/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/04 US Congress Trading/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/04 US Congress Trading/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/04 US Congress Trading/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/04 US Congress Trading/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/04 US Congress Trading/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/04 US Congress Trading/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/04 US Congress Trading/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/04 US Congress Trading/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/04 US Congress Trading/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/04 US Congress Trading/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/04 US Congress Trading/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/04 US Congress Trading/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/04 US Congress Trading/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/04 US Congress Trading/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/04 US Congress Trading/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/04 US Congress Trading/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/04 US Congress Trading/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/04 US Congress Trading/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/04 US Congress Trading/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/04 US Congress Trading/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/04 US Congress Trading/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/04 US Congress Trading/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/04 US Congress Trading/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/04 US Congress Trading/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/04 US Congress Trading/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/04 US Congress Trading/08 Universe Selection.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/04 US Congress Trading/08 Universe Selection.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/04 US Congress Trading/08 Universe Selection.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/04 US Congress Trading/08 Universe Selection.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/04 US Congress Trading/09 Universe History.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/04 US Congress Trading/09 Universe History.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/04 US Congress Trading/09 Universe History.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/04 US Congress Trading/09 Universe History.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/04 US Congress Trading/10 Remove Subscriptions.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/04 US Congress Trading/10 Remove Subscriptions.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/04 US Congress Trading/10 Remove Subscriptions.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/04 US Congress Trading/10 Remove Subscriptions.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/04 US Congress Trading/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/04 US Congress Trading/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/04 US Congress Trading/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/04 US Congress Trading/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/04 US Congress Trading/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/04 US Congress Trading/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/04 US Congress Trading/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/04 US Congress Trading/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/04 US Congress Trading/metadata.json b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/04 US Congress Trading/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/04 US Congress Trading/metadata.json rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/04 US Congress Trading/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/05 US Government Contracts/01 Introduction.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/05 US Government Contracts/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/05 US Government Contracts/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/05 US Government Contracts/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/05 US Government Contracts/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/05 US Government Contracts/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/05 US Government Contracts/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/05 US Government Contracts/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/05 US Government Contracts/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/05 US Government Contracts/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/05 US Government Contracts/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/05 US Government Contracts/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/05 US Government Contracts/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/05 US Government Contracts/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/05 US Government Contracts/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/05 US Government Contracts/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/05 US Government Contracts/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/05 US Government Contracts/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/05 US Government Contracts/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/05 US Government Contracts/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/05 US Government Contracts/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/05 US Government Contracts/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/05 US Government Contracts/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/05 US Government Contracts/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/05 US Government Contracts/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/05 US Government Contracts/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/05 US Government Contracts/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/05 US Government Contracts/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/05 US Government Contracts/08 Universe Selection.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/05 US Government Contracts/08 Universe Selection.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/05 US Government Contracts/08 Universe Selection.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/05 US Government Contracts/08 Universe Selection.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/05 US Government Contracts/09 Universe History.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/05 US Government Contracts/09 Universe History.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/05 US Government Contracts/09 Universe History.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/05 US Government Contracts/09 Universe History.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/05 US Government Contracts/10 Remove Subscriptions.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/05 US Government Contracts/10 Remove Subscriptions.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/05 US Government Contracts/10 Remove Subscriptions.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/05 US Government Contracts/10 Remove Subscriptions.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/05 US Government Contracts/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/05 US Government Contracts/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/05 US Government Contracts/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/05 US Government Contracts/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/05 US Government Contracts/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/05 US Government Contracts/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/05 US Government Contracts/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/05 US Government Contracts/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/05 US Government Contracts/metadata.json b/03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/05 US Government Contracts/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/22 Quiver Quantitative/05 US Government Contracts/metadata.json rename to 03 Writing Algorithms/14 Datasets/23 Quiver Quantitative/05 US Government Contracts/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/23 RegAlytics/00.json b/03 Writing Algorithms/14 Datasets/24 RegAlytics/00.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/23 RegAlytics/00.json rename to 03 Writing Algorithms/14 Datasets/24 RegAlytics/00.json diff --git a/03 Writing Algorithms/14 Datasets/23 RegAlytics/01 US Regulatory Alerts - Financial Sector/01 Introduction.html b/03 Writing Algorithms/14 Datasets/24 RegAlytics/01 US Regulatory Alerts - Financial Sector/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/23 RegAlytics/01 US Regulatory Alerts - Financial Sector/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/24 RegAlytics/01 US Regulatory Alerts - Financial Sector/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/23 RegAlytics/01 US Regulatory Alerts - Financial Sector/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/24 RegAlytics/01 US Regulatory Alerts - Financial Sector/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/23 RegAlytics/01 US Regulatory Alerts - Financial Sector/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/24 RegAlytics/01 US Regulatory Alerts - Financial Sector/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/23 RegAlytics/01 US Regulatory Alerts - Financial Sector/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/24 RegAlytics/01 US Regulatory Alerts - Financial Sector/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/23 RegAlytics/01 US Regulatory Alerts - Financial Sector/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/24 RegAlytics/01 US Regulatory Alerts - Financial Sector/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/23 RegAlytics/01 US Regulatory Alerts - Financial Sector/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/24 RegAlytics/01 US Regulatory Alerts - Financial Sector/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/23 RegAlytics/01 US Regulatory Alerts - Financial Sector/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/24 RegAlytics/01 US Regulatory Alerts - Financial Sector/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/23 RegAlytics/01 US Regulatory Alerts - Financial Sector/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/24 RegAlytics/01 US Regulatory Alerts - Financial Sector/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/23 RegAlytics/01 US Regulatory Alerts - Financial Sector/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/24 RegAlytics/01 US Regulatory Alerts - Financial Sector/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/23 RegAlytics/01 US Regulatory Alerts - Financial Sector/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/24 RegAlytics/01 US Regulatory Alerts - Financial Sector/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/23 RegAlytics/01 US Regulatory Alerts - Financial Sector/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/24 RegAlytics/01 US Regulatory Alerts - Financial Sector/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/23 RegAlytics/01 US Regulatory Alerts - Financial Sector/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/24 RegAlytics/01 US Regulatory Alerts - Financial Sector/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/23 RegAlytics/01 US Regulatory Alerts - Financial Sector/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/24 RegAlytics/01 US Regulatory Alerts - Financial Sector/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/23 RegAlytics/01 US Regulatory Alerts - Financial Sector/08 Remove Subscriptions.html b/03 Writing Algorithms/14 Datasets/24 RegAlytics/01 US Regulatory Alerts - Financial Sector/08 Remove Subscriptions.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/23 RegAlytics/01 US Regulatory Alerts - Financial Sector/08 Remove Subscriptions.html rename to 03 Writing Algorithms/14 Datasets/24 RegAlytics/01 US Regulatory Alerts - Financial Sector/08 Remove Subscriptions.html diff --git a/03 Writing Algorithms/14 Datasets/23 RegAlytics/01 US Regulatory Alerts - Financial Sector/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/24 RegAlytics/01 US Regulatory Alerts - Financial Sector/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/23 RegAlytics/01 US Regulatory Alerts - Financial Sector/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/24 RegAlytics/01 US Regulatory Alerts - Financial Sector/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/23 RegAlytics/01 US Regulatory Alerts - Financial Sector/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/24 RegAlytics/01 US Regulatory Alerts - Financial Sector/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/23 RegAlytics/01 US Regulatory Alerts - Financial Sector/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/24 RegAlytics/01 US Regulatory Alerts - Financial Sector/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/23 RegAlytics/01 US Regulatory Alerts - Financial Sector/metadata.json b/03 Writing Algorithms/14 Datasets/24 RegAlytics/01 US Regulatory Alerts - Financial Sector/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/23 RegAlytics/01 US Regulatory Alerts - Financial Sector/metadata.json rename to 03 Writing Algorithms/14 Datasets/24 RegAlytics/01 US Regulatory Alerts - Financial Sector/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/24 Securities and Exchange Commission/00.json b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/00.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/24 Securities and Exchange Commission/00.json rename to 03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/00.json diff --git a/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/01 Introduction.html b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/01 Introduction.html new file mode 100644 index 0000000000..a7b980e79b --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/01 Introduction.html @@ -0,0 +1,5 @@ +

The US SEC 13F Whales dataset by the US Securities and Exchange Commission (SEC) tracks the holdings of institutional investment managers with at least $100 million in assets under management. The data covers 18,877 US Equities, starts in May 2013, and is delivered on a daily frequency. This dataset is created by parsing Form 13F filings.

+ +

This dataset depends on the US Equity Security Master dataset because the US Equity Security Master dataset contains information on splits, dividends, and symbol changes.

+ +

For more information about the US SEC 13F Whales dataset, including CLI commands and pricing, see the dataset listing.

\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/24 Securities and Exchange Commission/01 US SEC Filings/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/24 Securities and Exchange Commission/01 US SEC Filings/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/03 Getting Started.html new file mode 100644 index 0000000000..619f8990c1 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/03 Getting Started.html @@ -0,0 +1,8 @@ +

The following snippet demonstrates how to request data from the SEC Whales dataset:

+ +
+
self._symbol = self.add_equity("AAPL", Resolution.DAILY).symbol
+self._holdings_symbol = self.add_data(SEC13FHoldings, self._symbol).symbol
+
_symbol = AddEquity("AAPL", Resolution.Daily).Symbol;
+_holdingsSymbol = AddData<SEC13FHoldings>(_symbol).Symbol;
+
\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/04 Data Summary.html new file mode 100644 index 0000000000..813e66db5a --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/04 Data Summary.html @@ -0,0 +1,5 @@ +

The following table describes the dataset properties:

+ +
PropertyValue
Start DateMay 2013
Asset Coverage*18,877 US Equities
Data DensitySparse
ResolutionDaily
TimezoneNew York
+ +

* The coverage includes all assets since the start date. It increases over time.

\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/05 Requesting Data.html new file mode 100644 index 0000000000..bc92e04f7a --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/05 Requesting Data.html @@ -0,0 +1,27 @@ +

To add SEC Whales data to your algorithm, call the AddDataadd_data method. Save a reference to the dataset Symbol so you can access the data later in your algorithm.

+ +
+
class SEC13FDataAlgorithm(QCAlgorithm):
+
+    def initialize(self) -> None:
+        self.set_start_date(2020, 10, 1)
+        self.set_end_date(2020, 12, 31)
+        self.set_cash(100000)
+
+        self._symbol = self.add_equity("AAPL", Resolution.DAILY).symbol
+        self._dataset_symbol = self.add_data(SEC13FHoldings, self._symbol).symbol
+
public class SEC13FDataAlgorithm : QCAlgorithm
+{
+    private Symbol _symbol, _datasetSymbol;
+
+    public override void Initialize()
+    {
+        SetStartDate(2020, 10, 1);
+        SetEndDate(2020, 12, 31);
+        SetCash(100000);
+
+        _symbol = AddEquity("AAPL", Resolution.Daily).Symbol;
+        _datasetSymbol = AddData<SEC13FHoldings>(_symbol).Symbol;
+    }
+}
+
\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/06 Accessing Data.html new file mode 100644 index 0000000000..b93ba9b381 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/06 Accessing Data.html @@ -0,0 +1,38 @@ +

To get the current SEC Whales data, index the current Slice with the dataset Symbol. Slice objects deliver unique events to your algorithm as they happen, but the Slice may not contain data for your dataset at every time step. To avoid issues, check if the Slice contains the data you want before you index it.

+ +
+
def on_data(self, slice: Slice) -> None:
+    if slice.contains_key(self._dataset_symbol):
+        for holding in slice[self._dataset_symbol]:
+            self.log(f"{self._dataset_symbol} CIK {holding.manager_cik} at {slice.time}: {holding.amount} {holding.amount_type}")
+
public override void OnData(Slice slice)
+{
+    if (slice.ContainsKey(_datasetSymbol))
+    {
+        foreach (SEC13FHolding holding in slice[_datasetSymbol])
+        {
+            Log($"{_datasetSymbol} CIK {holding.ManagerCik} at {slice.Time}: {holding.Amount} {holding.AmountType}");
+        }
+    }
+}
+
+ +

To iterate through all of the dataset objects in the current Slice, call the Getget method.

+ +
+
def on_data(self, slice: Slice) -> None:
+    for dataset_symbol, holdings in slice.get(SEC13FHoldings).items():
+        for holding in holdings:
+            self.log(f"{dataset_symbol} CIK {holding.manager_cik} at {slice.time}: {holding.amount} {holding.amount_type}")
+
public override void OnData(Slice slice)
+{
+    foreach (var kvp in slice.Get<SEC13FHoldings>())
+    {
+        var datasetSymbol = kvp.Key;
+        foreach (SEC13FHolding holding in kvp.Value)
+        {
+            Log($"{datasetSymbol} CIK {holding.ManagerCik} at {slice.Time}: {holding.Amount} {holding.AmountType}");
+        }
+    }
+}
+
\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/07 Historical Data.html new file mode 100644 index 0000000000..5203f52c2e --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/07 Historical Data.html @@ -0,0 +1,12 @@ +

To get historical SEC Whales data, call the Historyhistory method with the dataset Symbol. If there is no data in the period you request, the history result is empty.

+ +
+
# DataFrame
+history_df = self.history(SEC13FHoldings, self._dataset_symbol, timedelta(days=60), Resolution.DAILY, flatten=True)
+
+# Dataset objects
+history_bars = self.history[SEC13FHoldings](self._dataset_symbol, timedelta(days=60), Resolution.DAILY)
+
var history = History<SEC13FHoldings>(_datasetSymbol, TimeSpan.FromDays(60), Resolution.Daily);
+
+ +

For more information about historical data, see History Requests.

\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/08 Remove Subscriptions.html b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/08 Remove Subscriptions.html new file mode 100644 index 0000000000..e3e7a32b10 --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/08 Remove Subscriptions.html @@ -0,0 +1,8 @@ +

To remove your subscription to SEC Whales data, call the RemoveSecurityremove_security method.

+ +
+
self.remove_security(self._dataset_symbol)
+
RemoveSecurity(_datasetSymbol);
+
+ +

If you subscribe to SEC Whales data for assets in a dynamic universe, remove the dataset subscription when the asset leaves your universe. To view a common design pattern, see Track Security Changes.

\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/09 Supported Managers.html b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/09 Supported Managers.html new file mode 100644 index 0000000000..7a6df1047e --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/09 Supported Managers.html @@ -0,0 +1,59 @@ +

To follow a manager, filter the holdings by its CIK with the ManagerCikmanager_cik property. The following table shows the 50 largest managers by reported value in the second quarter of 2026:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CIKManager
2012383BlackRock Inc.
2100119VANGUARD CAPITAL MANAGEMENT LLC
93751STATE STREET CORP
315066FMR LLC
2100121VANGUARD PORTFOLIO MANAGEMENT LLC
895421MORGAN STANLEY
1214717GEODE CAPITAL MANAGEMENT LLC
19617JPMORGAN CHASE & CO
70858BANK OF AMERICA CORP /DE/
914208Invesco Ltd.
1374170NORGES BANK
80255PRICE T ROWE ASSOCIATES INC /MD/
886982GOLDMAN SACHS GROUP INC
73124NORTHERN TRUST CORP
1422849Capital World Investors
884546CHARLES SCHWAB INVESTMENT MANAGEMENT INC
1422848Capital Research Global Investors
1610520UBS Group AG
1390777Bank of New York Mellon Corp
1000275ROYAL BANK OF CANADA
902219WELLINGTON MANAGEMENT GROUP LLP
72971WELLS FARGO & COMPANY/MN
354204DIMENSIONAL FUND ADVISORS LP
861177UBS AM a distinct business unit of UBS ASSET MANAGEMENT AMERICAS LLC
820027AMERIPRISE FINANCIAL INC
1562230Capital International Investors
764068Legal & General Group Plc
38777FRANKLIN RESOURCES INC
933478VANGUARD FIDUCIARY TRUST CO
1403438LPL Financial LLC
1407543ENVESTNET ASSET MANAGEMENT INC
1871926Nuveen LLC
1330387Amundi
720005RAYMOND JAMES FINANCIAL INC
948046DEUTSCHE BANK AG
850529Fisher Asset Management LLC
312069BARCLAYS PLC
912938MASSACHUSETTS FINANCIAL SERVICES CO /MA/
1109448ALLIANCEBERNSTEIN L.P.
1067983Berkshire Hathaway Inc
1167557AQR CAPITAL MANAGEMENT LLC
927971BANK OF MONTREAL /CAN/
815917JONES FINANCIAL COMPANIES LLLP
2146052Jupiter Topco LLC
748054AMERICAN CENTURY COMPANIES INC
1164508ARROWSTREET CAPITAL LIMITED PARTNERSHIP
1811242Vanguard Global Advisers LLC
831001CITIGROUP INC
873630HSBC HOLDINGS PLC
1126328PRINCIPAL FINANCIAL GROUP INC
\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/98 Example Applications.html new file mode 100644 index 0000000000..3aeace670e --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/98 Example Applications.html @@ -0,0 +1,279 @@ +

The US SEC 13F Whales dataset enables you to follow what large institutional investors hold and how their positions change. Examples include the following strategies:

+ + +

Classic Algorithm Example

+

The following example algorithm buys AAPL when Parnassus Investments reports more shares of it than in the previous quarter. Otherwise, it liquidates the position.

+ +
+
from AlgorithmImports import *
+
+
+class SEC13FDataAlgorithm(QCAlgorithm):
+
+    def initialize(self):
+        self.set_start_date(2019, 1, 1)
+        self.set_end_date(2020, 8, 31)
+        self.set_cash(100000)
+
+        self.equity = self.add_equity("AAPL", Resolution.DAILY).symbol
+        self.add_data(SEC13FHoldings, self.equity)
+
+        self.shares_by_quarter = {}
+
+    def on_data(self, slice):
+        for _, point in slice.get(SEC13FHoldings).items():
+            for holding in point:
+                # Sum the share lines Parnassus Investments reports for each quarter.
+                if (holding.manager_cik != 948669 or holding.form_type != "13F-HR"
+                        or holding.amount_type != "SH" or holding.put_call is not None):
+                    continue
+
+                quarter = holding.period_end
+                self.shares_by_quarter[quarter] = self.shares_by_quarter.get(quarter, 0) + (holding.amount or 0)
+                self.log(f"{self.time:%Y-%m-%d} {holding.manager_name} reports {holding.amount:,.0f} shares "
+                         f"for {quarter:%Y-%m-%d}")
+
+        quarters = [self.shares_by_quarter[q] for q in sorted(self.shares_by_quarter)]
+        if len(quarters) < 2 or slice.bars.count == 0:
+            return
+
+        # Buy when the manager adds shares, otherwise liquidate.
+        if quarters[-1] > quarters[-2]:
+            self.set_holdings(self.equity, 1)
+        else:
+            self.liquidate(self.equity)
+
using System;
+using System.Collections.Generic;
+using System.Linq;
+using QuantConnect;
+using QuantConnect.Algorithm;
+using QuantConnect.Data;
+using QuantConnect.DataSource;
+
+    public class SEC13FDataAlgorithm : QCAlgorithm
+    {
+        private Symbol _equity;
+        private readonly Dictionary<DateTime, decimal> _sharesByQuarter = new();
+
+        public override void Initialize()
+        {
+            SetStartDate(2019, 1, 1);
+            SetEndDate(2020, 8, 31);
+            SetCash(100000);
+
+            _equity = AddEquity("AAPL", Resolution.Daily).Symbol;
+            AddData<SEC13FHoldings>(_equity);
+        }
+
+        public override void OnData(Slice slice)
+        {
+            foreach (var (_, point) in slice.Get<SEC13FHoldings>())
+            {
+                // Sum the share lines Parnassus Investments reports for each quarter.
+                foreach (var holding in point.OfType<SEC13FHolding>().Where(holding =>
+                             holding.ManagerCik == 948669 && holding.FormType == "13F-HR" &&
+                             holding.AmountType == "SH" && !holding.PutCall.HasValue))
+                {
+                    _sharesByQuarter.TryGetValue(holding.PeriodEnd, out var reported);
+                    _sharesByQuarter[holding.PeriodEnd] = reported + (holding.Amount ?? 0);
+                    Log($"{Time:yyyy-MM-dd} {holding.ManagerName} reports {holding.Amount:N0} shares " +
+                        $"for {holding.PeriodEnd:yyyy-MM-dd}");
+                }
+            }
+
+            var quarters = _sharesByQuarter.OrderBy(entry => entry.Key).Select(entry => entry.Value).ToList();
+            if (quarters.Count < 2 || slice.Bars.Count == 0)
+            {
+                return;
+            }
+
+            // Buy when the manager adds shares, otherwise liquidate.
+            if (quarters[^1] > quarters[^2])
+            {
+                SetHoldings(_equity, 1);
+            }
+            else
+            {
+                Liquidate(_equity);
+            }
+        }
+    }
+
+

Framework Algorithm Example

+

The following example algorithm compares how many managers report AAPL in two consecutive quarters once their 45-day filing deadline has passed. It emits an up insight when the later quarter has more managers and a down insight when it has fewer.

+ +
+
from AlgorithmImports import *
+
+
+class SEC13FFrameworkAlgorithm(QCAlgorithm):
+
+    def initialize(self):
+        self.set_start_date(2020, 1, 1)
+        self.set_end_date(2020, 12, 31)
+        self.set_cash(100000)
+
+        self.universe_settings.resolution = Resolution.DAILY
+        self.set_universe_selection(ManualUniverseSelectionModel(
+            [Symbol.create("AAPL", SecurityType.EQUITY, Market.USA)]))
+
+        self.add_alpha(SEC13FCrowdingAlphaModel())
+        self.set_portfolio_construction(EqualWeightingPortfolioConstructionModel())
+        self.set_execution(ImmediateExecutionModel())
+
+
+class SEC13FCrowdingAlphaModel(AlphaModel):
+
+    # Count a quarter only after its 45-day filing deadline has passed.
+    FILING_DEADLINE = timedelta(days=45)
+
+    def __init__(self):
+        self._holdings = {}
+        self._managers = {}
+        self._emitted = set()
+
+    def update(self, algorithm, data):
+        insights = []
+
+        for holdings_symbol, point in data.get(SEC13FHoldings).items():
+            equity = holdings_symbol.underlying
+            by_period = self._managers.setdefault(equity, {})
+
+            for holding in point:
+                if (holding.form_type != "13F-HR" or holding.amount_type != "SH"
+                        or holding.put_call is not None
+                        or algorithm.time > holding.period_end + self.FILING_DEADLINE):
+                    continue
+                by_period.setdefault(holding.period_end, set()).add(holding.manager_cik)
+
+            closed = [p for p in sorted(by_period) if algorithm.time >= p + self.FILING_DEADLINE]
+            if len(closed) < 2 or (equity, closed[-1]) in self._emitted:
+                continue
+
+            self._emitted.add((equity, closed[-1]))
+            latest, previous = len(by_period[closed[-1]]), len(by_period[closed[-2]])
+            if latest == previous:
+                continue
+
+            algorithm.log(f"{algorithm.time:%Y-%m-%d} {equity.value}: {previous} -> {latest} managers")
+            direction = InsightDirection.UP if latest > previous else InsightDirection.DOWN
+            insights.append(Insight.price(equity, timedelta(days=30), direction))
+
+        return insights
+
+    def on_securities_changed(self, algorithm, changes):
+        for security in changes.added_securities:
+            self._holdings[security.symbol] = algorithm.add_data(SEC13FHoldings, security.symbol).symbol
+
+        for security in changes.removed_securities:
+            holdings_symbol = self._holdings.pop(security.symbol, None)
+            if holdings_symbol is not None:
+                algorithm.remove_security(holdings_symbol)
+
using System;
+using System.Collections.Generic;
+using System.Linq;
+using QuantConnect;
+using QuantConnect.Algorithm;
+using QuantConnect.Algorithm.Framework.Alphas;
+using QuantConnect.Algorithm.Framework.Execution;
+using QuantConnect.Algorithm.Framework.Portfolio;
+using QuantConnect.Algorithm.Framework.Selection;
+using QuantConnect.Data;
+using QuantConnect.Data.UniverseSelection;
+using QuantConnect.DataSource;
+
+    public class SEC13FFrameworkAlgorithm : QCAlgorithm
+    {
+        public override void Initialize()
+        {
+            SetStartDate(2020, 1, 1);
+            SetEndDate(2020, 12, 31);
+            SetCash(100000);
+
+            UniverseSettings.Resolution = Resolution.Daily;
+            SetUniverseSelection(new ManualUniverseSelectionModel(
+                QuantConnect.Symbol.Create("AAPL", SecurityType.Equity, Market.USA)));
+
+            AddAlpha(new SEC13FCrowdingAlphaModel());
+            SetPortfolioConstruction(new EqualWeightingPortfolioConstructionModel());
+            SetExecution(new ImmediateExecutionModel());
+        }
+    }
+
+    public class SEC13FCrowdingAlphaModel : AlphaModel
+    {
+        // Count a quarter only after its 45-day filing deadline has passed.
+        private static readonly TimeSpan FilingDeadline = TimeSpan.FromDays(45);
+
+        private readonly Dictionary<Symbol, Symbol> _holdings = new();
+        private readonly Dictionary<Symbol, Dictionary<DateTime, HashSet<int>>> _managers = new();
+        private readonly HashSet<(Symbol, DateTime)> _emitted = new();
+
+        public override IEnumerable<Insight> Update(QCAlgorithm algorithm, Slice data)
+        {
+            var insights = new List<Insight>();
+
+            foreach (var (holdingsSymbol, point) in data.Get<SEC13FHoldings>())
+            {
+                var equity = holdingsSymbol.Underlying;
+                if (!_managers.TryGetValue(equity, out var byPeriod))
+                {
+                    _managers[equity] = byPeriod = new Dictionary<DateTime, HashSet<int>>();
+                }
+
+                foreach (var holding in point.OfType<SEC13FHolding>().Where(holding =>
+                             holding.FormType == "13F-HR" && holding.AmountType == "SH" &&
+                             !holding.PutCall.HasValue &&
+                             algorithm.Time <= holding.PeriodEnd + FilingDeadline))
+                {
+                    if (!byPeriod.TryGetValue(holding.PeriodEnd, out var managers))
+                    {
+                        byPeriod[holding.PeriodEnd] = managers = new HashSet<int>();
+                    }
+
+                    managers.Add(holding.ManagerCik);
+                }
+
+                var closed = byPeriod.Keys.Where(p => algorithm.Time >= p + FilingDeadline)
+                    .OrderBy(p => p).ToList();
+                if (closed.Count < 2 || !_emitted.Add((equity, closed[^1])))
+                {
+                    continue;
+                }
+
+                var latest = byPeriod[closed[^1]].Count;
+                var previous = byPeriod[closed[^2]].Count;
+                if (latest == previous)
+                {
+                    continue;
+                }
+
+                algorithm.Log($"{algorithm.Time:yyyy-MM-dd} {equity.Value}: {previous} -> {latest} managers");
+                var direction = latest > previous ? InsightDirection.Up : InsightDirection.Down;
+                insights.Add(Insight.Price(equity, TimeSpan.FromDays(30), direction));
+            }
+
+            return insights;
+        }
+
+        public override void OnSecuritiesChanged(QCAlgorithm algorithm, SecurityChanges changes)
+        {
+            foreach (var security in changes.AddedSecurities)
+            {
+                _holdings[security.Symbol] = algorithm.AddData<SEC13FHoldings>(security.Symbol).Symbol;
+            }
+
+            foreach (var security in changes.RemovedSecurities)
+            {
+                if (_holdings.Remove(security.Symbol, out var holdingsSymbol))
+                {
+                    algorithm.RemoveSecurity(holdingsSymbol);
+                }
+            }
+        }
+    }
+
\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/99 Data Point Attributes.html new file mode 100644 index 0000000000..6899dbb57e --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/99 Data Point Attributes.html @@ -0,0 +1,9 @@ +

The SEC Whales dataset provides SEC13FHoldings and SEC13FHolding objects.

+ +

SEC13FHoldings

+

SEC13FHoldings objects have the following attributes:

+
+ +

SEC13FHolding

+

SEC13FHolding objects have the following attributes:

+
\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/metadata.json b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/metadata.json new file mode 100644 index 0000000000..ef7db6fccf --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/01 US SEC 13F Whales/metadata.json @@ -0,0 +1,12 @@ +{ + "type": "metadata", + "values": { + "description": "US SEC 13F Whales dataset from Securities and Exchange Commission.", + "keywords": "data, financial data, alternative dataset", + "og:description": "US SEC 13F Whales dataset from Securities and Exchange Commission.", + "og:title": "US SEC 13F Whales - Documentation QuantConnect.com", + "og:type": "website", + "og:site_name": "US SEC 13F Whales - QuantConnect.com", + "og:image": "https://cdn.quantconnect.com/docs/i/writing-algorithms/datasets/securities-and-exchange-commission/us-sec-13f-whales.png" + } +} \ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/24 Securities and Exchange Commission/01 US SEC Filings/01 Introduction.html b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/02 US SEC Filings/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/24 Securities and Exchange Commission/01 US SEC Filings/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/02 US SEC Filings/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/02 US SEC Filings/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/02 US SEC Filings/02 About the Provider.html new file mode 100644 index 0000000000..6211d3ffcc --- /dev/null +++ b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/02 US SEC Filings/02 About the Provider.html @@ -0,0 +1 @@ +

The mission of the U.S. Securities and Exchange Commission is to protect investors, maintain fair, orderly, and efficient markets, and facilitate capital formation. The SEC oversees the key participants in the securities world, including securities exchanges, securities brokers and dealers, investment advisors, and mutual funds. The SEC is concerned primarily with promoting the disclosure of important market-related information, maintaining fair dealing, and protecting against fraud.

\ No newline at end of file diff --git a/03 Writing Algorithms/14 Datasets/24 Securities and Exchange Commission/01 US SEC Filings/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/02 US SEC Filings/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/24 Securities and Exchange Commission/01 US SEC Filings/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/02 US SEC Filings/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/24 Securities and Exchange Commission/01 US SEC Filings/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/02 US SEC Filings/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/24 Securities and Exchange Commission/01 US SEC Filings/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/02 US SEC Filings/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/24 Securities and Exchange Commission/01 US SEC Filings/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/02 US SEC Filings/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/24 Securities and Exchange Commission/01 US SEC Filings/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/02 US SEC Filings/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/24 Securities and Exchange Commission/01 US SEC Filings/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/02 US SEC Filings/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/24 Securities and Exchange Commission/01 US SEC Filings/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/02 US SEC Filings/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/24 Securities and Exchange Commission/01 US SEC Filings/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/02 US SEC Filings/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/24 Securities and Exchange Commission/01 US SEC Filings/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/02 US SEC Filings/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/24 Securities and Exchange Commission/01 US SEC Filings/08 Remove Subscriptions.html b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/02 US SEC Filings/08 Remove Subscriptions.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/24 Securities and Exchange Commission/01 US SEC Filings/08 Remove Subscriptions.html rename to 03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/02 US SEC Filings/08 Remove Subscriptions.html diff --git a/03 Writing Algorithms/14 Datasets/24 Securities and Exchange Commission/01 US SEC Filings/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/02 US SEC Filings/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/24 Securities and Exchange Commission/01 US SEC Filings/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/02 US SEC Filings/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/24 Securities and Exchange Commission/01 US SEC Filings/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/02 US SEC Filings/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/24 Securities and Exchange Commission/01 US SEC Filings/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/02 US SEC Filings/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/24 Securities and Exchange Commission/01 US SEC Filings/metadata.json b/03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/02 US SEC Filings/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/24 Securities and Exchange Commission/01 US SEC Filings/metadata.json rename to 03 Writing Algorithms/14 Datasets/25 Securities and Exchange Commission/02 US SEC Filings/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/25 Smart Insider/00.json b/03 Writing Algorithms/14 Datasets/26 Smart Insider/00.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/25 Smart Insider/00.json rename to 03 Writing Algorithms/14 Datasets/26 Smart Insider/00.json diff --git a/03 Writing Algorithms/14 Datasets/25 Smart Insider/01 Corporate Buybacks/01 Introduction.html b/03 Writing Algorithms/14 Datasets/26 Smart Insider/01 Corporate Buybacks/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/25 Smart Insider/01 Corporate Buybacks/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/26 Smart Insider/01 Corporate Buybacks/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/25 Smart Insider/01 Corporate Buybacks/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/26 Smart Insider/01 Corporate Buybacks/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/25 Smart Insider/01 Corporate Buybacks/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/26 Smart Insider/01 Corporate Buybacks/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/25 Smart Insider/01 Corporate Buybacks/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/26 Smart Insider/01 Corporate Buybacks/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/25 Smart Insider/01 Corporate Buybacks/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/26 Smart Insider/01 Corporate Buybacks/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/25 Smart Insider/01 Corporate Buybacks/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/26 Smart Insider/01 Corporate Buybacks/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/25 Smart Insider/01 Corporate Buybacks/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/26 Smart Insider/01 Corporate Buybacks/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/25 Smart Insider/01 Corporate Buybacks/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/26 Smart Insider/01 Corporate Buybacks/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/25 Smart Insider/01 Corporate Buybacks/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/26 Smart Insider/01 Corporate Buybacks/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/25 Smart Insider/01 Corporate Buybacks/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/26 Smart Insider/01 Corporate Buybacks/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/25 Smart Insider/01 Corporate Buybacks/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/26 Smart Insider/01 Corporate Buybacks/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/25 Smart Insider/01 Corporate Buybacks/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/26 Smart Insider/01 Corporate Buybacks/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/25 Smart Insider/01 Corporate Buybacks/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/26 Smart Insider/01 Corporate Buybacks/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/25 Smart Insider/01 Corporate Buybacks/08 Universe Selection.html b/03 Writing Algorithms/14 Datasets/26 Smart Insider/01 Corporate Buybacks/08 Universe Selection.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/25 Smart Insider/01 Corporate Buybacks/08 Universe Selection.html rename to 03 Writing Algorithms/14 Datasets/26 Smart Insider/01 Corporate Buybacks/08 Universe Selection.html diff --git a/03 Writing Algorithms/14 Datasets/25 Smart Insider/01 Corporate Buybacks/09 Universe History.html b/03 Writing Algorithms/14 Datasets/26 Smart Insider/01 Corporate Buybacks/09 Universe History.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/25 Smart Insider/01 Corporate Buybacks/09 Universe History.html rename to 03 Writing Algorithms/14 Datasets/26 Smart Insider/01 Corporate Buybacks/09 Universe History.html diff --git a/03 Writing Algorithms/14 Datasets/25 Smart Insider/01 Corporate Buybacks/10 Remove Subscriptions.html b/03 Writing Algorithms/14 Datasets/26 Smart Insider/01 Corporate Buybacks/10 Remove Subscriptions.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/25 Smart Insider/01 Corporate Buybacks/10 Remove Subscriptions.html rename to 03 Writing Algorithms/14 Datasets/26 Smart Insider/01 Corporate Buybacks/10 Remove Subscriptions.html diff --git a/03 Writing Algorithms/14 Datasets/25 Smart Insider/01 Corporate Buybacks/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/26 Smart Insider/01 Corporate Buybacks/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/25 Smart Insider/01 Corporate Buybacks/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/26 Smart Insider/01 Corporate Buybacks/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/25 Smart Insider/01 Corporate Buybacks/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/26 Smart Insider/01 Corporate Buybacks/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/25 Smart Insider/01 Corporate Buybacks/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/26 Smart Insider/01 Corporate Buybacks/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/25 Smart Insider/01 Corporate Buybacks/metadata.json b/03 Writing Algorithms/14 Datasets/26 Smart Insider/01 Corporate Buybacks/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/25 Smart Insider/01 Corporate Buybacks/metadata.json rename to 03 Writing Algorithms/14 Datasets/26 Smart Insider/01 Corporate Buybacks/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/26 Tiingo/00.json b/03 Writing Algorithms/14 Datasets/27 Tiingo/00.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/26 Tiingo/00.json rename to 03 Writing Algorithms/14 Datasets/27 Tiingo/00.json diff --git a/03 Writing Algorithms/14 Datasets/26 Tiingo/01 Tiingo News Feed/01 Introduction.html b/03 Writing Algorithms/14 Datasets/27 Tiingo/01 Tiingo News Feed/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/26 Tiingo/01 Tiingo News Feed/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/27 Tiingo/01 Tiingo News Feed/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/26 Tiingo/01 Tiingo News Feed/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/27 Tiingo/01 Tiingo News Feed/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/26 Tiingo/01 Tiingo News Feed/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/27 Tiingo/01 Tiingo News Feed/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/26 Tiingo/01 Tiingo News Feed/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/27 Tiingo/01 Tiingo News Feed/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/26 Tiingo/01 Tiingo News Feed/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/27 Tiingo/01 Tiingo News Feed/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/26 Tiingo/01 Tiingo News Feed/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/27 Tiingo/01 Tiingo News Feed/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/26 Tiingo/01 Tiingo News Feed/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/27 Tiingo/01 Tiingo News Feed/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/26 Tiingo/01 Tiingo News Feed/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/27 Tiingo/01 Tiingo News Feed/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/26 Tiingo/01 Tiingo News Feed/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/27 Tiingo/01 Tiingo News Feed/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/26 Tiingo/01 Tiingo News Feed/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/27 Tiingo/01 Tiingo News Feed/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/26 Tiingo/01 Tiingo News Feed/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/27 Tiingo/01 Tiingo News Feed/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/26 Tiingo/01 Tiingo News Feed/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/27 Tiingo/01 Tiingo News Feed/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/26 Tiingo/01 Tiingo News Feed/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/27 Tiingo/01 Tiingo News Feed/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/26 Tiingo/01 Tiingo News Feed/08 Remove Subscriptions.html b/03 Writing Algorithms/14 Datasets/27 Tiingo/01 Tiingo News Feed/08 Remove Subscriptions.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/26 Tiingo/01 Tiingo News Feed/08 Remove Subscriptions.html rename to 03 Writing Algorithms/14 Datasets/27 Tiingo/01 Tiingo News Feed/08 Remove Subscriptions.html diff --git a/03 Writing Algorithms/14 Datasets/26 Tiingo/01 Tiingo News Feed/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/27 Tiingo/01 Tiingo News Feed/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/26 Tiingo/01 Tiingo News Feed/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/27 Tiingo/01 Tiingo News Feed/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/26 Tiingo/01 Tiingo News Feed/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/27 Tiingo/01 Tiingo News Feed/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/26 Tiingo/01 Tiingo News Feed/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/27 Tiingo/01 Tiingo News Feed/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/26 Tiingo/01 Tiingo News Feed/metadata.json b/03 Writing Algorithms/14 Datasets/27 Tiingo/01 Tiingo News Feed/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/26 Tiingo/01 Tiingo News Feed/metadata.json rename to 03 Writing Algorithms/14 Datasets/27 Tiingo/01 Tiingo News Feed/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/27 Treasury Department/00.json b/03 Writing Algorithms/14 Datasets/28 Treasury Department/00.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/27 Treasury Department/00.json rename to 03 Writing Algorithms/14 Datasets/28 Treasury Department/00.json diff --git a/03 Writing Algorithms/14 Datasets/27 Treasury Department/01 US Treasury Yield Curve/01 Introduction.html b/03 Writing Algorithms/14 Datasets/28 Treasury Department/01 US Treasury Yield Curve/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/27 Treasury Department/01 US Treasury Yield Curve/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/28 Treasury Department/01 US Treasury Yield Curve/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/27 Treasury Department/01 US Treasury Yield Curve/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/28 Treasury Department/01 US Treasury Yield Curve/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/27 Treasury Department/01 US Treasury Yield Curve/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/28 Treasury Department/01 US Treasury Yield Curve/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/27 Treasury Department/01 US Treasury Yield Curve/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/28 Treasury Department/01 US Treasury Yield Curve/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/27 Treasury Department/01 US Treasury Yield Curve/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/28 Treasury Department/01 US Treasury Yield Curve/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/27 Treasury Department/01 US Treasury Yield Curve/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/28 Treasury Department/01 US Treasury Yield Curve/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/27 Treasury Department/01 US Treasury Yield Curve/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/28 Treasury Department/01 US Treasury Yield Curve/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/27 Treasury Department/01 US Treasury Yield Curve/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/28 Treasury Department/01 US Treasury Yield Curve/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/27 Treasury Department/01 US Treasury Yield Curve/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/28 Treasury Department/01 US Treasury Yield Curve/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/27 Treasury Department/01 US Treasury Yield Curve/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/28 Treasury Department/01 US Treasury Yield Curve/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/27 Treasury Department/01 US Treasury Yield Curve/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/28 Treasury Department/01 US Treasury Yield Curve/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/27 Treasury Department/01 US Treasury Yield Curve/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/28 Treasury Department/01 US Treasury Yield Curve/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/27 Treasury Department/01 US Treasury Yield Curve/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/28 Treasury Department/01 US Treasury Yield Curve/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/27 Treasury Department/01 US Treasury Yield Curve/08 Remove Subscriptions.html b/03 Writing Algorithms/14 Datasets/28 Treasury Department/01 US Treasury Yield Curve/08 Remove Subscriptions.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/27 Treasury Department/01 US Treasury Yield Curve/08 Remove Subscriptions.html rename to 03 Writing Algorithms/14 Datasets/28 Treasury Department/01 US Treasury Yield Curve/08 Remove Subscriptions.html diff --git a/03 Writing Algorithms/14 Datasets/27 Treasury Department/01 US Treasury Yield Curve/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/28 Treasury Department/01 US Treasury Yield Curve/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/27 Treasury Department/01 US Treasury Yield Curve/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/28 Treasury Department/01 US Treasury Yield Curve/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/27 Treasury Department/01 US Treasury Yield Curve/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/28 Treasury Department/01 US Treasury Yield Curve/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/27 Treasury Department/01 US Treasury Yield Curve/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/28 Treasury Department/01 US Treasury Yield Curve/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/27 Treasury Department/01 US Treasury Yield Curve/metadata.json b/03 Writing Algorithms/14 Datasets/28 Treasury Department/01 US Treasury Yield Curve/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/27 Treasury Department/01 US Treasury Yield Curve/metadata.json rename to 03 Writing Algorithms/14 Datasets/28 Treasury Department/01 US Treasury Yield Curve/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/28 US Bureau of Economic Analysis/00.json b/03 Writing Algorithms/14 Datasets/29 US Bureau of Economic Analysis/00.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/28 US Bureau of Economic Analysis/00.json rename to 03 Writing Algorithms/14 Datasets/29 US Bureau of Economic Analysis/00.json diff --git a/03 Writing Algorithms/14 Datasets/28 US Bureau of Economic Analysis/01 GDP by Industry/01 Introduction.html b/03 Writing Algorithms/14 Datasets/29 US Bureau of Economic Analysis/01 GDP by Industry/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/28 US Bureau of Economic Analysis/01 GDP by Industry/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/29 US Bureau of Economic Analysis/01 GDP by Industry/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/28 US Bureau of Economic Analysis/01 GDP by Industry/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/29 US Bureau of Economic Analysis/01 GDP by Industry/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/28 US Bureau of Economic Analysis/01 GDP by Industry/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/29 US Bureau of Economic Analysis/01 GDP by Industry/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/28 US Bureau of Economic Analysis/01 GDP by Industry/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/29 US Bureau of Economic Analysis/01 GDP by Industry/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/28 US Bureau of Economic Analysis/01 GDP by Industry/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/29 US Bureau of Economic Analysis/01 GDP by Industry/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/28 US Bureau of Economic Analysis/01 GDP by Industry/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/29 US Bureau of Economic Analysis/01 GDP by Industry/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/28 US Bureau of Economic Analysis/01 GDP by Industry/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/29 US Bureau of Economic Analysis/01 GDP by Industry/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/28 US Bureau of Economic Analysis/01 GDP by Industry/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/29 US Bureau of Economic Analysis/01 GDP by Industry/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/28 US Bureau of Economic Analysis/01 GDP by Industry/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/29 US Bureau of Economic Analysis/01 GDP by Industry/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/28 US Bureau of Economic Analysis/01 GDP by Industry/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/29 US Bureau of Economic Analysis/01 GDP by Industry/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/28 US Bureau of Economic Analysis/01 GDP by Industry/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/29 US Bureau of Economic Analysis/01 GDP by Industry/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/28 US Bureau of Economic Analysis/01 GDP by Industry/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/29 US Bureau of Economic Analysis/01 GDP by Industry/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/28 US Bureau of Economic Analysis/01 GDP by Industry/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/29 US Bureau of Economic Analysis/01 GDP by Industry/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/28 US Bureau of Economic Analysis/01 GDP by Industry/08 Remove Subscriptions.html b/03 Writing Algorithms/14 Datasets/29 US Bureau of Economic Analysis/01 GDP by Industry/08 Remove Subscriptions.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/28 US Bureau of Economic Analysis/01 GDP by Industry/08 Remove Subscriptions.html rename to 03 Writing Algorithms/14 Datasets/29 US Bureau of Economic Analysis/01 GDP by Industry/08 Remove Subscriptions.html diff --git a/03 Writing Algorithms/14 Datasets/28 US Bureau of Economic Analysis/01 GDP by Industry/09 Supported Industries.html b/03 Writing Algorithms/14 Datasets/29 US Bureau of Economic Analysis/01 GDP by Industry/09 Supported Industries.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/28 US Bureau of Economic Analysis/01 GDP by Industry/09 Supported Industries.html rename to 03 Writing Algorithms/14 Datasets/29 US Bureau of Economic Analysis/01 GDP by Industry/09 Supported Industries.html diff --git a/03 Writing Algorithms/14 Datasets/28 US Bureau of Economic Analysis/01 GDP by Industry/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/29 US Bureau of Economic Analysis/01 GDP by Industry/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/28 US Bureau of Economic Analysis/01 GDP by Industry/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/29 US Bureau of Economic Analysis/01 GDP by Industry/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/28 US Bureau of Economic Analysis/01 GDP by Industry/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/29 US Bureau of Economic Analysis/01 GDP by Industry/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/28 US Bureau of Economic Analysis/01 GDP by Industry/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/29 US Bureau of Economic Analysis/01 GDP by Industry/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/28 US Bureau of Economic Analysis/01 GDP by Industry/metadata.json b/03 Writing Algorithms/14 Datasets/29 US Bureau of Economic Analysis/01 GDP by Industry/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/28 US Bureau of Economic Analysis/01 GDP by Industry/metadata.json rename to 03 Writing Algorithms/14 Datasets/29 US Bureau of Economic Analysis/01 GDP by Industry/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/29 US Department of Agriculture/00.json b/03 Writing Algorithms/14 Datasets/30 US Department of Agriculture/00.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/29 US Department of Agriculture/00.json rename to 03 Writing Algorithms/14 Datasets/30 US Department of Agriculture/00.json diff --git a/03 Writing Algorithms/14 Datasets/29 US Department of Agriculture/01 USDA Fruit And Vegetables/01 Introduction.html b/03 Writing Algorithms/14 Datasets/30 US Department of Agriculture/01 USDA Fruit And Vegetables/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/29 US Department of Agriculture/01 USDA Fruit And Vegetables/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/30 US Department of Agriculture/01 USDA Fruit And Vegetables/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/29 US Department of Agriculture/01 USDA Fruit And Vegetables/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/30 US Department of Agriculture/01 USDA Fruit And Vegetables/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/29 US Department of Agriculture/01 USDA Fruit And Vegetables/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/30 US Department of Agriculture/01 USDA Fruit And Vegetables/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/29 US Department of Agriculture/01 USDA Fruit And Vegetables/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/30 US Department of Agriculture/01 USDA Fruit And Vegetables/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/29 US Department of Agriculture/01 USDA Fruit And Vegetables/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/30 US Department of Agriculture/01 USDA Fruit And Vegetables/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/29 US Department of Agriculture/01 USDA Fruit And Vegetables/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/30 US Department of Agriculture/01 USDA Fruit And Vegetables/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/29 US Department of Agriculture/01 USDA Fruit And Vegetables/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/30 US Department of Agriculture/01 USDA Fruit And Vegetables/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/29 US Department of Agriculture/01 USDA Fruit And Vegetables/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/30 US Department of Agriculture/01 USDA Fruit And Vegetables/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/29 US Department of Agriculture/01 USDA Fruit And Vegetables/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/30 US Department of Agriculture/01 USDA Fruit And Vegetables/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/29 US Department of Agriculture/01 USDA Fruit And Vegetables/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/30 US Department of Agriculture/01 USDA Fruit And Vegetables/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/29 US Department of Agriculture/01 USDA Fruit And Vegetables/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/30 US Department of Agriculture/01 USDA Fruit And Vegetables/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/29 US Department of Agriculture/01 USDA Fruit And Vegetables/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/30 US Department of Agriculture/01 USDA Fruit And Vegetables/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/29 US Department of Agriculture/01 USDA Fruit And Vegetables/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/30 US Department of Agriculture/01 USDA Fruit And Vegetables/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/29 US Department of Agriculture/01 USDA Fruit And Vegetables/08 Remove Subscriptions.html b/03 Writing Algorithms/14 Datasets/30 US Department of Agriculture/01 USDA Fruit And Vegetables/08 Remove Subscriptions.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/29 US Department of Agriculture/01 USDA Fruit And Vegetables/08 Remove Subscriptions.html rename to 03 Writing Algorithms/14 Datasets/30 US Department of Agriculture/01 USDA Fruit And Vegetables/08 Remove Subscriptions.html diff --git a/03 Writing Algorithms/14 Datasets/29 US Department of Agriculture/01 USDA Fruit And Vegetables/09 Supported Assets.html b/03 Writing Algorithms/14 Datasets/30 US Department of Agriculture/01 USDA Fruit And Vegetables/09 Supported Assets.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/29 US Department of Agriculture/01 USDA Fruit And Vegetables/09 Supported Assets.html rename to 03 Writing Algorithms/14 Datasets/30 US Department of Agriculture/01 USDA Fruit And Vegetables/09 Supported Assets.html diff --git a/03 Writing Algorithms/14 Datasets/29 US Department of Agriculture/01 USDA Fruit And Vegetables/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/30 US Department of Agriculture/01 USDA Fruit And Vegetables/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/29 US Department of Agriculture/01 USDA Fruit And Vegetables/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/30 US Department of Agriculture/01 USDA Fruit And Vegetables/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/29 US Department of Agriculture/01 USDA Fruit And Vegetables/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/30 US Department of Agriculture/01 USDA Fruit And Vegetables/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/29 US Department of Agriculture/01 USDA Fruit And Vegetables/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/30 US Department of Agriculture/01 USDA Fruit And Vegetables/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/29 US Department of Agriculture/01 USDA Fruit And Vegetables/metadata.json b/03 Writing Algorithms/14 Datasets/30 US Department of Agriculture/01 USDA Fruit And Vegetables/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/29 US Department of Agriculture/01 USDA Fruit And Vegetables/metadata.json rename to 03 Writing Algorithms/14 Datasets/30 US Department of Agriculture/01 USDA Fruit And Vegetables/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/30 United States Patent and Trademark Office/00.json b/03 Writing Algorithms/14 Datasets/31 United States Patent and Trademark Office/00.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/30 United States Patent and Trademark Office/00.json rename to 03 Writing Algorithms/14 Datasets/31 United States Patent and Trademark Office/00.json diff --git a/03 Writing Algorithms/14 Datasets/30 United States Patent and Trademark Office/01 Patent Maintenance/01 Introduction.html b/03 Writing Algorithms/14 Datasets/31 United States Patent and Trademark Office/01 Patent Maintenance/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/30 United States Patent and Trademark Office/01 Patent Maintenance/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/31 United States Patent and Trademark Office/01 Patent Maintenance/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/30 United States Patent and Trademark Office/01 Patent Maintenance/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/31 United States Patent and Trademark Office/01 Patent Maintenance/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/30 United States Patent and Trademark Office/01 Patent Maintenance/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/31 United States Patent and Trademark Office/01 Patent Maintenance/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/30 United States Patent and Trademark Office/01 Patent Maintenance/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/31 United States Patent and Trademark Office/01 Patent Maintenance/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/30 United States Patent and Trademark Office/01 Patent Maintenance/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/31 United States Patent and Trademark Office/01 Patent Maintenance/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/30 United States Patent and Trademark Office/01 Patent Maintenance/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/31 United States Patent and Trademark Office/01 Patent Maintenance/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/30 United States Patent and Trademark Office/01 Patent Maintenance/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/31 United States Patent and Trademark Office/01 Patent Maintenance/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/30 United States Patent and Trademark Office/01 Patent Maintenance/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/31 United States Patent and Trademark Office/01 Patent Maintenance/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/30 United States Patent and Trademark Office/01 Patent Maintenance/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/31 United States Patent and Trademark Office/01 Patent Maintenance/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/30 United States Patent and Trademark Office/01 Patent Maintenance/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/31 United States Patent and Trademark Office/01 Patent Maintenance/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/30 United States Patent and Trademark Office/01 Patent Maintenance/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/31 United States Patent and Trademark Office/01 Patent Maintenance/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/30 United States Patent and Trademark Office/01 Patent Maintenance/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/31 United States Patent and Trademark Office/01 Patent Maintenance/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/30 United States Patent and Trademark Office/01 Patent Maintenance/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/31 United States Patent and Trademark Office/01 Patent Maintenance/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/30 United States Patent and Trademark Office/01 Patent Maintenance/08 Universe Selection.html b/03 Writing Algorithms/14 Datasets/31 United States Patent and Trademark Office/01 Patent Maintenance/08 Universe Selection.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/30 United States Patent and Trademark Office/01 Patent Maintenance/08 Universe Selection.html rename to 03 Writing Algorithms/14 Datasets/31 United States Patent and Trademark Office/01 Patent Maintenance/08 Universe Selection.html diff --git a/03 Writing Algorithms/14 Datasets/30 United States Patent and Trademark Office/01 Patent Maintenance/09 Remove Subscriptions.html b/03 Writing Algorithms/14 Datasets/31 United States Patent and Trademark Office/01 Patent Maintenance/09 Remove Subscriptions.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/30 United States Patent and Trademark Office/01 Patent Maintenance/09 Remove Subscriptions.html rename to 03 Writing Algorithms/14 Datasets/31 United States Patent and Trademark Office/01 Patent Maintenance/09 Remove Subscriptions.html diff --git a/03 Writing Algorithms/14 Datasets/30 United States Patent and Trademark Office/01 Patent Maintenance/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/31 United States Patent and Trademark Office/01 Patent Maintenance/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/30 United States Patent and Trademark Office/01 Patent Maintenance/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/31 United States Patent and Trademark Office/01 Patent Maintenance/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/30 United States Patent and Trademark Office/01 Patent Maintenance/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/31 United States Patent and Trademark Office/01 Patent Maintenance/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/30 United States Patent and Trademark Office/01 Patent Maintenance/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/31 United States Patent and Trademark Office/01 Patent Maintenance/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/30 United States Patent and Trademark Office/01 Patent Maintenance/metadata.json b/03 Writing Algorithms/14 Datasets/31 United States Patent and Trademark Office/01 Patent Maintenance/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/30 United States Patent and Trademark Office/01 Patent Maintenance/metadata.json rename to 03 Writing Algorithms/14 Datasets/31 United States Patent and Trademark Office/01 Patent Maintenance/metadata.json diff --git a/03 Writing Algorithms/14 Datasets/31 VIX Central/00.json b/03 Writing Algorithms/14 Datasets/32 VIX Central/00.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/31 VIX Central/00.json rename to 03 Writing Algorithms/14 Datasets/32 VIX Central/00.json diff --git a/03 Writing Algorithms/14 Datasets/31 VIX Central/01 VIX Central Contango/01 Introduction.html b/03 Writing Algorithms/14 Datasets/32 VIX Central/01 VIX Central Contango/01 Introduction.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/31 VIX Central/01 VIX Central Contango/01 Introduction.html rename to 03 Writing Algorithms/14 Datasets/32 VIX Central/01 VIX Central Contango/01 Introduction.html diff --git a/03 Writing Algorithms/14 Datasets/31 VIX Central/01 VIX Central Contango/02 About the Provider.html b/03 Writing Algorithms/14 Datasets/32 VIX Central/01 VIX Central Contango/02 About the Provider.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/31 VIX Central/01 VIX Central Contango/02 About the Provider.html rename to 03 Writing Algorithms/14 Datasets/32 VIX Central/01 VIX Central Contango/02 About the Provider.html diff --git a/03 Writing Algorithms/14 Datasets/31 VIX Central/01 VIX Central Contango/03 Getting Started.html b/03 Writing Algorithms/14 Datasets/32 VIX Central/01 VIX Central Contango/03 Getting Started.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/31 VIX Central/01 VIX Central Contango/03 Getting Started.html rename to 03 Writing Algorithms/14 Datasets/32 VIX Central/01 VIX Central Contango/03 Getting Started.html diff --git a/03 Writing Algorithms/14 Datasets/31 VIX Central/01 VIX Central Contango/04 Data Summary.html b/03 Writing Algorithms/14 Datasets/32 VIX Central/01 VIX Central Contango/04 Data Summary.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/31 VIX Central/01 VIX Central Contango/04 Data Summary.html rename to 03 Writing Algorithms/14 Datasets/32 VIX Central/01 VIX Central Contango/04 Data Summary.html diff --git a/03 Writing Algorithms/14 Datasets/31 VIX Central/01 VIX Central Contango/05 Requesting Data.html b/03 Writing Algorithms/14 Datasets/32 VIX Central/01 VIX Central Contango/05 Requesting Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/31 VIX Central/01 VIX Central Contango/05 Requesting Data.html rename to 03 Writing Algorithms/14 Datasets/32 VIX Central/01 VIX Central Contango/05 Requesting Data.html diff --git a/03 Writing Algorithms/14 Datasets/31 VIX Central/01 VIX Central Contango/06 Accessing Data.html b/03 Writing Algorithms/14 Datasets/32 VIX Central/01 VIX Central Contango/06 Accessing Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/31 VIX Central/01 VIX Central Contango/06 Accessing Data.html rename to 03 Writing Algorithms/14 Datasets/32 VIX Central/01 VIX Central Contango/06 Accessing Data.html diff --git a/03 Writing Algorithms/14 Datasets/31 VIX Central/01 VIX Central Contango/07 Historical Data.html b/03 Writing Algorithms/14 Datasets/32 VIX Central/01 VIX Central Contango/07 Historical Data.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/31 VIX Central/01 VIX Central Contango/07 Historical Data.html rename to 03 Writing Algorithms/14 Datasets/32 VIX Central/01 VIX Central Contango/07 Historical Data.html diff --git a/03 Writing Algorithms/14 Datasets/31 VIX Central/01 VIX Central Contango/08 Remove Subscriptions.html b/03 Writing Algorithms/14 Datasets/32 VIX Central/01 VIX Central Contango/08 Remove Subscriptions.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/31 VIX Central/01 VIX Central Contango/08 Remove Subscriptions.html rename to 03 Writing Algorithms/14 Datasets/32 VIX Central/01 VIX Central Contango/08 Remove Subscriptions.html diff --git a/03 Writing Algorithms/14 Datasets/31 VIX Central/01 VIX Central Contango/98 Example Applications.html b/03 Writing Algorithms/14 Datasets/32 VIX Central/01 VIX Central Contango/98 Example Applications.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/31 VIX Central/01 VIX Central Contango/98 Example Applications.html rename to 03 Writing Algorithms/14 Datasets/32 VIX Central/01 VIX Central Contango/98 Example Applications.html diff --git a/03 Writing Algorithms/14 Datasets/31 VIX Central/01 VIX Central Contango/99 Data Point Attributes.html b/03 Writing Algorithms/14 Datasets/32 VIX Central/01 VIX Central Contango/99 Data Point Attributes.html similarity index 100% rename from 03 Writing Algorithms/14 Datasets/31 VIX Central/01 VIX Central Contango/99 Data Point Attributes.html rename to 03 Writing Algorithms/14 Datasets/32 VIX Central/01 VIX Central Contango/99 Data Point Attributes.html diff --git a/03 Writing Algorithms/14 Datasets/31 VIX Central/01 VIX Central Contango/metadata.json b/03 Writing Algorithms/14 Datasets/32 VIX Central/01 VIX Central Contango/metadata.json similarity index 100% rename from 03 Writing Algorithms/14 Datasets/31 VIX Central/01 VIX Central Contango/metadata.json rename to 03 Writing Algorithms/14 Datasets/32 VIX Central/01 VIX Central Contango/metadata.json diff --git a/05 Lean CLI/99 API Reference/00.json b/05 Lean CLI/99 API Reference/00.json index 40e8591c8d..0c9c5cc155 100644 --- a/05 Lean CLI/99 API Reference/00.json +++ b/05 Lean CLI/99 API Reference/00.json @@ -63,6 +63,7 @@ "56": "", "57": "", "58": "", - "59": "" + "59": "", + "60": "" } } \ No newline at end of file diff --git a/05 Lean CLI/99 API Reference/07 lean cloud live deploy/04 Options.html b/05 Lean CLI/99 API Reference/07 lean cloud live deploy/04 Options.html index 5413041076..153747eaa4 100644 --- a/05 Lean CLI/99 API Reference/07 lean cloud live deploy/04 Options.html +++ b/05 Lean CLI/99 API Reference/07 lean cloud live deploy/04 Options.html @@ -373,11 +373,11 @@ --notify-emails <string> - A comma-separated list of 'email:subject' pairs configuring email-notifications + A comma-separated list of 'email:subject' pairs configuring email-notifications. Wrap a subject containing ',' in double quotes, e.g. 'a@x.com:"Fills, orders"' --notify-webhooks <string> - A comma-separated list of 'url:HEADER_1=VALUE_1:HEADER_2=VALUE_2:etc' pairs configuring webhook-notifications + A comma-separated list of 'url:HEADER_1=VALUE_1:HEADER_2=VALUE_2:etc' pairs configuring webhook-notifications. Wrap a url (with ',' or a ':' outside its scheme and port) or a header (with ':' or ',') in double quotes, e.g. '"https://x.com/hook?t=1:2":"Auth=Bearer a:b"' --notify-sms <string> @@ -385,7 +385,7 @@ --notify-telegram <string> - A comma-separated list of 'user/group Id:token(optional)' pairs configuring telegram- notifications + A comma-separated list of 'user/group Id:token(optional)' pairs configuring telegram- notifications. Wrap a token containing ',' in double quotes --live-cash-balance <string> diff --git a/05 Lean CLI/99 API Reference/59 lean ui/01 Introduction.html b/05 Lean CLI/99 API Reference/59 lean ui/01 Introduction.html new file mode 100644 index 0000000000..bffb679686 --- /dev/null +++ b/05 Lean CLI/99 API Reference/59 lean ui/01 Introduction.html @@ -0,0 +1,5 @@ +

Browse projects and run commands on them in an interactive terminal UI.

+
+
$ lean ui [OPTIONS]
+
+

To use the CLI, you must be a member in an organization on a paid tier.

\ No newline at end of file diff --git a/05 Lean CLI/99 API Reference/59 lean ui/04 Options.html b/05 Lean CLI/99 API Reference/59 lean ui/04 Options.html new file mode 100644 index 0000000000..09441003a1 --- /dev/null +++ b/05 Lean CLI/99 API Reference/59 lean ui/04 Options.html @@ -0,0 +1,23 @@ +

The lean ui command supports the following options:

+ + + + + + + + + + + + + + + + + + + + + +
OptionDescription
--lean-config <file>The Lean configuration file that should be used (defaults to the nearest lean.json)
--verboseEnable debug logging
--helpDisplay the help text of the lean ui command and exit
\ No newline at end of file diff --git a/05 Lean CLI/99 API Reference/59 lean ui/metadata.json b/05 Lean CLI/99 API Reference/59 lean ui/metadata.json new file mode 100644 index 0000000000..4a6612d822 --- /dev/null +++ b/05 Lean CLI/99 API Reference/59 lean ui/metadata.json @@ -0,0 +1,12 @@ +{ + "type": "metadata", + "values": { + "description": "API reference for the command `lean ui` in command line console.", + "keywords": "lean cli, api, api reference, command, command line, lean ui", + "og:description": "API reference for the command `lean ui` in command line console.", + "og:title": "lean ui - Documentation QuantConnect.com", + "og:type": "website", + "og:site_name": "lean ui - QuantConnect.com", + "og:image": "https://cdn.quantconnect.com/docs/i/lean-cli/api-reference/lean-ui.png" + } +} \ No newline at end of file diff --git a/05 Lean CLI/99 API Reference/59 lean whoami/01 Introduction.html b/05 Lean CLI/99 API Reference/60 lean whoami/01 Introduction.html similarity index 100% rename from 05 Lean CLI/99 API Reference/59 lean whoami/01 Introduction.html rename to 05 Lean CLI/99 API Reference/60 lean whoami/01 Introduction.html diff --git a/05 Lean CLI/99 API Reference/59 lean whoami/02 Description.html b/05 Lean CLI/99 API Reference/60 lean whoami/02 Description.html similarity index 100% rename from 05 Lean CLI/99 API Reference/59 lean whoami/02 Description.html rename to 05 Lean CLI/99 API Reference/60 lean whoami/02 Description.html diff --git a/05 Lean CLI/99 API Reference/59 lean whoami/04 Options.html b/05 Lean CLI/99 API Reference/60 lean whoami/04 Options.html similarity index 100% rename from 05 Lean CLI/99 API Reference/59 lean whoami/04 Options.html rename to 05 Lean CLI/99 API Reference/60 lean whoami/04 Options.html diff --git a/05 Lean CLI/99 API Reference/59 lean whoami/metadata.json b/05 Lean CLI/99 API Reference/60 lean whoami/metadata.json similarity index 100% rename from 05 Lean CLI/99 API Reference/59 lean whoami/metadata.json rename to 05 Lean CLI/99 API Reference/60 lean whoami/metadata.json diff --git a/Resources/datasets/available-universe.html b/Resources/datasets/available-universe.html index 61d63270cd..6923164451 100644 --- a/Resources/datasets/available-universe.html +++ b/Resources/datasets/available-universe.html @@ -38,6 +38,11 @@ CryptoUniverse Learn more + + Factors + FactorsUniverse + Learn more + International Future Universe @@ -98,6 +103,11 @@ CoinGeckoUniverse Learn more + + US Bank Financials + FDICBankFinancialsUniverse + Learn more + OTC Transparency diff --git a/Resources/datasets/supported-alternative-dataset-universe.html b/Resources/datasets/supported-alternative-dataset-universe.html index 9c17f796b6..2027b3f855 100644 --- a/Resources/datasets/supported-alternative-dataset-universe.html +++ b/Resources/datasets/supported-alternative-dataset-universe.html @@ -8,6 +8,7 @@
  • Upcoming Earnings
  • Upcoming IPOs
  • Upcoming Splits
  • +
  • US Bank Financials
  • OTC Transparency
  • Regulation SHO
  • CNBC Trading
  • diff --git a/project-templates/csharp/datasets.json b/project-templates/csharp/datasets.json index b4bf37b236..94a7e17e9a 100644 --- a/project-templates/csharp/datasets.json +++ b/project-templates/csharp/datasets.json @@ -720,6 +720,58 @@ "usage": "public override void OnData(Slice slice)\n{\n if (slice.MarginInterestRates.ContainsKey(_cryptoFuture.Symbol))\n {\n var interestRate = slice.MarginInterestRates[_cryptoFuture.Symbol].InterestRate;\n Log($\"{_cryptoFuture.Symbol} interest rate at {slice.Time}: {interestRate}\");\n }\n}" } }, + { + "name": "US SEC 13F Whales", + "shortDescription": "Ownership filings from the SEC as their holders filed them, starting with Form 13F institutional holdings", + "history": "May 2013", + "reach": "18,877 US Equities", + "url": "sec-whales", + "examples": { + "init": "_datasetSymbol = AddData(_symbol).Symbol;", + "history": "var history = History(_datasetSymbol, TimeSpan.FromDays(60), Resolution.Daily);", + "research-history": "var history = qb.History(datasetSymbol, TimeSpan.FromDays(60), Resolution.Daily);", + "usage": "public override void OnData(Slice slice)\n{\n if (slice.ContainsKey(_datasetSymbol))\n {\n foreach (SEC13FHolding holding in slice[_datasetSymbol])\n {\n Log($\"{_datasetSymbol} CIK {holding.ManagerCik} at {slice.Time}: {holding.Amount} {holding.AmountType}\");\n }\n }\n}" + } + }, + { + "name": "US Bank Financials", + "shortDescription": "Quarterly call reports of every FDIC-insured bank, linked to the listed owner, published by the Federal Deposit Insurance Corporation", + "history": "June 1984", + "reach": "24,064 Banks", + "url": "fdic-us-bank-financials", + "examples": { + "init": "_datasetSymbol = AddData(_symbol).Symbol;", + "history": "var history = History(_datasetSymbol, TimeSpan.FromDays(365), Resolution.Daily);", + "research-history": "var history = qb.History(datasetSymbol, TimeSpan.FromDays(365), Resolution.Daily);", + "usage": "public override void OnData(Slice slice)\n{\n if (slice.TryGet(_datasetSymbol, out var reports))\n {\n foreach (FDICBankFinancial report in reports.Data)\n {\n Log($\"{report.InstitutionName} {report.ReportDate}: {report.EstimatedUninsuredDeposits}\");\n }\n }\n}" + } + }, + { + "name": "US Bank Failures", + "shortDescription": "Every failure of an FDIC-insured bank since 1934, with its assets and deposits, published by the Federal Deposit Insurance Corporation", + "history": "April 1934", + "reach": "4,117 Bank Failures", + "url": "fdic-us-bank-failures", + "examples": { + "init": "_datasetSymbol = AddData(FDIC.Failures).Symbol;", + "history": "var history = History(_datasetSymbol, TimeSpan.FromDays(730), Resolution.Daily);", + "research-history": "var history = qb.History(datasetSymbol, TimeSpan.FromDays(730), Resolution.Daily);", + "usage": "public override void OnData(Slice slice)\n{\n if (slice.TryGet(_datasetSymbol, out var failures))\n {\n foreach (FDICBankFailure failure in failures.Data)\n {\n Log($\"{failure.InstitutionName} ({failure.State}): assets {failure.TotalAssets}\");\n }\n }\n}" + } + }, + { + "name": "Factors", + "shortDescription": "Daily precomputed factors for individual US Equities, plus market-wide factors not linked to specific Equities", + "history": "January 1998", + "reach": "SPY Constituents, plus unlinked factors", + "url": "quantconnect-factors", + "examples": { + "init": "_equityFactors = AddData(_equity.Symbol).Symbol;", + "history": "var equityFactorsHistory = History(_equityFactors, 100, Resolution.Daily);", + "research-history": "var equityFactorsHistory = qb.History(equityFactors, 100, Resolution.Daily);", + "usage": "public override void OnData(Slice data)\n{\n if (data.Get().TryGetValue(_equityFactors, out var equityFactors))\n {\n var value = equityFactors[Factors.Roc1Day];\n }\n\n if (data.Get().TryGetValue(_unlinkedFactors, out var unlinkedFactors))\n {\n var ustYield = unlinkedFactors[Factors.UstYield1Month];\n }\n}" + } + }, { "name": "Fear and Greed", "shortDescription": "A daily index between 0 and 100, representing the degree of fear or greed in the US Equity market.", diff --git a/project-templates/python/datasets.json b/project-templates/python/datasets.json index f2b2910a76..55504e2198 100644 --- a/project-templates/python/datasets.json +++ b/project-templates/python/datasets.json @@ -720,6 +720,66 @@ "usage": "def on_data(self, slice: Slice) -> None:\n if self._crypto_future.symbol in slice.margin_interest_rates:\n interest_rate = slice.margin_interest_rates[self._crypto_future.symbol].interest_rate\n self.log(f'{self._crypto_future.symbol} interest rate at {slice.time}: {interest_rate}')" } }, + { + "name": "US SEC 13F Whales", + "shortDescription": "Ownership filings from the SEC as their holders filed them, starting with Form 13F institutional holdings", + "history": "May 2013", + "reach": "18,877 US Equities", + "url": "sec-whales", + "examples": { + "init": "self._dataset_symbol = self.add_data(SEC13FHoldings, self._symbol).symbol", + "history": "history_df = self.history(SEC13FHoldings, self._dataset_symbol, timedelta(days=60), Resolution.DAILY, flatten=True)", + "research-history": "history_df = qb.history(SEC13FHoldings, dataset_symbol, timedelta(days=60), Resolution.DAILY, flatten=True)", + "usage": "def on_data(self, slice: Slice) -> None:\n if slice.contains_key(self._dataset_symbol):\n for holding in slice[self._dataset_symbol]:\n self.log(f\"{self._dataset_symbol} CIK {holding.manager_cik} at {slice.time}: {holding.amount} {holding.amount_type}\")" + } + }, + { + "name": "US Bank Financials", + "shortDescription": "Quarterly call reports of every FDIC-insured bank, linked to the listed owner, published by the Federal Deposit Insurance Corporation", + "history": "June 1984", + "reach": "24,064 Banks", + "url": "fdic-us-bank-financials", + "examples": { + "init": "self._dataset_symbol = self.add_data(FDICBankFinancials, self._symbol).symbol", + "history": "history = self.history[FDICBankFinancials](self._dataset_symbol, timedelta(days=365), Resolution.DAILY)", + "universe-init": "self._universe = self.add_universe(FDICBankFinancialsUniverse, self.universe_selection)", + "universe-history": "history = self.history(self._universe, 30, Resolution.DAILY, flatten=True)", + "universe-filter": "def universe_selection(self, alt_coarse: List[FDICBankFinancialsUniverse]) -> List[Symbol]:\n return list({d.symbol for d in alt_coarse if d.domestic_deposits and (d.estimated_uninsured_deposits or 0) / d.domestic_deposits < 0.3})", + "research-history": "history = qb.history[FDICBankFinancials](dataset_symbol, timedelta(days=365), Resolution.DAILY)", + "research-universe-history": "history = qb.universe_history(universe, qb.time-timedelta(30), qb.time, flatten=True)", + "usage": "def on_data(self, slice: Slice) -> None:\n reports = slice.get(FDICBankFinancials).get(self._dataset_symbol)\n if reports:\n for report in reports.data:\n self.log(f\"{report.institution_name} {report.report_date}: {report.estimated_uninsured_deposits}\")" + } + }, + { + "name": "US Bank Failures", + "shortDescription": "Every failure of an FDIC-insured bank since 1934, with its assets and deposits, published by the Federal Deposit Insurance Corporation", + "history": "April 1934", + "reach": "4,117 Bank Failures", + "url": "fdic-us-bank-failures", + "examples": { + "init": "self._dataset_symbol = self.add_data(FDICBankFailures, FDIC.FAILURES).symbol", + "history": "history = self.history[FDICBankFailures](self._dataset_symbol, timedelta(days=730), Resolution.DAILY)", + "research-history": "history = qb.history[FDICBankFailures](dataset_symbol, timedelta(days=730), Resolution.DAILY)", + "usage": "def on_data(self, slice: Slice) -> None:\n failures = slice.get(FDICBankFailures).get(self._dataset_symbol)\n if failures:\n for failure in failures.data:\n self.log(f\"{failure.institution_name} ({failure.state}): assets {failure.total_assets}\")" + } + }, + { + "name": "Factors", + "shortDescription": "Daily precomputed factors for individual US Equities, plus market-wide factors not linked to specific Equities", + "history": "January 1998", + "reach": "SPY Constituents, plus unlinked factors", + "url": "quantconnect-factors", + "examples": { + "init": "self._equity.factors = self.add_data(Factors, self._equity.symbol).symbol", + "history": "equity_factors_history_df = self.history(self._equity.factors, 100, Resolution.DAILY)", + "universe-init": "self._universe = self.add_universe(FactorsUniverse, self._select_assets)", + "universe-history": "history = self.history(self._universe, 30, Resolution.DAILY, flatten=True)", + "universe-filter": "def _select_assets(self, data: List[FactorsUniverse]) -> List[Symbol]:\n ust_yield = None\n positive = []\n negative = []\n for factors in data:\n if Factors.UST_YIELD_1_MONTH in factors.keys:\n ust_yield = factors[Factors.UST_YIELD_1_MONTH]\n elif Factors.ROC_1_DAY in factors.keys:\n if factors[Factors.ROC_1_DAY] > 0:\n positive.append(factors.symbol)\n else:\n negative.append(factors.symbol)\n return positive if ust_yield < 4 else negative", + "research-history": "equity_factors_history_df = qb.history(equity.factors, 100, Resolution.DAILY)", + "research-universe-history": "history = qb.universe_history(universe, qb.time-timedelta(30), qb.time, flatten=True)", + "usage": "def on_data(self, data: Slice) -> None:\n equity_factors = data.get(Factors).get(self._equity.factors)\n if equity_factors:\n value = equity_factors[Factors.ROC_1_DAY]\n\n unlinked_factors = data.get(Factors).get(self._unlinked_factors)\n if unlinked_factors:\n ust_yield = unlinked_factors[Factors.UST_YIELD_1_MONTH]" + } + }, { "name": "Fear and Greed", "shortDescription": "A daily index between 0 and 100, representing the degree of fear or greed in the US Equity market.", diff --git a/skill-templates/datasets/alternative-data-universes/SKILL.md b/skill-templates/datasets/alternative-data-universes/SKILL.md index 17f4b8c2d0..e7f9ca49f7 100644 --- a/skill-templates/datasets/alternative-data-universes/SKILL.md +++ b/skill-templates/datasets/alternative-data-universes/SKILL.md @@ -13,6 +13,7 @@ description: Use when selecting a dynamic Equity universe from QuantConnect/LEAN - `EODHDUpcomingEarnings` — Upcoming Earnings - `EODHDUpcomingIPOs` — Upcoming IPOs - `EODHDUpcomingSplits` — Upcoming Splits +- `FDICBankFinancialsUniverse` — US Bank Financials - `FINRAShortInterestUniverse` — OTC Transparency - `FINRAShortSaleVolumeUniverse` — Regulation SHO - `QuiverCNBCsUniverse` — CNBC Trading diff --git a/skill-templates/datasets/alternative-data/SKILL.md b/skill-templates/datasets/alternative-data/SKILL.md index 18c2f504c0..4b86b6dd5e 100644 --- a/skill-templates/datasets/alternative-data/SKILL.md +++ b/skill-templates/datasets/alternative-data/SKILL.md @@ -57,6 +57,7 @@ public override void OnData(Slice slice) | `EstimizeEstimate` | Estimize | py`id`cs`Id`, py`ticker`cs`Ticker`, py`fiscal_year`cs`FiscalYear`, py`fiscal_quarter`cs`FiscalQuarter`, py`created_at`cs`CreatedAt`, py`eps`cs`Eps`, py`revenue`cs`Revenue`, py`user_name`cs`UserName`, py`analyst_id`cs`AnalystId`, py`flagged`cs`Flagged` | | `EstimizeRelease` | Estimize | py`id`cs`Id`, py`fiscal_year`cs`FiscalYear`, py`fiscal_quarter`cs`FiscalQuarter`, py`release_date`cs`ReleaseDate`, py`eps`cs`Eps`, py`revenue`cs`Revenue`, py`wall_street_eps_estimate`cs`WallStreetEpsEstimate`, py`wall_street_revenue_estimate`cs`WallStreetRevenueEstimate`, py`consensus_eps_estimate`cs`ConsensusEpsEstimate`, py`consensus_revenue_estimate`cs`ConsensusRevenueEstimate`, py`consensus_weighted_eps_estimate`cs`ConsensusWeightedEpsEstimate`, py`consensus_weighted_revenue_estimate`cs`ConsensusWeightedRevenueEstimate` | | `ECBYieldCurve` | Euro Yield Curve | py`three_month`cs`ThreeMonth`, py`six_month`cs`SixMonth`, py`one_year`cs`OneYear`, py`two_year`cs`TwoYear`, py`three_year`cs`ThreeYear`, py`five_year`cs`FiveYear`, py`seven_year`cs`SevenYear`, py`ten_year`cs`TenYear`, py`twenty_year`cs`TwentyYear`, py`thirty_year`cs`ThirtyYear` | +| `Factors` | Factors | py`item`cs`[System.String]`, py`keys`cs`Keys`, py`is_unlinked`cs`IsUnlinked` | | `FamaFrench` | Fama French | py`market_excess_return`cs`MarketExcessReturn`, py`smb`cs`Smb`, py`hml`cs`Hml`, py`rmw`cs`Rmw`, py`cma`cs`Cma`, py`momentum`cs`Momentum`, py`risk_free_rate`cs`RiskFreeRate`, py`is_estimate`cs`IsEstimate` | | `FearGreedIndex` | Fear and Greed | py`spx`cs`Spx`, py`spx_sma`cs`SpxSma`, py`market_momentum`cs`MarketMomentum`, py`stocks_at_yearly_highs`cs`StocksAtYearlyHighs`, py`stocks_at_yearly_lows`cs`StocksAtYearlyLows`, py`total_for_strength`cs`TotalForStrength`, py`net_yearly_highs_and_lows`cs`NetYearlyHighsAndLows`, py`stock_price_strength`cs`StockPriceStrength`, py`stocks_up_daily`cs`StocksUpDaily`, py`stocks_down_daily`cs`StocksDownDaily`, py`total_for_breadth`cs`TotalForBreadth`, py`mc_clellan_summation_index`cs`McClellanSummationIndex`, py`stock_price_breadth`cs`StockPriceBreadth`, py`put_call_ratio_daily`cs`PutCallRatioDaily`, py`put_call_ratio_sma`cs`PutCallRatioSma`, py`put_call_ratio_normalized`cs`PutCallRatioNormalized`, py`vix`cs`Vix`, py`vix_sma`cs`VixSma`, py`market_volatility`cs`MarketVolatility`, py`stock_returns`cs`StockReturns`, py`bond_returns`cs`BondReturns`, py`stock_bond_return_difference`cs`StockBondReturnDifference`, py`safe_haven_demand`cs`SafeHavenDemand`, py`junk_bond_yield`cs`JunkBondYield`, py`investment_grade_bond_yield`cs`InvestmentGradeBondYield`, py`bond_yield_spread`cs`BondYieldSpread`, py`junk_bond_demand`cs`JunkBondDemand`, py`qc_index`cs`QCIndex`, py`cnn_index`cs`CNNIndex` | | `BEAGDPByIndustry` | GDP by Industry | py`value_added`cs`ValueAdded`, py`real_value_added`cs`RealValueAdded`, py`value_added_price_index`cs`ValueAddedPriceIndex`, py`value_added_quantity_index`cs`ValueAddedQuantityIndex`, py`share_of_gdp`cs`ShareOfGDP`, py`gross_output`cs`GrossOutput`, py`real_gross_output`cs`RealGrossOutput`, py`gross_output_price_index`cs`GrossOutputPriceIndex`, py`gross_output_quantity_index`cs`GrossOutputQuantityIndex`, py`intermediate_inputs`cs`IntermediateInputs`, py`real_intermediate_inputs`cs`RealIntermediateInputs`, py`intermediate_inputs_price_index`cs`IntermediateInputsPriceIndex`, py`intermediate_inputs_quantity_index`cs`IntermediateInputsQuantityIndex` | @@ -81,6 +82,9 @@ public override void OnData(Slice slice) | `EODHDUpcomingEarnings` | Upcoming Earnings | py`report_date`cs`ReportDate`, py`report_time`cs`ReportTime`, py`estimate`cs`Estimate` | | `EODHDUpcomingIPOs` | Upcoming IPOs | py`name`cs`Name`, py`exchange`cs`Exchange`, py`ipo_date`cs`IpoDate`, py`filing_date`cs`FilingDate`, py`amended_date`cs`AmendedDate`, py`lowest_price`cs`LowestPrice`, py`highest_price`cs`HighestPrice`, py`offer_price`cs`OfferPrice`, py`shares`cs`Shares`, py`deal_type`cs`DealType` | | `EODHDUpcomingSplits` | Upcoming Splits | py`split_date`cs`SplitDate`, py`optionable`cs`Optionable`, py`split_factor`cs`SplitFactor` | +| `FDICBankFailures` | US Bank Failures | py`value`cs`Value` | +| `FDICBankFinancials` | US Bank Financials | py`value`cs`Value` | +| `FDICBankReports` | US Bank Financials | py`value`cs`Value` | | `BLSEconomicSurveysCes` | US Bureau of Labor Statistics (BLS) | py`total_nonfarm`cs`TotalNonfarm`, py`total_private`cs`TotalPrivate`, py`average_hourly_earnings`cs`AverageHourlyEarnings`, py`average_weekly_hours`cs`AverageWeeklyHours`, py`average_weekly_earnings`cs`AverageWeeklyEarnings`, py`production_hourly_earnings`cs`ProductionHourlyEarnings`, py`production_employees`cs`ProductionEmployees`, py`manufacturing`cs`Manufacturing`, py`goods_producing`cs`GoodsProducing`, py`private_service_providing`cs`PrivateServiceProviding`, py`construction`cs`Construction`, py`retail_trade`cs`RetailTrade`, py`financial_activities`cs`FinancialActivities`, py`education_and_health_services`cs`EducationAndHealthServices`, py`leisure_and_hospitality`cs`LeisureAndHospitality`, py`mining_and_logging`cs`MiningAndLogging` | | `BLSEconomicSurveysCpi` | US Bureau of Labor Statistics (BLS) | py`all_items`cs`AllItems`, py`core_cpi`cs`CoreCpi`, py`food`cs`Food`, py`food_at_home`cs`FoodAtHome`, py`food_away_from_home`cs`FoodAwayFromHome`, py`energy`cs`Energy`, py`shelter`cs`Shelter`, py`rent_of_primary_residence`cs`RentOfPrimaryResidence`, py`gasoline`cs`Gasoline`, py`medical_care`cs`MedicalCare`, py`apparel`cs`Apparel`, py`education_and_communication`cs`EducationAndCommunication`, py`new_vehicles`cs`NewVehicles`, py`used_cars_and_trucks`cs`UsedCarsAndTrucks`, py`college_tuition_and_fees`cs`CollegeTuitionAndFees` | | `BLSEconomicSurveysJolts` | US Bureau of Labor Statistics (BLS) | py`job_openings`cs`JobOpenings`, py`job_openings_rate`cs`JobOpeningsRate`, py`hires`cs`Hires`, py`hires_rate`cs`HiresRate`, py`quits`cs`Quits`, py`quits_rate`cs`QuitsRate`, py`total_separations`cs`TotalSeparations`, py`layoffs_and_discharges`cs`LayoffsAndDischarges` | @@ -128,6 +132,7 @@ public override void OnData(Slice slice) | `ExtractAlphaTrueBeats`->`ExtractAlphaTrueBeat` | True Beats | py`fiscal_period`cs`FiscalPeriod`, py`earnings_metric`cs`EarningsMetric`, py`analyst_estimates_count`cs`AnalystEstimatesCount`, py`true_beat`cs`TrueBeat`, py`expert_beat`cs`ExpertBeat`, py`trend_beat`cs`TrendBeat`, py`management_beat`cs`ManagementBeat` | | `QuiverCongress`->`QuiverCongressDataPoint` | US Congress Trading | py`record_date`cs`RecordDate`, py`updated_at`cs`UpdatedAt`, py`report_date`cs`ReportDate`, py`transaction_date`cs`TransactionDate`, py`representative`cs`Representative`, py`transaction`cs`Transaction`, py`amount`cs`Amount`, py`maximum_amount`cs`MaximumAmount`, py`house`cs`House`, py`party`cs`Party`, py`district`cs`District`, py`state`cs`State` | | `RegalyticsRegulatoryArticles`->`RegalyticsRegulatoryArticle` | US Regulatory Alerts - Financial Sector | py`id`cs`Id`, py`title`cs`Title`, py`summary`cs`Summary`, py`status`cs`Status`, py`classification`cs`Classification`, py`filing_type`cs`FilingType`, py`in_federal_register`cs`InFederalRegister`, py`federal_register_number`cs`FederalRegisterNumber`, py`docket_file_number`cs`DocketFileNumber`, py`sec_release_number`cs`SecReleaseNumber`, py`proposed_comments_due_date`cs`ProposedCommentsDueDate`, py`original_publication_date`cs`OriginalPublicationDate`, py`federal_register_publication_date`cs`FederalRegisterPublicationDate`, py`rule_effective_date`cs`RuleEffectiveDate`, py`sourced_at`cs`SourcedAt`, py`latest_update`cs`LatestUpdate`, py`alert_type`cs`AlertType`, py`states`cs`States`, py`agencies`cs`Agencies`, py`sector`cs`Sector`, py`announcement_url`cs`AnnouncementUrl`, py`created_at`cs`CreatedAt` | +| `SEC13FHoldings`->`SEC13FHolding` | US SEC 13F Whales | py`accession_number`cs`AccessionNumber`, py`manager_cik`cs`ManagerCik`, py`manager_name`cs`ManagerName`, py`period_end`cs`PeriodEnd`, py`form_type`cs`FormType`, py`amendment_type`cs`AmendmentType`, py`amendment_number`cs`AmendmentNumber`, py`title_of_class`cs`TitleOfClass`, py`amount`cs`Amount`, py`amount_type`cs`AmountType`, py`reported_value`cs`ReportedValue`, py`value_scale`cs`ValueScale`, py`market_value`cs`MarketValue`, py`put_call`cs`PutCall`, py`investment_discretion`cs`InvestmentDiscretion`, py`other_manager`cs`OtherManager`, py`voting_sole`cs`VotingSole`, py`voting_shared`cs`VotingShared`, py`voting_none`cs`VotingNone`, py`confidential_omitted`cs`ConfidentialOmitted`, py`date_reported`cs`DateReported` | | `USDAFruitAndVegetables`->`USDAFruitAndVegetable` | USDA Fruit And Vegetables | py`form`cs`Form`, py`average_retail_price`cs`AverageRetailPrice`, py`unit`cs`Unit`, py`preparation_yield_factor`cs`PreparationYieldFactor`, py`cup_equivalent_size`cs`CupEquivalentSize`, py`cup_equivalent_unit`cs`CupEquivalentUnit`, py`price_per_cup_equivalent`cs`PricePerCupEquivalent` | ## Common mistakes