---
title: "Manual Universes"
description: "The ManualUniverseSelectionModel selects a static, fixed set of assets. It's similar to adding securities with the AddSecurity API methods."
canonical: https://www.quantconnect.com/docs/v2/writing-algorithms/algorithm-framework/universe-selection/manual-universes
markdown: https://www.quantconnect.com/docs/v2/writing-algorithms/algorithm-framework/universe-selection/manual-universes.md
language: python
source: https://github.com/QuantConnect/Documentation/tree/master/03%20Writing%20Algorithms/34%20Algorithm%20Framework/02%20Universe%20Selection/03%20Manual%20Universes
modified: 2026-10-29
index: https://www.quantconnect.com/llms.txt
---

# Manual Universes

[Documentation](https://www.quantconnect.com/docs/v2.md) > [Writing Algorithms](https://www.quantconnect.com/docs/v2/writing-algorithms.md) > Algorithm Framework > Universe Selection > Manual Universes

> Code examples are shown in Python. Append `?lang=csharp` to this URL for the C# version of this page.

## Introduction

The `ManualUniverseSelectionModel` selects a static, fixed set of assets. It is similar to adding securities with the traditional `add_security` API methods. If your algorithm has a static universe, you can use [automatic indicators](https://www.quantconnect.com/docs/v2/writing-algorithms/indicators/automatic-indicators.md) instead of [manual indicators](https://www.quantconnect.com/docs/v2/writing-algorithms/indicators/manual-indicators.md) in your algorithm.

Manual universes can be prone to [look-ahead bias](https://www.quantconnect.com/docs/v2/writing-algorithms/key-concepts/glossary.md#18-look-ahead-bias). For example, if you select a set of securities that have performed well during the backtest period, you are incorporating information from the future into the backtest and the algorithm may underperform in live mode.

## Add Manual Universe Selection

To add a `ManualUniverseSelectionModel` to your algorithm, in the `initialize` method, call the `add_universe_selection` method. The `ManualUniverseSelectionModel` constructor expects a list of `Symbol` objects that represent the universe constituents.

```python
# Use ManualUniverseSelectionModel method to select a static set of equities, similar to traditional add_security methods, for a fixed trading universe.
tickers = ["SPY", "QQQ", "IWM"]
symbols = [ Symbol.create(ticker, SecurityType.EQUITY, Market.USA) for ticker in tickers]
self.add_universe_selection(ManualUniverseSelectionModel(symbols))
```

The following table describes the arguments the model accepts:

| Argument | Data Type | Description | Default Value |
| --- | --- | --- | --- |
| `symbols` | `List[Symbol]` | Universe constituents |  |
| `universe_settings` | `UniverseSettings` | The [universe settings](https://www.quantconnect.com/docs/v2/writing-algorithms/algorithm-framework/universe-selection/universe-settings.md). If you don't provide an argument, the model uses the `algorithm.universe_settings` by default. | `None` |

To move the universe tickers and `Symbol` objects outside of the algorithm class, create a universe selection model that inherits the `ManualUniverseSelectionModel` class.

```python
# Create a custom universe selection model to move universe tickers and Symbol objects outside of the algorithm class for improved modularity, reusability, and maintainability.
self.add_universe_selection(IndexUniverseSelectionModel())

# Outside of the algorithm class
class IndexUniverseSelectionModel(ManualUniverseSelectionModel):
    def __init__(self):
        tickers = ["SPY", "QQQ", "IWM"]
        symbols = [Symbol.create(ticker, SecurityType.EQUITY, Market.USA) for ticker in tickers]
        super().__init__(symbols)
```

For more information about this model, see the [class reference](https://www.lean.io/docs/v2/lean-engine/class-reference/py/QuantConnect/Algorithm/Framework/Selection/ManualUniverseSelectionModel/) and [implementation](https://github.com/QuantConnect/Lean/blob/master/Algorithm/Selection/ManualUniverseSelectionModel.py).

## Examples

The following examples demonstrate some common practices for implementing a manual universe selection model.

### Example 1: Crypto List Selection Model

The following algorithm selects a list of preset cryptos, given we have information that they will perform better. So, we can use `ManualUniverseSelectionModel` to select this list and buy the listed cryptos.

```python
class FrameworkManualUniverseSelectionAlgorithm(QCAlgorithm):
    def initialize(self) -> None:
        self.set_start_date(2024, 9, 1)
        self.set_end_date(2024, 12, 31)
        self.set_cash(100000)

        # Add a universe selection model to select the most liquid cryptos manually.
        symbols = [
            Symbol.create("BTCUSD", SecurityType.CRYPTO, Market.COINBASE),
            Symbol.create("ETHUSD", SecurityType.CRYPTO, Market.COINBASE)
        ]
        self.add_universe_selection(ManualUniverseSelectionModel(symbols))

        # Sent insights on buying and holding the most liquid cryptos for one week.
        self.add_alpha(ConstantAlphaModel(InsightType.PRICE, InsightDirection.UP, timedelta(7)))
        # Evenly dissipate the capital risk among selected cryptos.
        self.set_portfolio_construction(EqualWeightingPortfolioConstructionModel())
```
