Historical Data

Getting Started

Introduction

There are two ways to request historical data in your algorithms: direct historical data requests and indirect algorithm warm up.

History Requests

History requests return all of the data you request as a single object. Follow these steps to get some historical data:

  1. Create a new project.
  2. Projects contain files to run backtests, launch research notebooks, perform parameter optimizations, and deploy live trading strategies. You need to create projects in order to create strategies and share your work with other members.

    The process to create a new project depends on if you use the Cloud Platform, Local Platform, or CLI.

  3. In the initializeInitialize method, add an asset.
  4. The Initializeinitialize method is the entry point of your algorithm where you define a series of settings, including security subscriptions, starting cash balances, and warm-up periods. LEAN only calls the Initializeinitialize method one time, at the start of your algorithm.

    var spy = AddEquity("SPY");
    spy = self.add_equity('SPY')
  5. Call the historyHistory method with the asset's Symbol and a lookback period.
  6. Symbol objects are a way to identify or "finger-print" tradable assets so that no further database look-up is required. All QuantConnect and LEAN Algorithm API methods use Symbol objects to identify assets.

    var history = History(spy.Symbol, 5, Resolution.Daily);
    history = self.history(spy.symbol, 5, Resolution.DAILY)
    DataFrame of 5 OHLCV data points for SPY.

Warm Up Periods

Warm-up simulates winding back the clock from the time you deploy the algorithm. In a backest, this is the start date of your algorithm. In live trading, it's the current date. Follow these steps to add a warm-up period to the start of your algorithm:

  1. Create a new project.
  2. The process to create a new project depends on if you use the Cloud Platform, Local Platform, or CLI.

  3. In the initializeInitialize method, set the backtest dates and add an asset.
  4. SetStartDate(2024, 12, 1);
    SetEndDate(2024, 12, 2);
    AddEquity("SPY", Resolution.Daily);
    self.set_start_date(2024, 12, 1)
    self.set_end_date(2024, 12, 2)
    self.add_equity("SPY", Resolution.DAILY)
  5. In the initializeInitialize method, call the set_warm_upSetWarmUp method with the warm-up duration.
  6. SetWarmUp(10, Resolution.Daily);
    self.set_warm_up(10, Resolution.DAILY)
  7. In the on_dataOnData method, log the time and warm-up state.
  8. Log($"IsWarmingUp at {Time}: {IsWarmingUp}");
    self.log(f"self.is_warming_up at {self.time}: {self.is_warming_up}")
    Algorithm starting warm up...
    IsWarmingUp at 11/22/2024 4:00:00 PM: True
    IsWarmingUp at 11/25/2024 4:00:00 PM: True
    IsWarmingUp at 11/26/2024 4:00:00 PM: True
    IsWarmingUp at 11/27/2024 4:00:00 PM: True
    IsWarmingUp at 11/29/2024 1:00:00 PM: True
    Algorithm finished warming up.
    IsWarmingUp at 12/2/2024 4:00:00 PM: False
    Algorithm starting warm up...
    self.is_warming_up at 2024-11-22 16:00:00: True
    self.is_warming_up at 2024-11-25 16:00:00: True
    self.is_warming_up at 2024-11-26 16:00:00: True
    self.is_warming_up at 2024-11-27 16:00:00: True
    self.is_warming_up at 2024-11-29 13:00:00: True
    Algorithm finished warming up.
    self.is_warming_up at 2024-12-02 16:00:00: False

For more information about warm-up, see Warm Up Periods.

You can also see our Videos. You can also get in touch with us via Discord.

Did you find this page helpful?

Contribute to the documentation: