investing-algorithm-framework 6.7.1__tar.gz → 6.8.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/PKG-INFO +1 -1
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/__init__.py +4 -1
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/__init__.py +5 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/cagr.py +4 -7
- investing_algorithm_framework-6.8.0/investing_algorithm_framework/metrics/calmar_ratio.py +39 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/drawdown.py +2 -2
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/exposure.py +20 -0
- investing_algorithm_framework-6.8.0/investing_algorithm_framework/metrics/win_rate.py +81 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/pyproject.toml +1 -1
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/LICENSE +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/README.md +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/algorithm/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/algorithm/algorithm.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/algorithm/algorithm_factory.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/app.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/app_hook.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/context.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/stateless/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/stateless/action_handlers/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/stateless/action_handlers/action_handler_strategy.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/stateless/action_handlers/check_online_handler.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/stateless/action_handlers/run_strategy_handler.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/stateless/exception_handler.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/strategy.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/task.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/controllers/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/controllers/orders.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/controllers/portfolio.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/controllers/positions.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/create_app.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/error_handler.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/responses.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/run_strategies.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/schemas/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/schemas/order.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/schemas/portfolio.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/schemas/position.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/setup_cors.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/cli.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/deploy_to_azure_function.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/initialize_app.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/.gitignore.template +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/app-web.py.template +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/app.py.template +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/app_azure_function.py.template +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/app_web.py.template +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/azure_function_function_app.py.template +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/azure_function_host.json.template +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/azure_function_local.settings.json.template +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/data_providers.py.template +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/env.example.template +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/env_azure_function.example.template +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/market_data_providers.py.template +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/readme.md.template +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/requirements.txt.template +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/requirements_azure_function.txt.template +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/run_backtest.py.template +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/strategy.py.template +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/create_app.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/dependency_container.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/config.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/constants.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/data_provider.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/data_structures.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/decimal_parsing.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/exceptions.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/app_mode.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/backtesting/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/backtesting/backtest_date_range.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/backtesting/backtest_position.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/backtesting/backtest_report.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/backtesting/backtest_reports_evaluation.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/base_model.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/data_source.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/date_range.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/event.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/market/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/market/market_credential.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/market_data_type.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/order/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/order/order.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/order/order_side.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/order/order_status.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/order/order_type.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/portfolio/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/portfolio/portfolio.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/portfolio/portfolio_configuration.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/portfolio/portfolio_snapshot.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/position/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/position/position.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/position/position_snapshot.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/snapshot_interval.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/strategy_profile.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/time_frame.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/time_interval.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/time_unit.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/tracing/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/tracing/trace.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/trade/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/trade/trade.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/trade/trade_risk_type.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/trade/trade_status.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/trade/trade_stop_loss.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/trade/trade_take_profit.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/trading_data_types.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/trading_time_frame.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/order_executor.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/portfolio_provider.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/services/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/services/market_credential_service.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/services/market_data_sources.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/services/market_service.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/services/observable.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/services/observer.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/services/portfolios/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/services/portfolios/portfolio_sync_service.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/services/rounding_service.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/services/state_handler.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/stateless_actions.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/strategy.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/utils/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/utils/backtesting.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/utils/csv.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/utils/dates.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/utils/polars.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/utils/random.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/utils/signatures.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/utils/stoppable_thread.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/utils/synchronized.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/download_data.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/data_providers/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/data_providers/ccxt.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/data_providers/csv.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/database/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/database/sql_alchemy.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/decimal_parser.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/market_data_sources/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/market_data_sources/ccxt.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/market_data_sources/csv.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/market_data_sources/pandas.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/model_extension.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/order/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/order/order.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/order/order_metadata.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/order_trade_association.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/portfolio/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/portfolio/portfolio_snapshot.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/portfolio/sql_portfolio.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/position/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/position/position.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/position/position_snapshot.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/trades/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/trades/trade.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/trades/trade_stop_loss.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/trades/trade_take_profit.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/order_executors/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/order_executors/ccxt_order_executor.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/portfolio_providers/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/portfolio_providers/ccxt_portfolio_provider.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/repositories/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/repositories/order_metadata_repository.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/repositories/order_repository.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/repositories/portfolio_repository.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/repositories/portfolio_snapshot_repository.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/repositories/position_repository.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/repositories/position_snapshot_repository.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/repositories/repository.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/repositories/trade_repository.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/repositories/trade_stop_loss_repository.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/repositories/trade_take_profit_repository.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/services/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/services/azure/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/services/azure/state_handler.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/services/market_service/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/services/market_service/ccxt_market_service.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/services/performance_service/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/services/performance_service/backtest_performance_service.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/services/performance_service/performance_service.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/equity_curve.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/net_profit.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/price_efficiency.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/profit_factor.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/recovery.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/risk_free_rate.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/sharp_ratio.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/sortino_ratio.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/standard_deviation.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/volatility.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/overfitting/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/overfitting/permutations.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/backtesting/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/backtesting/backtest_service.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/configuration_service.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/market_credential_service.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/market_data_source_service/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/market_data_source_service/backtest_market_data_source_service.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/market_data_source_service/data_provider_service.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/market_data_source_service/market_data_source_service.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/order_service/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/order_service/order_backtest_service.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/order_service/order_executor_lookup.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/order_service/order_service.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/portfolios/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/portfolios/backtest_portfolio_service.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/portfolios/portfolio_configuration_service.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/portfolios/portfolio_provider_lookup.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/portfolios/portfolio_service.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/portfolios/portfolio_snapshot_service.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/portfolios/portfolio_sync_service.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/positions/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/positions/position_service.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/positions/position_snapshot_service.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/repository_service.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/strategy_orchestrator_service.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/trade_service/__init__.py +0 -0
- {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/trade_service/trade_service.py +0 -0
|
@@ -31,7 +31,7 @@ from .metrics import get_volatility, get_sortino_ratio, get_profit_factor, \
|
|
|
31
31
|
get_drawdown_series, get_max_drawdown, get_cagr, \
|
|
32
32
|
get_standard_deviation_returns, get_standard_deviation_downside_returns, \
|
|
33
33
|
get_max_drawdown_absolute, get_exposure_time, get_average_trade_duration, \
|
|
34
|
-
get_net_profit
|
|
34
|
+
get_net_profit, get_win_rate, get_win_loss_ratio, get_calmar_ratio
|
|
35
35
|
|
|
36
36
|
__all__ = [
|
|
37
37
|
"Algorithm",
|
|
@@ -120,4 +120,7 @@ __all__ = [
|
|
|
120
120
|
"get_exposure_time",
|
|
121
121
|
"get_average_trade_duration",
|
|
122
122
|
"get_net_profit",
|
|
123
|
+
"get_win_rate",
|
|
124
|
+
"get_win_loss_ratio",
|
|
125
|
+
"get_calmar_ratio",
|
|
123
126
|
]
|
|
@@ -16,6 +16,8 @@ from .standard_deviation import get_standard_deviation_downside_returns, \
|
|
|
16
16
|
get_standard_deviation_returns
|
|
17
17
|
from .net_profit import get_net_profit
|
|
18
18
|
from .exposure import get_exposure_time, get_average_trade_duration
|
|
19
|
+
from .win_rate import get_win_rate, get_win_loss_ratio
|
|
20
|
+
from .calmar_ratio import get_calmar_ratio
|
|
19
21
|
|
|
20
22
|
__all__ = [
|
|
21
23
|
"get_volatility",
|
|
@@ -36,4 +38,7 @@ __all__ = [
|
|
|
36
38
|
"get_net_profit",
|
|
37
39
|
"get_exposure_time",
|
|
38
40
|
"get_average_trade_duration",
|
|
41
|
+
"get_win_rate",
|
|
42
|
+
"get_win_loss_ratio",
|
|
43
|
+
"get_calmar_ratio",
|
|
39
44
|
]
|
|
@@ -45,12 +45,12 @@ def get_cagr(report: BacktestReport) -> float:
|
|
|
45
45
|
|
|
46
46
|
# Convert snapshots to DataFrame
|
|
47
47
|
data = [(s.total_value, s.created_at) for s in snapshots]
|
|
48
|
-
df = pd.DataFrame(data, columns=["
|
|
48
|
+
df = pd.DataFrame(data, columns=["total_value", "created_at"])
|
|
49
49
|
df['created_at'] = pd.to_datetime(df['created_at'])
|
|
50
50
|
df = df.sort_values('created_at')
|
|
51
51
|
|
|
52
|
-
start_value = df.iloc[0]['
|
|
53
|
-
end_value = df.iloc[-1]['
|
|
52
|
+
start_value = df.iloc[0]['total_value']
|
|
53
|
+
end_value = df.iloc[-1]['total_value']
|
|
54
54
|
|
|
55
55
|
start_date = df.iloc[0]['created_at']
|
|
56
56
|
end_date = df.iloc[-1]['created_at']
|
|
@@ -61,7 +61,4 @@ def get_cagr(report: BacktestReport) -> float:
|
|
|
61
61
|
return 0.0
|
|
62
62
|
|
|
63
63
|
# CAGR formula
|
|
64
|
-
|
|
65
|
-
# Return as percentage
|
|
66
|
-
cagr = round(cagr * 100, 2) # Convert to percentage and 2 decimal places
|
|
67
|
-
return cagr
|
|
64
|
+
return (end_value / start_value) ** (365 / num_days) - 1
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"""
|
|
2
|
+
| **Calmar Ratio** | **Interpretation** |
|
|
3
|
+
| ---------------- | ----------------------------------------------------------- |
|
|
4
|
+
| **> 3.0** | **Excellent** – strong return vs. drawdown |
|
|
5
|
+
| **2.0 – 3.0** | **Very Good** – solid risk-adjusted performance |
|
|
6
|
+
| **1.0 – 2.0** | **Acceptable** – decent, especially for volatile strategies |
|
|
7
|
+
| **< 1.0** | **Poor** – high drawdowns relative to return |
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
from investing_algorithm_framework.domain import BacktestReport
|
|
12
|
+
from .cagr import get_cagr
|
|
13
|
+
from .drawdown import get_max_drawdown
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def get_calmar_ratio(report: BacktestReport):
|
|
17
|
+
"""
|
|
18
|
+
Calculate the Calmar Ratio, which is the ratio of the annualized
|
|
19
|
+
return to the maximum drawdown.
|
|
20
|
+
|
|
21
|
+
Formula:
|
|
22
|
+
Calmar Ratio = CAGR / |Maximum Drawdown|
|
|
23
|
+
|
|
24
|
+
The Calmar Ratio is a measure of risk-adjusted return,
|
|
25
|
+
where a higher ratio indicates a more favorable risk-return profile.
|
|
26
|
+
|
|
27
|
+
Args:
|
|
28
|
+
report: An object that provides methods to get trades and equity curve.
|
|
29
|
+
|
|
30
|
+
Returns:
|
|
31
|
+
float: The Calmar Ratio.
|
|
32
|
+
"""
|
|
33
|
+
cagr = get_cagr(report)
|
|
34
|
+
max_drawdown = get_max_drawdown(report)
|
|
35
|
+
|
|
36
|
+
if max_drawdown == 0 or max_drawdown is None:
|
|
37
|
+
return 0.0
|
|
38
|
+
|
|
39
|
+
return cagr / max_drawdown
|
|
@@ -79,7 +79,7 @@ def get_max_drawdown(backtest_report: BacktestReport) -> float:
|
|
|
79
79
|
drawdown_pct = (equity - peak) / peak # Will be 0 or negative
|
|
80
80
|
max_drawdown_pct = min(max_drawdown_pct, drawdown_pct)
|
|
81
81
|
|
|
82
|
-
return max_drawdown_pct
|
|
82
|
+
return abs(max_drawdown_pct)
|
|
83
83
|
|
|
84
84
|
|
|
85
85
|
def get_max_drawdown_absolute(backtest_report: BacktestReport) -> float:
|
|
@@ -110,4 +110,4 @@ def get_max_drawdown_absolute(backtest_report: BacktestReport) -> float:
|
|
|
110
110
|
drawdown = peak - equity # Drop from peak
|
|
111
111
|
max_drawdown = max(max_drawdown, drawdown)
|
|
112
112
|
|
|
113
|
-
return max_drawdown
|
|
113
|
+
return abs(max_drawdown) # Return as positive number (e.g., €10,000)
|
|
@@ -53,3 +53,23 @@ def get_average_trade_duration(report: BacktestReport):
|
|
|
53
53
|
|
|
54
54
|
average_trade_duration = total_duration / len(trades)
|
|
55
55
|
return average_trade_duration.total_seconds() / 3600.0 # Convert to hours
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def get_trade_frequency(report: BacktestReport):
|
|
59
|
+
"""
|
|
60
|
+
Calculates the trade frequency as the number of trades per day
|
|
61
|
+
during the backtest period.
|
|
62
|
+
|
|
63
|
+
Returns:
|
|
64
|
+
A float representing the average number of trades per day.
|
|
65
|
+
"""
|
|
66
|
+
trades = report.get_trades()
|
|
67
|
+
|
|
68
|
+
if not trades:
|
|
69
|
+
return 0.0
|
|
70
|
+
|
|
71
|
+
total_days = (report.backtest_end_date - report.backtest_start_date).days + 1
|
|
72
|
+
if total_days <= 0:
|
|
73
|
+
return 0.0
|
|
74
|
+
|
|
75
|
+
return len(trades) / total_days
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"""
|
|
2
|
+
| Metric | High Value Means... | Weakness if Used Alone |
|
|
3
|
+
| ------------------ | --------------------------- | ----------------------------------- |
|
|
4
|
+
| **Win Rate** | Many trades are profitable | Doesn't say how big wins/losses are |
|
|
5
|
+
| **Win/Loss Ratio** | Big wins relative to losses | Doesn’t say how *often* you win |
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
Example of Non-Overlap:
|
|
9
|
+
Strategy A: 90% win rate, but average win is $1, average loss is $10 → not profitable.
|
|
10
|
+
|
|
11
|
+
Strategy B: 30% win rate, but average win is $300, average loss is $50 → highly profitable.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from investing_algorithm_framework import BacktestReport, TradeStatus
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def get_win_rate(backtest_report: BacktestReport) -> float:
|
|
18
|
+
"""
|
|
19
|
+
Calculate the win rate of the portfolio based on the backtest report.
|
|
20
|
+
|
|
21
|
+
Win Rate is defined as the percentage of trades that were profitable.
|
|
22
|
+
The percentage of trades that are profitable.
|
|
23
|
+
|
|
24
|
+
Formula:
|
|
25
|
+
Win Rate = (Number of Profitable Trades / Total Number of Trades) * 100
|
|
26
|
+
|
|
27
|
+
Example: If 60 out of 100 trades are profitable, the win rate is 60%.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
backtest_report (BacktestReport): The backtest report containing
|
|
31
|
+
trade history.
|
|
32
|
+
|
|
33
|
+
Returns:
|
|
34
|
+
float: The win rate as a percentage (e.g., 75.0 for 75% win rate).
|
|
35
|
+
"""
|
|
36
|
+
return backtest_report.percentage_positive_trades
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def get_win_loss_ratio(backtest_report: BacktestReport) -> float:
|
|
40
|
+
"""
|
|
41
|
+
Calculate the win/loss ratio of the portfolio based on the backtest report.
|
|
42
|
+
|
|
43
|
+
Win/Loss Ratio is defined as the average profit of winning trades divided by
|
|
44
|
+
the average loss of losing trades.
|
|
45
|
+
|
|
46
|
+
Formula:
|
|
47
|
+
Win/Loss Ratio = Average Profit of Winning Trades
|
|
48
|
+
/ Average Loss of Losing Trades
|
|
49
|
+
|
|
50
|
+
Example: If the average profit of winning trades is $200 and the
|
|
51
|
+
average loss of losing trades is $100, the win/loss ratio is 2.0.
|
|
52
|
+
|
|
53
|
+
Args:
|
|
54
|
+
backtest_report (BacktestReport): The backtest report containing
|
|
55
|
+
trade history.
|
|
56
|
+
|
|
57
|
+
Returns:
|
|
58
|
+
float: The win/loss ratio.
|
|
59
|
+
"""
|
|
60
|
+
trades = backtest_report.get_trades(trade_status=TradeStatus.CLOSED)
|
|
61
|
+
|
|
62
|
+
if not trades:
|
|
63
|
+
return 0.0
|
|
64
|
+
|
|
65
|
+
# Separate winning and losing trades
|
|
66
|
+
winning_trades = [t for t in trades if t.net_gain > 0]
|
|
67
|
+
losing_trades = [t for t in trades if t.net_gain < 0]
|
|
68
|
+
|
|
69
|
+
if not winning_trades or not losing_trades:
|
|
70
|
+
return 0.0
|
|
71
|
+
|
|
72
|
+
# Compute averages
|
|
73
|
+
avg_win = sum(t.net_gain for t in winning_trades) / len(winning_trades)
|
|
74
|
+
avg_loss = abs(
|
|
75
|
+
sum(t.net_gain for t in losing_trades) / len(losing_trades))
|
|
76
|
+
|
|
77
|
+
# Avoid division by zero
|
|
78
|
+
if avg_loss == 0:
|
|
79
|
+
return float('inf')
|
|
80
|
+
|
|
81
|
+
return avg_win / avg_loss
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|