Pipeline Components¶
This document provides detailed information about each component of the Pure Python Pipeline.
Portfolio Deep Analyzer¶
Overview¶
The Portfolio Deep Analyzer (portfolio_deep_analyzer.py) replaces AI-based DeepAnalysisCrew with fast, deterministic Python calculations.
Key Features¶
- Pure Python Scoring: Uses
DeepAnalysisScorerfor deterministic calculations - Real Market Data: Fetches actual data via
QuantitativeAnalysisTool - JSON Export Generation: Creates standardized exports for downstream systems
- HTML Report Generation: Uses Jinja2 templates for individual holding reports
- Score Uniqueness Validation: Prevents hardcoded defaults
Performance Characteristics¶
- Execution Time: < 1 second per holding
- LLM Calls: 0
- Cost: $0.00
- Memory Usage: < 50 MB for typical portfolios
Usage Example¶
from finwiz.scoring.portfolio_deep_analyzer import analyze_portfolio_with_python
results = analyze_portfolio_with_python(
holdings=portfolio_holdings,
session_id="analysis_session_123"
)
# Access results
print(f"Successful: {results['successful_analyses']}")
print(f"Failed: {results['failed_analyses']}")
print(f"Time: {results['performance_metrics']['total_execution_time_seconds']:.2f}s")
Output Structure¶
The analyzer generates:
- Individual JSON exports:
output/{asset_class}/{ticker}_{session_id}.json - Individual HTML reports:
output/{asset_class}/{ticker}_{session_id}.html - Consolidated export:
output/deep_analysis_consolidated_{session_id}.json
A+ Discovery Integrator¶
Overview¶
The A+ Discovery Integrator (aplus_discovery_integrator.py) identifies A+ opportunities from deep analysis results by reading JSON exports.
Key Features¶
- Directory Scanning: Scans
output/stock/,output/etf/,output/crypto/ - Grade Filtering: Identifies A+ and A grade holdings
- Cross-Asset Consolidation: Consolidates opportunities across asset classes
- Duplicate Removal: Ensures unique ticker list
Data Flow¶
output/stock/*.json ─┐
output/etf/*.json ─┼─> A+ Discovery Integration ─> Opportunities List
output/crypto/*.json ─┘
Usage Example¶
from finwiz.integration.aplus_discovery_integrator import integrate_aplus_discovery_with_deep_analysis
discovery_results = integrate_aplus_discovery_with_deep_analysis(
session_id="analysis_session_123"
)
if discovery_results["has_a_plus_analysis"]:
print(f"Found {discovery_results['total_opportunities_found']} opportunities")
for holding in discovery_results["aplus_holdings"]:
print(f" {holding['ticker']}: Grade {holding['grade']}")
Output Structure¶
Generates output/aplus_discovery_{session_id}.json containing:
has_a_plus_analysis: Boolean indicating if opportunities existtotal_opportunities_found: Count of A+ opportunitiesaplus_holdings: List of opportunity detailstotal_analyzed: Total holdings analyzedintegration_timestamp: ISO timestamp
View discovery results structure →
Backtesting Pipeline Connector¶
Overview¶
The Backtesting Pipeline Connector (backtesting_pipeline_connector.py) automatically executes backtesting when A+ candidates are available.
Key Features¶
- Automatic Candidate Detection: Reads A+ candidates from discovery results
- Backtesting Execution: Executes strategy for each candidate
- Performance Metrics: Calculates comprehensive metrics
- JSON Export: Saves results for report integration
Performance Metrics¶
The connector calculates:
- Annual Return: Annualized return percentage
- Sharpe Ratio: Risk-adjusted return metric
- Maximum Drawdown: Peak-to-trough decline
- Win Rate: Percentage of winning trades
- Backtest Period: Time period tested
Usage Example¶
from finwiz.integration.backtesting_pipeline_connector import connect_backtesting_to_discovery_results
backtesting_results = connect_backtesting_to_discovery_results(
session_id="analysis_session_123"
)
if backtesting_results["backtesting_executed"]:
print(f"Backtested {backtesting_results['candidates_count']} candidates")
for result in backtesting_results["results"]:
print(f" {result['ticker']}: {result['annual_return']:.1%} return")
Output Structure¶
Generates output/backtesting_results_{session_id}.json containing:
backtesting_executed: Boolean indicating execution statuscandidates_count: Number of candidates testedcandidates: List of candidate detailsresults: List of backtesting results with metricsexecution_time_seconds: Total execution time
View backtesting results structure →
Python Report Generator¶
Overview¶
The Python Report Generator (python_report_generator.py) generates comprehensive HTML reports using Jinja2 templates without any AI calls.
Key Features¶
- Template-Based Generation: Uses Jinja2 for consistent formatting
- Portfolio Statistics: Calculates comprehensive statistics
- Holdings Analysis: Detailed analysis with grades and scores
- Deep Analysis Integration: Incorporates deep analysis results
- Performance Metrics: Displays execution metrics
- Responsive Design: Light/dark mode CSS styling
Report Sections¶
- Executive Summary
- Portfolio grade and score
- Total holdings and opportunities
-
Key statistics
-
Portfolio Overview
- Asset class distribution
- Grade distribution
-
Recommendation breakdown
-
Holdings Analysis
- Detailed holding information
- Grades and scores
-
Recommendations and rationale
-
Strategic Recommendations
- Priority actions
- Optimization suggestions
-
Python pipeline benefits
-
Deep Analysis Results
- Analysis success metrics
- Detailed scores
-
Component breakdowns
-
Performance Metrics
- Execution time
- Cost savings
- Efficiency metrics
Usage Example¶
from finwiz.reporting.python_report_generator import generate_python_report
report_path = generate_python_report(
portfolio_review=portfolio_review,
deep_analysis_results=analysis_results,
session_id="analysis_session_123"
)
print(f"Report generated: {report_path}")
Output¶
Generates output/finwiz_family_financial_plan.html with:
- Professional HTML structure
- Responsive CSS styling
- Complete portfolio analysis
- Deep analysis integration
- Performance metrics
Component Integration¶
Sequential Execution¶
Components execute in sequence:
1. Portfolio Deep Analyzer
↓ (generates JSON exports)
2. A+ Discovery Integrator
↓ (identifies opportunities)
3. Backtesting Pipeline Connector
↓ (validates candidates)
4. Python Report Generator
↓ (consolidates results)
Final HTML Report
Data Dependencies¶
- A+ Discovery depends on Deep Analysis JSON exports
- Backtesting depends on A+ Discovery results
- Report Generator depends on all previous components
Error Handling¶
Each component implements graceful error handling:
- Deep Analyzer: Continues with remaining holdings if one fails
- A+ Discovery: Returns empty results if no exports found
- Backtesting: Skips execution if no candidates available
- Report Generator: Generates report even with partial data
Performance Optimization¶
Parallel Processing¶
- Deep Analyzer processes holdings sequentially (data fetching is I/O bound)
- JSON exports are written asynchronously
- HTML generation uses template caching
Memory Management¶
- Streaming JSON parsing for large files
- Incremental report generation
- Automatic cleanup of temporary data
Caching Strategy¶
- Market data cached per session
- Template compilation cached
- Analysis results cached in JSON
Related Documentation¶
- Data Flow - Complete data flow architecture
- JSON Exports - Export structure specifications
- API Reference - Complete API documentation
- How-to Guide - Usage instructions