QuantConnect/Lean · error · RegressionTestException

Custom data was not fetched

Error message

Custom data was not fetched

What it means

OnEndOfAlgorithm asserts _receivedData.Count > 0. _receivedData is populated in OnData only when slice.ContainsKey(_customSymbol) is true and the zero-field check passes. A count of 0 means no custom data point was ever delivered to OnData during the entire backtest.

Solutions

  1. Confirm ObjectStore.Save(CustomDataKey, ...) succeeds in Initialize and the key matches SortCustomData.CustomDataKey used in GetSource.
  2. Verify AddData<SortCustomData>(...) symbol and that _customSymbol matches the subscription.
  3. Log inside SortCustomData.Reader to confirm it is invoked and returns non-null objects.
  4. Check the date range aligns with the data timestamps (2024-09-09 to 2024-10-03).
Defensive patterns

Strategy: validation

Validate before calling

// In Initialize, verify the object store save succeeded
ObjectStore.Save(CustomDataKey, string.Join("\n", descendingCustomData));
if (!ObjectStore.ContainsKey(CustomDataKey))
{
    throw new InvalidOperationException("ObjectStore save failed; no custom data will be delivered");
}

Prevention

When it happens

Trigger: The SortCustomData subscription never produced a data point: ObjectStore.Save failed or was empty, the subscription symbol/key mismatch, GetSource returns an unreachable key, or the date range (2024-09-09 to 2024-10-03) has no matching rows after filtering.

Common situations: ObjectStore key in SortCustomData.CustomDataKey does not match the AddData symbol registration, the object store is not enabled/configured, or Reader returns null for every line so nothing reaches OnData.

Related errors


AI-assisted analysis of QuantConnect/Lean@d2c3659f87 (2026-08-13). Data as JSON: /api/errors/3fed1f0a12ce63cb. Report an issue: GitHub.

Appendix: source

Thrown at Algorithm.CSharp/DescendingCustomDataObjectStoreRegressionAlgorithm.cs:96

        public override void OnData(Slice slice)
        {
            if (slice.ContainsKey(_customSymbol))
            {
                var sortCustomData = slice.Get<SortCustomData>(_customSymbol);
                if (sortCustomData.Open == 0 || sortCustomData.High == 0 || sortCustomData.Low == 0 || sortCustomData.Close == 0 || sortCustomData.Price == 0)
                {
                    throw new RegressionTestException("One or more custom data fields (Open, High, Low, Close, Price) are zero.");
                }

                _receivedData.Add(sortCustomData);
            }
        }

        public override void OnEndOfAlgorithm()
        {
            if (_receivedData.Count == 0)
            {
                throw new RegressionTestException("Custom data was not fetched");
            }

            var history = History<SortCustomData>(_customSymbol, StartDate, EndDate, Resolution.Hour).ToList();

            if (history.Count != _receivedData.Count)
            {
                throw new RegressionTestException("History request returned different data than expected");
            }

            // Iterate through the history collection, checking if the EndTime is in ascending order.
            for (int i = 0; i < history.Count - 1; i++)
            {
                if (history[i].EndTime > history[i + 1].EndTime)
                {
                    throw new RegressionTestException($"Order failure: {history[i].EndTime} > {history[i + 1].EndTime} at index {i}.");
                }
            }
        }

View on GitHub (pinned to d2c3659f87)