Source code for backtrader.flt

#!/usr/bin/env python
"""Filter Module - Data filtering for backtrader.

This module provides the base Filter class for data filtering operations.
Filters can be applied to data feeds to modify or filter bars during
backtesting.

Classes:
    Filter: Base class for data filters.

Example:
    >>> class MyFilter(bt.Filter):
    ...     def next(self, data):
    ...         # Modify data bar
    ...         pass
"""

from .parameters import ParameterizedBase

__all__ = ["Filter"]


# Filter class - refactored to use new parameter system
[docs] class Filter(ParameterizedBase): """Base class for data filters in backtrader. Filters process data bars and can modify or reject them. Subclasses should override the next() method to implement custom filtering logic. Attributes: _firsttime: Tracks if this is the first call. This class has been refactored from MetaParams to the new ParameterizedBase system for Day 36-38 of the metaprogramming removal project. """ _firsttime = True
[docs] def __init__(self, data_, **kwargs): """Initialize the Filter. Args: data_: The data feed to filter. **kwargs: Additional keyword arguments for parameters. """ # Call parent class initialization super().__init__(**kwargs)
[docs] def __call__(self, data): """Process a data bar through the filter. Args: data: The data feed being filtered. """ # If first time, call nextstart, then set _firsttime to False if self._firsttime: self.nextstart(data) self._firsttime = False # Call next self.next(data)
[docs] def nextstart(self, data): """Called on the first bar before filtering starts. Args: data: The data feed being filtered. Note: Override this method to perform one-time initialization. """ pass
[docs] def next(self, data): """Process each data bar. Args: data: The data feed being filtered. Note: Subclasses must override this method to implement filtering logic. """ pass