I want to customize the Universal Selection model, is below code correct ? main.py will call universal selection

main.py

from AlgorithmImports import *
import parameters as parameters
from Logger import Logger
from UniverseSelection import UniverseSelection
# endregion

class DailyBreakOut(QCAlgorithm):

    def initialize(self):
        self.SetStartDate(2023, 1, 1)
        self.SetCash(parameters.INITIAL_CASH)
        self.logger = Logger(self)
        self.add_universe_selection(UniverseSelection(self, self.logger)) 


    def on_data(self, data):
        # Your on_data logic here
        pass

 

UniverseSelection.py

class UniverseSelection(UniverseSelectionModel):
    def __init__(self, algorithm: QCAlgorithm, logger: Logger):
        super().__init__()
        self.algorithm = algorithm
        self.logger = logger
        self.logger.log("Starting UniverseSelection initialization...")
        try:
            self.history = {}
            self.moving_averages_200 = {}
            self.moving_averages_20 = {}
            self.previous_close = {}
            self.atr = {}
            self.volatility = {}
            self.avg_volatility = {}
            self.logger.log("Finished UniverseSelection initialization.")
        except BaseException as e:
            self.logger.log(f"Error during UniverseSelection initialization: {str(e)}")
            raise e
    def CreateUniverses(self) -> List[Universe]:
        # This method must return one or more universes
        return [self.algorithm.AddUniverse(self.CoarseSelectionFunction)]

     def CoarseSelectionFunction(self, coarse):
        selected: List[str] = []
        for stock in coarse:
            if stock.Price > params.PRICE_THRESHOLD and stock.DollarVolume > params.DOLLAR_VOLUME_THRESHOLD:
                selected.append(stock.Symbol)
                # Initialize the historical data if not already done
                if stock.Symbol not in self.history:
                    self.InitializeIndicators(stock.Symbol)
        return selected