Coverage report: 93%

Files Functions Classes

coverage.py v7.16.0, created at 2026-09-04 12:05 +0000

      Statements   Branches   Total
File function   coverage statements missing excluded   coverage branches partial   coverage
src/finbot/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/finbot/backtest/__init__.py (no function)   100% 3 0 0   100% 0 0   100%
src/finbot/backtest/artifacts.py ExperimentStore.__init__   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/artifacts.py ExperimentStore._create_metadata   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/artifacts.py ExperimentStore.create_run   100% 4 0 0   100% 0 0   100%
src/finbot/backtest/artifacts.py ExperimentStore.create_walk_forward_run   100% 4 0 0   100% 0 0   100%
src/finbot/backtest/artifacts.py ExperimentStore.save   100% 6 0 0   100% 2 0   100%
src/finbot/backtest/artifacts.py ExperimentStore.load   100% 5 0 0   100% 2 0   100%
src/finbot/backtest/artifacts.py ExperimentStore.load_many   86% 7 1 0   75% 4 1   82%
src/finbot/backtest/artifacts.py ExperimentStore._serialize_config   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/artifacts.py ExperimentStore._deserialize_config   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/artifacts.py ExperimentStore._serialize_backtest_result   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/artifacts.py ExperimentStore._deserialize_backtest_result   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/artifacts.py ExperimentStore._serialize_period   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/artifacts.py ExperimentStore._deserialize_period   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/artifacts.py ExperimentStore._serialize_fold   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/artifacts.py ExperimentStore._deserialize_fold   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/artifacts.py ExperimentStore._serialize_metadata   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/artifacts.py ExperimentStore._deserialize_metadata   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/artifacts.py ExperimentStore._serialize_backtest   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/artifacts.py ExperimentStore._deserialize_backtest   100% 2 0 0   100% 0 0   100%
src/finbot/backtest/artifacts.py ExperimentStore._serialize_walk_forward   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/artifacts.py ExperimentStore._deserialize_walk_forward   100% 3 0 0   100% 0 0   100%
src/finbot/backtest/artifacts.py ExperimentStore._deserialize   100% 6 0 0   100% 4 0   100%
src/finbot/backtest/artifacts.py (no function)   100% 41 0 0   100% 0 0   100%
src/finbot/backtest/comparison.py compare_experiments   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/comparison.py compare_walk_forward_experiments   100% 12 0 0   100% 2 0   100%
src/finbot/backtest/comparison.py (no function)   100% 35 0 0   100% 0 0   100%
src/finbot/backtest/experiment.py ExperimentConfig.__post_init__   93% 14 1 0   93% 14 1   93%
src/finbot/backtest/experiment.py ExperimentPeriod.duration   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/experiment.py ExperimentPeriod.__post_init__   100% 2 0 0   100% 2 0   100%
src/finbot/backtest/experiment.py WalkForwardSplit.__post_init__   100% 4 0 0   100% 4 0   100%
src/finbot/backtest/experiment.py WalkForwardResult.__post_init__   50% 2 1 0   50% 2 1   50%
src/finbot/backtest/experiment.py (no function)   100% 53 0 0   100% 0 0   100%
src/finbot/backtest/models.py Trade.gross_pnl   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/models.py Trade.fees   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/models.py Trade.net_pnl   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/models.py Trade.pnl   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/models.py Trade.return_pct   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/models.py Trade.duration   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/models.py Trade.serialize   100% 0 0 15   100% 0 0   100%
src/finbot/backtest/models.py trades_from_fills   100% 15 0 0   100% 10 0   100%
src/finbot/backtest/models.py EquityPoint.serialize   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/models.py EquityPoint.deserialize   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/models.py SignalRejection.serialize   100% 0 0 6   100% 0 0   100%
src/finbot/backtest/models.py SignalRejection.deserialize   0% 1 1 0   100% 0 0   0%
src/finbot/backtest/models.py BacktestResult.pnl   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/models.py BacktestResult.total_return   100% 3 0 0   100% 2 0   100%
src/finbot/backtest/models.py BacktestResult.max_drawdown   100% 11 0 0   100% 6 0   100%
src/finbot/backtest/models.py BacktestResult.trades   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/models.py BacktestResult.trade_count   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/models.py BacktestResult.winning_trades   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/models.py BacktestResult.losing_trades   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/models.py BacktestResult.win_rate   100% 3 0 0   100% 2 0   100%
src/finbot/backtest/models.py BacktestResult.profit_factor   100% 7 0 0   100% 4 0   100%
src/finbot/backtest/models.py BacktestResult.returns   100% 3 0 0   100% 2 0   100%
src/finbot/backtest/models.py BacktestResult.average_trade   100% 3 0 0   100% 2 0   100%
src/finbot/backtest/models.py BacktestResult.median_trade   100% 3 0 0   100% 2 0   100%
src/finbot/backtest/models.py BacktestResult.best_trade   100% 3 0 0   100% 2 0   100%
src/finbot/backtest/models.py BacktestResult.worst_trade   100% 3 0 0   100% 2 0   100%
src/finbot/backtest/models.py BacktestResult.average_trade_duration   100% 4 0 0   100% 2 0   100%
src/finbot/backtest/models.py BacktestResult.cagr   100% 11 0 0   100% 8 0   100%
src/finbot/backtest/models.py BacktestResult.calmar_ratio   89% 9 1 0   83% 6 1   87%
src/finbot/backtest/models.py BacktestResult.total_fees   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/models.py BacktestResult.total_slippage   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/models.py BacktestResult.turnover   89% 9 1 0   83% 6 1   87%
src/finbot/backtest/models.py BacktestResult.exposure   100% 4 0 0   100% 2 0   100%
src/finbot/backtest/models.py BacktestResult.excess_return   100% 3 0 0   100% 2 0   100%
src/finbot/backtest/models.py BacktestResult._risk_free_rate_per_period   67% 3 1 0   50% 2 1   60%
src/finbot/backtest/models.py BacktestResult.annualized_volatility   100% 7 0 0   100% 4 0   100%
src/finbot/backtest/models.py BacktestResult.sharpe_ratio   100% 12 0 0   100% 6 0   100%
src/finbot/backtest/models.py BacktestResult.sortino_ratio   100% 16 0 0   100% 8 0   100%
src/finbot/backtest/models.py (no function)   100% 103 0 2   100% 0 0   100%
src/finbot/backtest/runner.py ExperimentRunner.__init__   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/runner.py ExperimentRunner.run   100% 9 0 0   100% 4 0   100%
src/finbot/backtest/runner.py BacktestRunner.run   100% 0 0 1   100% 0 0   100%
src/finbot/backtest/runner.py WalkForwardRunner.__init__   100% 1 0 0   100% 0 0   100%
src/finbot/backtest/runner.py WalkForwardRunner.run_fold   100% 9 0 0   100% 2 0   100%
src/finbot/backtest/runner.py WalkForwardRunner.run   100% 4 0 0   100% 2 0   100%
src/finbot/backtest/runner.py (no function)   100% 20 0 3   100% 0 0   100%
src/finbot/backtest/walk_forward.py generate_walk_forward_splits   100% 23 0 0   100% 10 0   100%
src/finbot/backtest/walk_forward.py ParameterEvaluation.__post_init__   100% 2 0 0   100% 2 0   100%
src/finbot/backtest/walk_forward.py select_best_parameters   100% 4 0 0   100% 2 0   100%
src/finbot/backtest/walk_forward.py (no function)   100% 16 0 0   100% 0 0   100%
src/finbot/cli/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
src/finbot/cli/backtest.py _format_comparison   100% 7 0 0   100% 0 0   100%
src/finbot/cli/backtest.py _format_comparison.format_row   100% 1 0 0   100% 0 0   100%
src/finbot/cli/backtest.py add_arguments   100% 12 0 0   100% 0 0   100%
src/finbot/cli/backtest.py add_compare_arguments   100% 2 0 0   100% 0 0   100%
src/finbot/cli/backtest.py run_compare   100% 11 0 0   100% 2 0   100%
src/finbot/cli/backtest.py _parse_datetime   100% 4 0 0   50% 2 1   83%
src/finbot/cli/backtest.py _load_config   100% 4 0 0   100% 2 0   100%
src/finbot/cli/backtest.py _build_config   100% 25 0 0   100% 20 0   100%
src/finbot/cli/backtest.py _create_market_data_provider   100% 4 0 0   100% 2 0   100%
src/finbot/cli/backtest.py _log_result   89% 27 3 0   75% 4 1   87%
src/finbot/cli/backtest.py run   100% 10 0 0   100% 0 0   100%
src/finbot/cli/backtest.py (no function)   100% 28 0 0   100% 0 0   100%
src/finbot/cli/main.py _test_api   100% 7 0 0   100% 0 0   100%
src/finbot/cli/main.py _add_verbose_argument   100% 4 0 0   100% 2 0   100%
src/finbot/cli/main.py _build_parser   100% 30 0 0   100% 0 0   100%
src/finbot/cli/main.py main   100% 11 0 0   100% 2 0   100%
src/finbot/cli/main.py (no function)   100% 18 0 2   100% 0 0   100%
src/finbot/cli/ml_experiment.py add_arguments   100% 3 0 0   100% 0 0   100%
src/finbot/cli/ml_experiment.py add_walk_forward_arguments   100% 3 0 0   100% 0 0   100%
src/finbot/cli/ml_experiment.py run   100% 6 0 0   100% 0 0   100%
src/finbot/cli/ml_experiment.py run_walk_forward   100% 6 0 0   100% 0 0   100%
src/finbot/cli/ml_experiment.py _load_config   100% 1 0 0   100% 0 0   100%
src/finbot/cli/ml_experiment.py _load_walk_forward_config   100% 1 0 0   100% 0 0   100%
src/finbot/cli/ml_experiment.py _load_json_object   86% 7 1 0   50% 2 1   78%
src/finbot/cli/ml_experiment.py _git_revision   50% 8 4 0   0% 2 0   40%
src/finbot/cli/ml_experiment.py (no function)   100% 17 0 0   100% 0 0   100%
src/finbot/cli/paper.py add_arguments   100% 6 0 0   100% 0 0   100%
src/finbot/cli/paper.py run_until_signal   100% 27 0 0   100% 12 0   100%
src/finbot/cli/paper.py run_until_signal.handle_signal   100% 4 0 0   100% 2 0   100%
src/finbot/cli/paper.py run   96% 25 1 0   80% 10 2   91%
src/finbot/cli/paper.py (no function)   100% 25 0 0   100% 0 0   100%
src/finbot/config.py _load_bool_env   89% 9 1 0   83% 6 1   87%
src/finbot/config.py load_settings   100% 10 0 0   100% 6 0   100%
src/finbot/config.py (no function)   100% 12 0 0   100% 0 0   100%
src/finbot/engine/__init__.py (no function)   100% 4 0 0   100% 0 0   100%
src/finbot/engine/backtest_engine.py BacktestEngine.__init__   100% 7 0 0   100% 2 0   100%
src/finbot/engine/backtest_engine.py BacktestEngine.run   91% 46 4 0   88% 24 3   90%
src/finbot/engine/backtest_engine.py BacktestEngine._signal_to_order   86% 7 1 0   75% 4 1   82%
src/finbot/engine/backtest_engine.py (no function)   100% 19 0 0   100% 0 0   100%
src/finbot/engine/orchestrator.py TradingOrchestrator.__init__   100% 3 0 0   100% 0 0   100%
src/finbot/engine/orchestrator.py TradingOrchestrator.generate_signals   100% 9 0 0   100% 6 0   100%
src/finbot/engine/orchestrator.py TradingOrchestrator.process_bar   100% 4 0 0   100% 2 0   100%
src/finbot/engine/orchestrator.py TradingOrchestrator.process_signal   100% 23 0 0   100% 6 0   100%
src/finbot/engine/orchestrator.py (no function)   100% 27 0 0   100% 0 0   100%
src/finbot/engine/paper.py PaperTradingCoordinator.__init__   100% 8 0 0   100% 2 0   100%
src/finbot/engine/paper.py PaperTradingCoordinator.run_once   100% 20 0 0   100% 8 0   100%
src/finbot/engine/paper.py PaperTradingCoordinator._client_order_id   100% 3 0 0   100% 0 0   100%
src/finbot/engine/paper.py (no function)   100% 14 0 0   100% 0 0   100%
src/finbot/execution/__init__.py (no function)   100% 2 0 0   100% 0 0   100%
src/finbot/execution/alpaca.py AlpacaPaperBroker.__init__   100% 15 0 0   100% 6 0   100%
src/finbot/execution/alpaca.py AlpacaPaperBroker.trading_enabled   0% 1 1 0   100% 0 0   0%
src/finbot/execution/alpaca.py AlpacaPaperBroker.dry_run   100% 1 0 0   100% 0 0   100%
src/finbot/execution/alpaca.py AlpacaPaperBroker._get_state_store   67% 3 1 0   50% 2 1   60%
src/finbot/execution/alpaca.py AlpacaPaperBroker._map_order_response   78% 18 4 0   100% 0 0   78%
src/finbot/execution/alpaca.py AlpacaPaperBroker._request   97% 30 1 0   83% 12 2   93%
src/finbot/execution/alpaca.py AlpacaPaperBroker._response_error_message   55% 11 5 0   33% 6 2   47%
src/finbot/execution/alpaca.py AlpacaPaperBroker._submit_dry_run_order   100% 5 0 0   100% 0 0   100%
src/finbot/execution/alpaca.py AlpacaPaperBroker.submit_order   88% 41 5 0   80% 10 2   86%
src/finbot/execution/alpaca.py AlpacaPaperBroker.get_order   73% 15 4 0   67% 6 2   71%
src/finbot/execution/alpaca.py AlpacaPaperBroker.get_order_by_client_order_id   45% 11 6 0   0% 2 0   38%
src/finbot/execution/alpaca.py AlpacaPaperBroker._cancel_dry_run_order   100% 8 0 0   100% 4 0   100%
src/finbot/execution/alpaca.py AlpacaPaperBroker.cancel_order   86% 7 1 0   75% 4 1   82%
src/finbot/execution/alpaca.py AlpacaPaperBroker._map_fill_activity   70% 23 7 0   75% 4 1   70%
src/finbot/execution/alpaca.py AlpacaPaperBroker.get_fills   81% 26 5 0   75% 12 3   79%
src/finbot/execution/alpaca.py AlpacaPaperBroker._ensure_matching_order   100% 2 0 0   100% 2 0   100%
src/finbot/execution/alpaca.py AlpacaPaperBroker._recover_persisted_order   53% 15 7 0   33% 6 2   48%
src/finbot/execution/alpaca.py AlpacaPaperBroker._map_position_response   60% 10 4 0   100% 0 0   60%
src/finbot/execution/alpaca.py AlpacaPaperBroker.get_positions   69% 13 4 0   67% 6 2   68%
src/finbot/execution/alpaca.py AlpacaPaperBroker._rate_limit_delay   69% 13 4 0   100% 4 0   76%
src/finbot/execution/alpaca.py AlpacaPaperBroker._retry_delay   100% 6 0 0   100% 4 0   100%
src/finbot/execution/alpaca.py AlpacaPaperBroker.get_portfolio_snapshot   80% 15 3 0   75% 4 1   79%
src/finbot/execution/alpaca.py (no function)   100% 52 0 0   100% 0 0   100%
src/finbot/execution/broker.py Broker.submit_order   100% 0 0 1   100% 0 0   100%
src/finbot/execution/broker.py Broker.get_order   100% 0 0 1   100% 0 0   100%
src/finbot/execution/broker.py Broker.cancel_order   100% 0 0 1   100% 0 0   100%
src/finbot/execution/broker.py PortfolioBroker.get_portfolio_snapshot   100% 0 0 1   100% 0 0   100%
src/finbot/execution/broker.py BacktestBroker.portfolio   100% 0 0 1   100% 0 0   100%
src/finbot/execution/broker.py BacktestBroker.fee_rate   100% 0 0 1   100% 0 0   100%
src/finbot/execution/broker.py BacktestBroker.slippage_rate   100% 0 0 1   100% 0 0   100%
src/finbot/execution/broker.py BacktestBroker.execute   100% 0 0 1   100% 0 0   100%
src/finbot/execution/broker.py SimulatedBroker.__init__   100% 14 0 0   100% 8 0   100%
src/finbot/execution/broker.py SimulatedBroker._new_order_id   100% 3 0 0   100% 0 0   100%
src/finbot/execution/broker.py SimulatedBroker._new_fill_id   100% 3 0 0   100% 0 0   100%
src/finbot/execution/broker.py SimulatedBroker._set_order_status   100% 4 0 0   100% 0 0   100%
src/finbot/execution/broker.py SimulatedBroker.submit_order   100% 4 0 0   100% 0 0   100%
src/finbot/execution/broker.py SimulatedBroker.cancel_order   83% 6 1 0   75% 4 1   80%
src/finbot/execution/broker.py SimulatedBroker.execute   100% 22 0 0   100% 10 0   100%
src/finbot/execution/broker.py SimulatedBroker.get_order   100% 1 0 0   100% 0 0   100%
src/finbot/execution/broker.py (no function)   100% 20 0 22   100% 0 0   100%
src/finbot/execution/errors.py BrokerAPIError.__init__   100% 2 0 0   100% 0 0   100%
src/finbot/execution/errors.py ReconciliationError.__init__   100% 3 0 0   100% 0 0   100%
src/finbot/execution/errors.py (no function)   100% 12 0 0   100% 0 0   100%
src/finbot/execution/models.py Order.__post_init__   100% 8 0 0   100% 8 0   100%
src/finbot/execution/models.py OrderState.__post_init__   50% 2 1 0   50% 2 1   50%
src/finbot/execution/models.py Fill.__post_init__   91% 22 2 0   91% 22 2   91%
src/finbot/execution/models.py Fill.serialize   100% 6 0 0   50% 4 2   80%
src/finbot/execution/models.py Fill.deserialize   100% 1 0 0   100% 0 0   100%
src/finbot/execution/models.py BrokerPosition.__post_init__   50% 8 4 0   50% 8 4   50%
src/finbot/execution/models.py (no function)   100% 54 0 0   100% 0 0   100%
src/finbot/execution/reconciliation.py ReconciliationBroker.get_order   100% 0 0 1   100% 0 0   100%
src/finbot/execution/reconciliation.py ReconciliationBroker.get_order_by_client_order_id   100% 0 0 1   100% 0 0   100%
src/finbot/execution/reconciliation.py ReconciliationBroker.get_positions   100% 0 0 1   100% 0 0   100%
src/finbot/execution/reconciliation.py ExecutionReconciler.__init__   100% 2 0 0   100% 0 0   100%
src/finbot/execution/reconciliation.py ExecutionReconciler.reconcile   100% 31 0 0   100% 6 0   100%
src/finbot/execution/reconciliation.py ExecutionReconciler._lookup   100% 5 0 0   100% 2 0   100%
src/finbot/execution/reconciliation.py ExecutionReconciler._validate_match   75% 4 1 0   75% 4 1   75%
src/finbot/execution/reconciliation.py (no function)   100% 21 0 7   100% 0 0   100%
src/finbot/execution/runtime.py PaperTradingRuntime.__init__   100% 7 0 0   100% 0 0   100%
src/finbot/execution/runtime.py PaperTradingRuntime.started   100% 1 0 0   100% 0 0   100%
src/finbot/execution/runtime.py PaperTradingRuntime.stopped   100% 1 0 0   100% 0 0   100%
src/finbot/execution/runtime.py PaperTradingRuntime.kill_switch_active   100% 1 0 0   100% 0 0   100%
src/finbot/execution/runtime.py PaperTradingRuntime.kill_switch_reason   100% 1 0 0   100% 0 0   100%
src/finbot/execution/runtime.py PaperTradingRuntime.start   100% 10 0 0   100% 4 0   100%
src/finbot/execution/runtime.py PaperTradingRuntime.shutdown   100% 6 0 0   100% 2 0   100%
src/finbot/execution/runtime.py PaperTradingRuntime.submit_order   100% 10 0 0   100% 6 0   100%
src/finbot/execution/runtime.py PaperTradingRuntime.activate_kill_switch   100% 5 0 0   100% 2 0   100%
src/finbot/execution/runtime.py (no function)   100% 21 0 0   100% 0 0   100%
src/finbot/execution/state.py ExecutionStateStore.__init__   100% 3 0 0   100% 0 0   100%
src/finbot/execution/state.py ExecutionStateStore._connect   100% 3 0 0   100% 0 0   100%
src/finbot/execution/state.py ExecutionStateStore._initialize   100% 3 0 0   100% 0 0   100%
src/finbot/execution/state.py ExecutionStateStore.reserve   100% 12 0 0   100% 2 0   100%
src/finbot/execution/state.py ExecutionStateStore.update   71% 14 4 0   50% 4 2   67%
src/finbot/execution/state.py ExecutionStateStore.get_by_client_order_id   100% 3 0 0   100% 0 0   100%
src/finbot/execution/state.py ExecutionStateStore.get_by_broker_order_id   100% 3 0 0   100% 0 0   100%
src/finbot/execution/state.py ExecutionStateStore.list_reconcilable   100% 4 0 0   100% 0 0   100%
src/finbot/execution/state.py ExecutionStateStore._from_row   67% 3 1 0   50% 2 1   60%
src/finbot/execution/state.py ExecutionStateStore.list_positions   100% 3 0 0   100% 0 0   100%
src/finbot/execution/state.py ExecutionStateStore.replace_positions   100% 4 0 0   100% 0 0   100%
src/finbot/execution/state.py (no function)   100% 29 0 0   100% 0 0   100%
src/finbot/features/__init__.py (no function)   100% 5 0 0   100% 0 0   100%
src/finbot/features/core.py Feature.name   100% 0 0 1   100% 0 0   100%
src/finbot/features/core.py Feature.calculate   100% 0 0 1   100% 0 0   100%
src/finbot/features/core.py Feature.configuration   89% 9 1 0   83% 6 1   87%
src/finbot/features/core.py FeatureSchema.to_dict   100% 1 0 0   100% 0 0   100%
src/finbot/features/core.py FeatureDatasetMetadata.to_dict   100% 1 0 0   100% 0 0   100%
src/finbot/features/core.py FeatureDataset.dataset_id   100% 2 0 0   100% 0 0   100%
src/finbot/features/core.py FeatureDataset.to_dict   100% 1 0 0   100% 0 0   100%
src/finbot/features/core.py FeaturePipeline.__init__   100% 8 0 0   100% 4 0   100%
src/finbot/features/core.py FeaturePipeline.generate   100% 19 0 0   100% 6 0   100%
src/finbot/features/core.py FeaturePipeline._source_fingerprint   100% 3 0 0   100% 0 0   100%
src/finbot/features/core.py FeaturePipeline._validate_value   100% 8 0 0   100% 6 0   100%
src/finbot/features/core.py (no function)   100% 49 0 2   100% 0 0   100%
src/finbot/features/market.py _validate_window   100% 2 0 0   100% 2 0   100%
src/finbot/features/market.py ReturnFeature.__post_init__   100% 1 0 0   100% 0 0   100%
src/finbot/features/market.py ReturnFeature.name   100% 1 0 0   100% 0 0   100%
src/finbot/features/market.py ReturnFeature.calculate   100% 3 0 0   100% 2 0   100%
src/finbot/features/market.py SimpleMovingAverageFeature.__post_init__   100% 1 0 0   100% 0 0   100%
src/finbot/features/market.py SimpleMovingAverageFeature.name   100% 1 0 0   100% 0 0   100%
src/finbot/features/market.py SimpleMovingAverageFeature.calculate   100% 3 0 0   100% 2 0   100%
src/finbot/features/market.py SmaRatioFeature.__post_init__   100% 4 0 0   100% 2 0   100%
src/finbot/features/market.py SmaRatioFeature.name   100% 1 0 0   100% 0 0   100%
src/finbot/features/market.py SmaRatioFeature.calculate   100% 5 0 0   100% 2 0   100%
src/finbot/features/market.py RollingVolatilityFeature.__post_init__   100% 1 0 0   100% 0 0   100%
src/finbot/features/market.py RollingVolatilityFeature.name   100% 1 0 0   100% 0 0   100%
src/finbot/features/market.py RollingVolatilityFeature.calculate   100% 5 0 0   100% 2 0   100%
src/finbot/features/market.py VolumeChangeFeature.__post_init__   100% 1 0 0   100% 0 0   100%
src/finbot/features/market.py VolumeChangeFeature.name   100% 1 0 0   100% 0 0   100%
src/finbot/features/market.py VolumeChangeFeature.calculate   100% 6 0 0   100% 4 0   100%
src/finbot/features/market.py IntrabarRangeFeature.name   100% 1 0 0   100% 0 0   100%
src/finbot/features/market.py IntrabarRangeFeature.calculate   100% 2 0 0   100% 0 0   100%
src/finbot/features/market.py MomentumFeature.__post_init__   100% 1 0 0   100% 0 0   100%
src/finbot/features/market.py MomentumFeature.name   100% 1 0 0   100% 0 0   100%
src/finbot/features/market.py MomentumFeature.calculate   100% 3 0 0   100% 2 0   100%
src/finbot/features/market.py initial_feature_set   100% 1 0 0   100% 0 0   100%
src/finbot/features/market.py (no function)   100% 55 0 0   100% 0 0   100%
src/finbot/features/persistence.py FeatureDatasetStore.__init__   100% 1 0 0   100% 0 0   100%
src/finbot/features/persistence.py FeatureDatasetStore.save   100% 9 0 0   100% 0 0   100%
src/finbot/features/persistence.py FeatureDatasetStore.load   85% 13 2 0   100% 4 0   88%
src/finbot/features/persistence.py FeatureDatasetStore._parse_payload   95% 19 1 0   92% 12 1   94%
src/finbot/features/persistence.py FeatureDatasetStore._parse_metadata   67% 12 4 0   50% 8 4   60%
src/finbot/features/persistence.py FeatureDatasetStore._parse_schema_entry   67% 9 3 0   50% 6 3   60%
src/finbot/features/persistence.py FeatureDatasetStore._parse_row   67% 18 6 0   60% 10 4   64%
src/finbot/features/persistence.py (no function)   100% 19 0 0   100% 0 0   100%
src/finbot/features/supervised.py ForwardReturnTarget.__post_init__   100% 2 0 0   100% 2 0   100%
src/finbot/features/supervised.py ForwardReturnTarget.name   100% 1 0 0   100% 0 0   100%
src/finbot/features/supervised.py ForwardReturnTarget.to_dict   100% 1 0 0   100% 0 0   100%
src/finbot/features/supervised.py SupervisedDatasetMetadata.to_dict   100% 1 0 0   100% 0 0   100%
src/finbot/features/supervised.py SupervisedDataset.dataset_id   100% 2 0 0   100% 0 0   100%
src/finbot/features/supervised.py SupervisedDataset.to_dict   100% 1 0 0   100% 0 0   100%
src/finbot/features/supervised.py SupervisedDatasetBuilder.__init__   100% 1 0 0   100% 0 0   100%
src/finbot/features/supervised.py SupervisedDatasetBuilder.build   89% 35 4 0   78% 18 4   85%
src/finbot/features/supervised.py build_supervised_dataset   100% 1 0 0   100% 0 0   100%
src/finbot/features/supervised.py (no function)   100% 42 0 0   100% 0 0   100%
src/finbot/market/__init__.py (no function)   100% 4 0 0   100% 0 0   100%
src/finbot/market/alpaca.py AlpacaMarketDataProvider.__init__   100% 4 0 0   100% 0 0   100%
src/finbot/market/alpaca.py AlpacaMarketDataProvider.get_latest_bar   100% 5 0 0   100% 0 0   100%
src/finbot/market/alpaca.py AlpacaMarketDataProvider.get_bars   100% 36 0 0   100% 12 0   100%
src/finbot/market/alpaca.py AlpacaMarketDataProvider._parse_bar   100% 1 0 0   100% 0 0   100%
src/finbot/market/alpaca.py (no function)   100% 16 0 0   100% 0 0   100%
src/finbot/market/cache.py HistoricalDataCache.__init__   100% 1 0 0   100% 0 0   100%
src/finbot/market/cache.py HistoricalDataCache.contains   100% 1 0 0   100% 0 0   100%
src/finbot/market/cache.py HistoricalDataCache.save   88% 32 4 0   83% 6 1   87%
src/finbot/market/cache.py HistoricalDataCache.load   100% 32 0 0   100% 12 0   100%
src/finbot/market/cache.py HistoricalDataCache.get_bars   100% 2 0 0   100% 0 0   100%
src/finbot/market/cache.py HistoricalDataCache.get_metadata   100% 2 0 0   100% 0 0   100%
src/finbot/market/cache.py HistoricalDataCache._dataset_dir   100% 3 0 0   100% 2 0   100%
src/finbot/market/cache.py HistoricalDataCache._json_bytes   100% 2 0 0   100% 0 0   100%
src/finbot/market/cache.py HistoricalDataCache._serialize_bars   100% 5 0 0   100% 4 0   100%
src/finbot/market/cache.py HistoricalDataCache._deserialize_bars   92% 13 1 0   83% 6 1   89%
src/finbot/market/cache.py HistoricalDataCache._normalize_bars   95% 21 1 0   86% 14 2   91%
src/finbot/market/cache.py HistoricalDataCache._read_json_object   100% 7 0 0   100% 2 0   100%
src/finbot/market/cache.py HistoricalDataCache._validate_manifest   100% 12 0 0   100% 10 0   100%
src/finbot/market/cache.py (no function)   100% 36 0 0   100% 0 0   100%
src/finbot/market/data_provider.py MarketDataProvider.get_latest_bar   100% 0 0 1   100% 0 0   100%
src/finbot/market/data_provider.py MarketDataProvider.get_latest_bars   100% 1 0 0   100% 0 0   100%
src/finbot/market/data_provider.py MarketDataProvider.get_bars   100% 0 0 1   100% 0 0   100%
src/finbot/market/data_provider.py (no function)   100% 5 0 11   100% 0 0   100%
src/finbot/market/dataset.py DatasetMetadata.__post_init__   100% 28 0 0   100% 18 0   100%
src/finbot/market/dataset.py DatasetMetadata.dataset_id   100% 2 0 0   100% 0 0   100%
src/finbot/market/dataset.py DatasetMetadata.to_dict   100% 1 0 0   100% 0 0   100%
src/finbot/market/dataset.py DatasetMetadata.from_dict   97% 31 1 0   93% 14 1   96%
src/finbot/market/dataset.py (no function)   100% 21 0 0   100% 0 0   100%
src/finbot/market/models.py Bar.__post_init__   100% 16 0 0   100% 16 0   100%
src/finbot/market/models.py (no function)   100% 13 0 0   100% 0 0   100%
src/finbot/ml/__init__.py (no function)   100% 5 0 0   100% 0 0   100%
src/finbot/ml/artifacts.py MLExperimentStore.__init__   100% 1 0 0   100% 0 0   100%
src/finbot/ml/artifacts.py MLExperimentStore.execute   100% 9 0 0   100% 0 0   100%
src/finbot/ml/artifacts.py MLExperimentStore.load   75% 36 9 0   68% 22 7   72%
src/finbot/ml/artifacts.py MLExperimentStore._begin   100% 7 0 0   100% 2 0   100%
src/finbot/ml/artifacts.py MLExperimentStore._complete   100% 9 0 0   100% 0 0   100%
src/finbot/ml/artifacts.py MLExperimentStore._metadata   100% 6 0 0   100% 4 0   100%
src/finbot/ml/artifacts.py MLExperimentStore._write_metadata   100% 1 0 0   100% 0 0   100%
src/finbot/ml/artifacts.py MLExperimentStore._write_json   100% 3 0 0   100% 0 0   100%
src/finbot/ml/artifacts.py MLExperimentStore._write_predictions   100% 8 0 0   100% 4 0   100%
src/finbot/ml/artifacts.py MLExperimentStore._write_trades   100% 1 0 0   100% 0 0   100%
src/finbot/ml/artifacts.py MLExperimentStore._read_object   57% 7 3 0   50% 2 1   56%
src/finbot/ml/artifacts.py write_backtest_trades   88% 8 1 0   75% 4 1   83%
src/finbot/ml/artifacts.py run_and_store   0% 1 1 0   100% 0 0   0%
src/finbot/ml/artifacts.py _write_text_atomic   100% 3 0 0   100% 0 0   100%
src/finbot/ml/artifacts.py _sha256   100% 1 0 0   100% 0 0   100%
src/finbot/ml/artifacts.py compare_ml_experiments   81% 16 3 0   70% 10 3   77%
src/finbot/ml/artifacts.py (no function)   100% 54 0 0   100% 0 0   100%
src/finbot/ml/experiment.py MLExperimentConfig.__post_init__   76% 33 8 0   71% 28 8   74%
src/finbot/ml/experiment.py MLExperimentConfig.to_dict   100% 1 0 0   100% 0 0   100%
src/finbot/ml/experiment.py MLExperimentConfig.from_dict   75% 12 3 0   50% 2 1   71%
src/finbot/ml/experiment.py ClassificationMetrics.to_dict   100% 1 0 0   100% 0 0   100%
src/finbot/ml/experiment.py StrategyMetrics.from_result   100% 1 0 0   100% 0 0   100%
src/finbot/ml/experiment.py StrategyMetrics.to_dict   100% 1 0 0   100% 0 0   100%
src/finbot/ml/experiment.py MLExperimentRunner.__init__   100% 1 0 0   100% 0 0   100%
src/finbot/ml/experiment.py MLExperimentRunner.run   94% 32 2 0   75% 8 2   90%
src/finbot/ml/experiment.py run_ml_backtest   100% 3 0 0   100% 0 0   100%
src/finbot/ml/experiment.py _slice_supervised   100% 1 0 0   100% 0 0   100%
src/finbot/ml/experiment.py _features_for_supervised   100% 2 0 0   100% 0 0   100%
src/finbot/ml/experiment.py _features_in_period   100% 1 0 0   100% 0 0   100%
src/finbot/ml/experiment.py bars_in_period   75% 4 1 0   50% 2 1   67%
src/finbot/ml/experiment.py _classification_metrics   92% 13 1 0   75% 4 1   88%
src/finbot/ml/experiment.py _period_to_dict   100% 1 0 0   100% 0 0   100%
src/finbot/ml/experiment.py _period_from_dict   100% 2 0 0   100% 0 0   100%
src/finbot/ml/experiment.py _object   67% 3 1 0   50% 2 1   60%
src/finbot/ml/experiment.py (no function)   100% 84 0 0   100% 0 0   100%
src/finbot/ml/walk_forward.py MLWalkForwardConfig.__post_init__   100% 5 0 0   100% 2 0   100%
src/finbot/ml/walk_forward.py MLWalkForwardConfig.splits   100% 1 0 0   100% 0 0   100%
src/finbot/ml/walk_forward.py MLWalkForwardConfig.to_dict   100% 4 0 0   100% 0 0   100%
src/finbot/ml/walk_forward.py MLWalkForwardConfig.from_dict   95% 20 1 0   50% 2 1   91%
src/finbot/ml/walk_forward.py MLWalkForwardResult.__post_init__   100% 7 0 0   100% 6 0   100%
src/finbot/ml/walk_forward.py MLWalkForwardResult.oos_predictions   100% 1 0 0   100% 0 0   100%
src/finbot/ml/walk_forward.py MLWalkForwardRunner.__init__   100% 2 0 0   100% 0 0   100%
src/finbot/ml/walk_forward.py MLWalkForwardRunner.run   100% 21 0 0   100% 2 0   100%
src/finbot/ml/walk_forward.py _validate_test_periods   100% 5 0 0   100% 6 0   100%
src/finbot/ml/walk_forward.py _days_value   100% 4 0 0   100% 2 0   100%
src/finbot/ml/walk_forward.py _datetime_value   83% 6 1 0   75% 4 1   80%
src/finbot/ml/walk_forward.py _whole_days   67% 3 1 0   50% 2 1   60%
src/finbot/ml/walk_forward.py _period_to_dict   100% 1 0 0   100% 0 0   100%
src/finbot/ml/walk_forward.py (no function)   100% 48 0 0   100% 0 0   100%
src/finbot/ml/walk_forward_artifacts.py WalkForwardRunner.run   100% 0 0 1   100% 0 0   100%
src/finbot/ml/walk_forward_artifacts.py MLWalkForwardStore.execute   100% 10 0 0   100% 0 0   100%
src/finbot/ml/walk_forward_artifacts.py MLWalkForwardStore.load   90% 30 3 0   79% 14 3   86%
src/finbot/ml/walk_forward_artifacts.py MLWalkForwardStore._begin   100% 9 0 0   100% 4 0   100%
src/finbot/ml/walk_forward_artifacts.py MLWalkForwardStore._complete   100% 15 0 0   100% 2 0   100%
src/finbot/ml/walk_forward_artifacts.py MLWalkForwardStore._metadata   100% 5 0 0   100% 2 0   100%
src/finbot/ml/walk_forward_artifacts.py MLWalkForwardStore._validate_folds   83% 12 2 0   80% 10 2   82%
src/finbot/ml/walk_forward_artifacts.py MLWalkForwardStore._validate_predictions   80% 20 4 0   67% 12 4   75%
src/finbot/ml/walk_forward_artifacts.py _required_artifacts   100% 1 0 0   100% 0 0   100%
src/finbot/ml/walk_forward_artifacts.py _fold_path   100% 1 0 0   100% 0 0   100%
src/finbot/ml/walk_forward_artifacts.py _split_to_dict   100% 1 0 0   100% 0 0   100%
src/finbot/ml/walk_forward_artifacts.py _period_to_dict   100% 1 0 0   100% 0 0   100%
src/finbot/ml/walk_forward_artifacts.py _write_fold_predictions   100% 8 0 0   100% 4 0   100%
src/finbot/ml/walk_forward_artifacts.py _write_oos_predictions   100% 8 0 0   100% 4 0   100%
src/finbot/ml/walk_forward_artifacts.py _read_csv   100% 1 0 0   100% 0 0   100%
src/finbot/ml/walk_forward_artifacts.py (no function)   100% 43 0 7   100% 0 0   100%
src/finbot/models/__init__.py (no function)   100% 3 0 0   100% 0 0   100%
src/finbot/models/core.py TrainingConfiguration.to_dict   100% 1 0 0   100% 0 0   100%
src/finbot/models/core.py ModelMetadata.model_id   100% 2 0 0   100% 0 0   100%
src/finbot/models/core.py ModelMetadata.to_dict   100% 1 0 0   100% 0 0   100%
src/finbot/models/core.py Prediction.__post_init__   100% 17 0 0   100% 16 0   100%
src/finbot/models/core.py Prediction.to_dict   100% 1 0 0   100% 0 0   100%
src/finbot/models/core.py Model.metadata   100% 0 0 1   100% 0 0   100%
src/finbot/models/core.py Model.train   100% 0 0 1   100% 0 0   100%
src/finbot/models/core.py Model.fit   100% 2 0 0   100% 0 0   100%
src/finbot/models/core.py Model.predict_proba   100% 0 0 1   100% 0 0   100%
src/finbot/models/core.py Model.save   100% 0 0 1   100% 0 0   100%
src/finbot/models/core.py (no function)   100% 48 0 3   100% 0 0   100%
src/finbot/models/logistic.py LogisticRegressionModel.__init__   100% 12 0 0   100% 6 0   100%
src/finbot/models/logistic.py LogisticRegressionModel.metadata   100% 3 0 0   100% 2 0   100%
src/finbot/models/logistic.py LogisticRegressionModel.train   95% 20 1 0   90% 10 1   93%
src/finbot/models/logistic.py LogisticRegressionModel.predict_proba   100% 12 0 0   100% 4 0   100%
src/finbot/models/logistic.py LogisticRegressionModel.save   100% 9 0 0   100% 0 0   100%
src/finbot/models/logistic.py LogisticRegressionModel.load   69% 13 4 0   100% 0 0   69%
src/finbot/models/logistic.py LogisticRegressionModel._validate_schema   71% 7 2 0   67% 6 2   69%
src/finbot/models/logistic.py LogisticRegressionModel._validate_values   91% 11 1 0   88% 8 1   89%
src/finbot/models/logistic.py LogisticRegressionModel._sigmoid   100% 4 0 0   100% 2 0   100%
src/finbot/models/logistic.py LogisticRegressionModel._parse_artifact   78% 41 9 0   59% 22 9   71%
src/finbot/models/logistic.py LogisticRegressionModel._hyperparameters   100% 1 0 0   100% 0 0   100%
src/finbot/models/logistic.py LogisticRegressionModel._parse_finite_numbers   100% 3 0 0   100% 2 0   100%
src/finbot/models/logistic.py load_model   55% 11 5 0   75% 4 1   60%
src/finbot/models/logistic.py (no function)   100% 30 0 0   100% 0 0   100%
src/finbot/portfolio/__init__.py (no function)   100% 2 0 0   100% 0 0   100%
src/finbot/portfolio/portfolio.py Position.market_value   100% 1 0 0   100% 0 0   100%
src/finbot/portfolio/portfolio.py Position.unrealized_pnl   100% 1 0 0   100% 0 0   100%
src/finbot/portfolio/portfolio.py Portfolio.apply_fill   100% 6 0 0   100% 4 0   100%
src/finbot/portfolio/portfolio.py Portfolio._apply_buy_fill   100% 14 0 0   100% 4 0   100%
src/finbot/portfolio/portfolio.py Portfolio._apply_sell_fill   100% 16 0 0   100% 6 0   100%
src/finbot/portfolio/portfolio.py Portfolio.positions_value   100% 6 0 0   100% 4 0   100%
src/finbot/portfolio/portfolio.py Portfolio.total_value   100% 1 0 0   100% 0 0   100%
src/finbot/portfolio/portfolio.py (no function)   100% 22 0 0   100% 0 0   100%
src/finbot/risk/__init__.py (no function)   100% 4 0 0   100% 0 0   100%
src/finbot/risk/models.py RiskLimits.__post_init__   100% 13 0 0   100% 10 0   100%
src/finbot/risk/models.py RiskLimits._validate_fraction   100% 4 0 0   100% 4 0   100%
src/finbot/risk/models.py RiskLimits._validate_positive   100% 4 0 0   100% 4 0   100%
src/finbot/risk/models.py RiskDecision.__post_init__   86% 7 1 0   88% 8 1   87%
src/finbot/risk/models.py RiskDecision.accept   100% 1 0 0   100% 0 0   100%
src/finbot/risk/models.py RiskDecision.reject   100% 1 0 0   100% 0 0   100%
src/finbot/risk/models.py SizingDecision.__post_init__   100% 8 0 0   100% 8 0   100%
src/finbot/risk/models.py SizingDecision.accepted   100% 1 0 0   100% 0 0   100%
src/finbot/risk/models.py SizingDecision.accept   100% 1 0 0   100% 0 0   100%
src/finbot/risk/models.py SizingDecision.reject   100% 1 0 0   100% 0 0   100%
src/finbot/risk/models.py (no function)   100% 36 0 0   100% 0 0   100%
src/finbot/risk/position_sizer.py PositionSizer.size   93% 14 1 0   88% 8 1   91%
src/finbot/risk/position_sizer.py PositionSizer._validate_inputs   100% 10 0 0   100% 10 0   100%
src/finbot/risk/position_sizer.py (no function)   100% 7 0 0   100% 0 0   100%
src/finbot/risk/risk_manager.py RiskManager.__init__   100% 1 0 0   100% 0 0   100%
src/finbot/risk/risk_manager.py RiskManager.assess   100% 8 0 0   100% 6 0   100%
src/finbot/risk/risk_manager.py RiskManager._assess_long   93% 29 2 0   92% 12 1   93%
src/finbot/risk/risk_manager.py RiskManager._assess_short   100% 10 0 0   100% 6 0   100%
src/finbot/risk/risk_manager.py RiskManager._validate_market_prices   88% 8 1 0   83% 6 1   86%
src/finbot/risk/risk_manager.py (no function)   100% 11 0 0   100% 0 0   100%
src/finbot/strategy/__init__.py (no function)   100% 4 0 0   100% 0 0   100%
src/finbot/strategy/core.py Signal.__post_init__   100% 7 0 0   100% 8 0   100%
src/finbot/strategy/core.py Strategy.on_bar   100% 0 0 1   100% 0 0   100%
src/finbot/strategy/core.py (no function)   100% 18 0 2   100% 0 0   100%
src/finbot/strategy/ml.py ProbabilityThresholdPolicy.__post_init__   100% 7 0 0   100% 6 0   100%
src/finbot/strategy/ml.py ProbabilityThresholdPolicy.to_signal   100% 18 0 0   100% 8 0   100%
src/finbot/strategy/ml.py ProbabilityThresholdPolicy._validate_probability   100% 2 0 0   100% 2 0   100%
src/finbot/strategy/ml.py ModelStrategy.__init__   100% 8 0 0   100% 2 0   100%
src/finbot/strategy/ml.py ModelStrategy.from_artifact   100% 1 0 0   100% 0 0   100%
src/finbot/strategy/ml.py ModelStrategy.predictions   100% 1 0 0   100% 0 0   100%
src/finbot/strategy/ml.py ModelStrategy.prime   100% 5 0 0   100% 4 0   100%
src/finbot/strategy/ml.py ModelStrategy.on_bar   100% 20 0 0   90% 10 1   97%
src/finbot/strategy/ml.py PredictionStrategy.__init__   100% 6 0 0   100% 2 0   100%
src/finbot/strategy/ml.py PredictionStrategy.on_bar   100% 8 0 0   100% 4 0   100%
src/finbot/strategy/ml.py (no function)   100% 28 0 0   100% 0 0   100%
src/finbot/strategy/strategies.py RandomStrategy.__init__   100% 1 0 0   100% 0 0   100%
src/finbot/strategy/strategies.py RandomStrategy.on_bar   100% 6 0 0   100% 4 0   100%
src/finbot/strategy/strategies.py BuyOnceStrategy.__init__   100% 1 0 0   100% 0 0   100%
src/finbot/strategy/strategies.py BuyOnceStrategy.on_bar   100% 4 0 0   100% 2 0   100%
src/finbot/strategy/strategies.py SmaCrossoverStrategy.__init__   100% 8 0 0   100% 4 0   100%
src/finbot/strategy/strategies.py SmaCrossoverStrategy.prime   100% 3 0 0   100% 2 0   100%
src/finbot/strategy/strategies.py SmaCrossoverStrategy._get_direction   80% 5 1 0   75% 4 1   78%
src/finbot/strategy/strategies.py SmaCrossoverStrategy.on_bar   100% 17 0 0   100% 8 0   100%
src/finbot/strategy/strategies.py _create_buy_once   100% 3 0 0   100% 2 0   100%
src/finbot/strategy/strategies.py create_strategy   100% 5 0 0   100% 0 0   100%
src/finbot/strategy/strategies.py (no function)   100% 22 0 0   100% 0 0   100%
Total     95% 3996 199 104   88% 1104 129   93%

No items found using the specified filter.