backtrader.parameters module
New Parameter System for Backtrader
This module implements a modern parameter system that replaces the metaclass-based
parameter handling with descriptor-based approach. This provides better type safety,
validation, and maintainability while maintaining backward compatibility.
Key Components:
- ParameterDescriptor: Core descriptor for parameter handling
- ParameterManager: Parameter storage and management
- ParameterizedBase: Base class for parameterized objects (without metaclass)
- Type checking and validation mechanisms
- Python 3.6+ __set_name__ support
-
class backtrader.parameters.ParameterDescriptor[源代码]
基类:object
Advanced parameter descriptor with type checking and validation.
This descriptor replaces the metaclass-based parameter system with a more
modern and maintainable approach. It provides:
-
__init__(default=None, type_=None, validator=None, doc=None, name=None, required=False)[源代码]
Initialize parameter descriptor.
- 参数:
default (Any) -- Default value for the parameter
type -- Expected type for the parameter (enables type checking)
validator (Callable[[Any], bool] | None) -- Function to validate parameter values
doc (str | None) -- Documentation string for the parameter
name (str | None) -- Parameter name (usually set by __set_name__)
required (bool) -- Whether this parameter is required (no default allowed)
type_ (Type | None)
-
__set_name__(owner, name)[源代码]
Called when the descriptor is assigned to a class attribute.
This is a Python 3.6+ feature that automatically sets the parameter name.
-
__get__(obj, objtype=None)[源代码]
Get parameter value from object instance.
-
__set__(obj, value)[源代码]
Set parameter value on object instance with validation.
-
__delete__(obj)[源代码]
Delete parameter value, reverting to default.
-
validate(value)[源代码]
Validate a value for this parameter.
- 参数:
value (Any) -- Value to validate
- 返回:
True if value is valid, False otherwise
- 返回类型:
bool
-
get_type_info()[源代码]
Get type information for this parameter.
- 返回类型:
Dict[str, Any]
-
class backtrader.parameters.ParameterManager[源代码]
基类:object
Enhanced Parameter storage and management system.
This class manages parameter values for an object, replacing the functionality
of AutoInfoClass. It provides efficient storage, inheritance support, batch
operations, and advanced features like change tracking, callbacks, and
transactional updates.
New Features in Day 32-33:
- Parameter change history and tracking
- Change callbacks and notifications
- Parameter locking mechanism
- Parameter groups for organization
- Advanced inheritance with conflict resolution
- Lazy default value evaluation
- Transactional batch updates
-
__init__(descriptors, initial_values=None, enable_history=True, enable_callbacks=True)[源代码]
Initialize parameter manager.
- 参数:
descriptors (Dict[str, ParameterDescriptor]) -- Dictionary of parameter descriptors
initial_values (Dict[str, Any] | None) -- Initial parameter values
enable_history (bool) -- Whether to track parameter change history
enable_callbacks (bool) -- Whether to enable change callbacks
-
get(name, default=None, _MISSING=<object object>)[源代码]
Get parameter value with optimized caching and lazy evaluation support.
- 参数:
-
- 返回:
Parameter value
- 返回类型:
Any
-
set(name, value, force=False, trigger_callbacks=True, skip_validation=False)[源代码]
Set parameter value with validation and dependency updates.
- 参数:
name (str) -- Parameter name
value (Any) -- Parameter value
force (bool) -- Force setting even if parameter is locked
trigger_callbacks (bool) -- Whether to trigger change callbacks
skip_validation (bool) -- Skip validation (use with caution)
- 返回类型:
None
-
reset(name, force=False)[源代码]
Reset parameter to its default value.
- 参数:
-
- 返回类型:
None
-
update(values, force=False, validate_all=True)[源代码]
Update multiple parameters at once.
- 参数:
values (Dict[str, Any] | ParameterManager) -- Dictionary of parameter values or another ParameterManager
force (bool) -- Force update even for locked parameters
validate_all (bool) -- Validate all parameters before updating any
- 返回类型:
None
-
to_dict()[源代码]
Convert parameter manager to dictionary.
- 返回:
Dictionary of current parameter values
- 返回类型:
Dict[str, Any]
-
keys()[源代码]
Get parameter names.
-
items()[源代码]
Get parameter name-value pairs.
-
values()[源代码]
Get parameter values.
-
copy()[源代码]
Create a copy of this parameter manager.
- 返回:
New ParameterManager instance with same values
- 返回类型:
ParameterManager
-
inherit_from(parent, strategy='merge', conflict_resolution='parent', selective=None)[源代码]
Inherit parameters from another ParameterManager.
- 参数:
parent (ParameterManager) -- Parent ParameterManager to inherit from
strategy (str) -- Inheritance strategy ('merge', 'replace', 'add_only', 'selective')
conflict_resolution (str) -- How to resolve conflicts ('parent', 'child', 'error', 'raise')
selective (List[str] | None) -- Only inherit specific parameters (list of names)
- 返回类型:
None
-
get_inheritance_info(name)[源代码]
Get inheritance information for a parameter.
- 参数:
name (str) -- Parameter name
- 返回:
Dictionary with inheritance information, or None if not available
- 返回类型:
Dict[str, Any] | None
-
lock_parameter(name)[源代码]
Lock a parameter to prevent modification.
- 参数:
name (str)
- 返回类型:
None
-
unlock_parameter(name)[源代码]
Unlock a parameter to allow modification.
- 参数:
name (str)
- 返回类型:
None
-
is_locked(name)[源代码]
Check if a parameter is locked.
- 参数:
name (str)
- 返回类型:
bool
-
get_locked_parameters()[源代码]
Get list of locked parameter names.
- 返回类型:
List[str]
-
create_group(group_name, param_names)[源代码]
Create a parameter group.
- 参数:
-
- 返回类型:
None
-
get_group(group_name)[源代码]
Get parameter names in a group.
- 参数:
group_name (str)
- 返回类型:
List[str]
-
get_parameter_group(param_name)[源代码]
Get the group name for a parameter.
- 参数:
param_name (str)
- 返回类型:
str | None
-
set_group(group_name, values)[源代码]
Set values for all parameters in a group.
- 参数:
-
- 返回类型:
None
-
get_group_values(group_name)[源代码]
Get values for all parameters in a group.
- 参数:
group_name (str)
- 返回类型:
Dict[str, Any]
-
set_lazy_default(name, lazy_func)[源代码]
Set a lazy default function for a parameter.
- 参数:
name (str) -- Parameter name
lazy_func (Callable[[], Any]) -- Function that returns the default value when called
- 返回类型:
None
-
clear_lazy_default(name)[源代码]
Clear lazy default for a parameter.
- 参数:
name (str)
- 返回类型:
None
-
add_change_callback(callback, param_name=None)[源代码]
Add a callback function that will be called when parameters change.
- 参数:
callback (Callable[[str, Any, Any], None]) -- Function to call with (param_name, old_value, new_value)
param_name (str | None) -- Specific parameter to watch, or None for all parameters
- 返回类型:
None
-
remove_change_callback(callback, param_name=None)[源代码]
Remove a change callback.
- 参数:
-
- 返回类型:
None
-
get_change_history(name, limit=None)[源代码]
Get change history for a parameter.
- 参数:
-
- 返回:
List of history entries (newest first) in format (old_value, new_value, timestamp)
- 返回类型:
List[tuple]
-
clear_history(name=None)[源代码]
Clear change history.
- 参数:
name (str | None) -- Specific parameter name, or None to clear all history
- 返回类型:
None
-
add_dependency(param_name, dependent_param)[源代码]
Add a dependency relationship between parameters.
- 参数:
-
- 返回类型:
None
-
remove_dependency(param_name, dependent_param)[源代码]
Remove a dependency relationship.
- 参数:
param_name (str)
dependent_param (str)
- 返回类型:
None
-
get_dependencies(param_name)[源代码]
Get list of parameters that depend on the given parameter.
- 参数:
param_name (str)
- 返回类型:
List[str]
-
get_dependents(param_name)[源代码]
Get list of parameters that this parameter depends on.
- 参数:
param_name (str)
- 返回类型:
List[str]
-
begin_transaction()[源代码]
Begin a parameter transaction.
- 返回类型:
None
-
commit_transaction()[源代码]
Commit the current transaction.
- 返回类型:
None
-
rollback_transaction()[源代码]
Rollback the current transaction.
- 返回类型:
None
-
is_in_transaction()[源代码]
Check if currently in a transaction.
- 返回类型:
bool
-
class backtrader.parameters.ParameterAccessor[源代码]
基类:object
Parameter accessor that provides dict-like and attribute-like access to parameters.
This class serves as a bridge between the new parameter system and the old
MetaParams-style parameter access patterns. It provides backward compatibility
by supporting both attribute access (obj.p.param_name) and dict-like access.
-
__init__(param_manager)[源代码]
Initialize with a parameter manager.
NOTE: Originally attempted to pre-create instance attributes for performance, but this causes parameter synchronization issues.
When parameters are modified through other means (like broker.set_cash()), instance attributes won't update.
Therefore maintain dynamic lookup to ensure latest values are always retrieved.
- 参数:
param_manager (ParameterManager)
-
__getattr__(name)[源代码]
Get parameter value via attribute access.
Always get latest value from param_manager to ensure consistency.
All parameter accesses are dynamically looked up to guarantee latest values.
-
__setattr__(name, value)[源代码]
Set parameter value via attribute access.
-
__getitem__(name)[源代码]
Get parameter value via dict-like access.
-
__setitem__(name, value)[源代码]
Set parameter value via dict-like access.
-
__contains__(name)[源代码]
Check if parameter exists.
-
__iter__()[源代码]
Iterate over parameter names.
-
__len__()[源代码]
Get number of parameters.
-
__repr__()[源代码]
String representation showing parameter values.
-
class backtrader.parameters.ParameterizedBase[源代码]
基类:object
Enhanced base class for objects with parameters - without metaclass.
This class provides the modern parameter system interface while maintaining
backward compatibility with the old MetaParams-based system. It uses
regular class mechanisms instead of metaclass.
-
classmethod __init_subclass__(**kwargs)[源代码]
Called when a class is subclassed. Replaces metaclass functionality.
This method sets up the class for lazy parameter descriptor resolution
to avoid inheritance contamination issues.
-
__init__(**kwargs)[源代码]
Initialize the parameterized object.
-
get_param(name, default=None)[源代码]
Get parameter value with fallback.
- 参数:
-
- 返回:
Parameter value
- 返回类型:
Any
-
set_param(name, value, validate=True)[源代码]
Set parameter value with optional validation.
- 参数:
name (str) -- Parameter name
value (Any) -- Parameter value
validate (bool) -- Whether to perform validation
- 抛出:
-
- 返回类型:
None
-
get_param_info()[源代码]
Get comprehensive information about all parameters.
- 返回:
Dictionary with parameter information
- 返回类型:
Dict[str, Dict[str, Any]]
-
validate_params()[源代码]
Validate all parameters and return list of validation errors.
- 返回:
List of validation error messages (empty if all valid)
- 返回类型:
List[str]
-
reset_param(name)[源代码]
Reset parameter to its default value.
- 参数:
name (str) -- Parameter name
- 抛出:
-
- 返回类型:
None
-
reset_all_params()[源代码]
Reset all parameters to their default values.
- 返回类型:
None
-
get_modified_params()[源代码]
Get parameters that have been modified from their defaults.
- 返回:
Dictionary of modified parameter names and values
- 返回类型:
Dict[str, Any]
-
copy_params_from(other, param_names=None, exclude=None)[源代码]
Copy parameters from another ParameterizedBase instance.
- 参数:
other (ParameterizedBase) -- Source object to copy parameters from
param_names (List[str] | None) -- Specific parameter names to copy (None for all)
exclude (List[str] | None) -- Parameter names to exclude from copying
- 返回类型:
None
-
__repr__()[源代码]
Enhanced string representation with parameter information.
- 返回类型:
str
-
backtrader.parameters.Int(min_val=None, max_val=None)[源代码]
Create an integer validator function.
- 参数:
-
- 返回:
Validator function for integer parameters
- 返回类型:
Callable[[Any], bool]
-
backtrader.parameters.Float(min_val=None, max_val=None)[源代码]
Create a float validator function.
- 参数:
-
- 返回:
Validator function for float parameters
- 返回类型:
Callable[[Any], bool]
-
backtrader.parameters.FloatParam(default=None, min_val=None, max_val=None, doc=None)[源代码]
Create a float parameter descriptor with validation.
- 参数:
-
- 返回类型:
ParameterDescriptor
-
backtrader.parameters.BoolParam(default=None, doc=None)[源代码]
Create a boolean parameter descriptor.
- 参数:
doc (str)
- 返回类型:
ParameterDescriptor
-
backtrader.parameters.StringParam(default=None, min_length=None, max_length=None, doc=None)[源代码]
Create a string parameter descriptor with length validation.
- 参数:
min_length (int | None)
max_length (int | None)
doc (str)
- 返回类型:
ParameterDescriptor
-
backtrader.parameters.String(min_length=None, max_length=None)[源代码]
Create a string validator function.
- 参数:
-
- 返回:
Validator function for string parameters
- 返回类型:
Callable[[Any], bool]
-
backtrader.parameters.Bool()[源代码]
Create a boolean validator function.
- 返回:
Validator function for boolean parameters
- 返回类型:
Callable[[Any], bool]
-
backtrader.parameters.OneOf(*choices)[源代码]
Create a validator that checks if value is one of the given choices.
- 参数:
*choices -- Allowed values
- 返回:
Validator function
- 返回类型:
Callable[[Any], bool]
-
backtrader.parameters.create_param_descriptor(name, default=None, doc=None)[源代码]
Create a basic parameter descriptor.
- 参数:
name (str) -- Parameter name
default (Any) -- Default value
doc (str) -- Documentation string
- 返回:
ParameterDescriptor instance
- 返回类型:
ParameterDescriptor
-
backtrader.parameters.derive_params(base_params, new_params, other_base_params=None)[源代码]
Derive parameters by combining base parameters with new ones.
- 参数:
base_params -- Base parameter descriptors or tuples
new_params -- New parameter descriptors or tuples
other_base_params -- Additional base parameters
- 返回:
Dictionary of combined parameter descriptors
-
class backtrader.parameters.ParamsBridge[源代码]
基类:object
Bridge class for transitioning from MetaParams to new parameter system.
This class provides utilities for converting between the old MetaParams
system and the new descriptor-based system during the migration period.
Extract parameter descriptors from a MetaParams-based class.
- 参数:
cls -- Class with MetaParams-based parameters
- 返回:
Dictionary of parameter descriptors
- 返回类型:
Dict[str, ParameterDescriptor]
-
static convert_legacy_params_tuple(params_tuple)[源代码]
Convert legacy params tuple to parameter descriptors.
- 参数:
params_tuple -- Legacy params tuple like (('param1', 10), ('param2', 'value'))
- 返回:
Dictionary of parameter descriptors
- 返回类型:
Dict[str, ParameterDescriptor]
-
static create_compatibility_wrapper(metaparams_class)[源代码]
Create a compatibility wrapper for MetaParams-based classes.
- 参数:
metaparams_class -- Original MetaParams-based class
- 返回:
New class that uses the modern parameter system
-
exception backtrader.parameters.ParameterValidationError[源代码]
基类:ValueError
Specific exception for parameter validation errors.
-
__init__(parameter_name, value, expected_type=None, additional_info='')[源代码]
Initialize a parameter validation error.
- 参数:
parameter_name (str) -- Name of the parameter that failed validation.
value (Any) -- The invalid value that was provided.
expected_type (Type | None) -- Expected type for the parameter (optional).
additional_info (str) -- Additional error information (optional).
-
exception backtrader.parameters.ParameterAccessError[源代码]
基类:AttributeError
Specific exception for parameter access errors.
-
__init__(parameter_name, class_name, available_params)[源代码]
Initialize a parameter access error.
- 参数:
parameter_name (str) -- Name of the parameter that was not found.
class_name (str) -- Name of the class where access was attempted.
available_params (List[str]) -- List of available parameter names.
-
backtrader.parameters.validate_parameter_compatibility(old_class, new_class)[源代码]
Validate compatibility between old MetaParams class and new descriptor-based class.
- 参数:
-
- 返回:
Dictionary with compatibility analysis results
- 返回类型:
Dict[str, Any]