45 lines
1.7 KiB
Python
45 lines
1.7 KiB
Python
from ETF_Portal.services.nav_erosion_service import NavErosionService
|
|
import logging
|
|
|
|
# Set up logging
|
|
logging.basicConfig(level=logging.INFO)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
def test_portfolio():
|
|
# Initialize service
|
|
service = NavErosionService()
|
|
|
|
# Test portfolio
|
|
portfolio = ['VTI', 'DEPI', 'MSTY', 'JEPI', 'VOO']
|
|
|
|
try:
|
|
# Analyze portfolio
|
|
analysis = service.analyze_etf_erosion_risk(portfolio)
|
|
|
|
# Print results
|
|
print("\nPortfolio Analysis Results:")
|
|
print("=" * 50)
|
|
print(f"Portfolio NAV Risk: {analysis.portfolio_nav_risk:.1f}/9")
|
|
print(f"Portfolio Yield Risk: {analysis.portfolio_yield_risk:.1f}/9")
|
|
print("\nDetailed Results:")
|
|
print("=" * 50)
|
|
|
|
for result in analysis.results:
|
|
print(f"\n{result.ticker}:")
|
|
print(f" NAV Erosion Risk: {result.nav_erosion_risk:.1f}/9")
|
|
print(f" Yield Erosion Risk: {result.yield_erosion_risk:.1f}/9")
|
|
print(f" Estimated NAV Erosion: {result.estimated_nav_erosion:.1%}")
|
|
print(f" Estimated Yield Erosion: {result.estimated_yield_erosion:.1%}")
|
|
print(f" NAV Risk Explanation: {result.nav_risk_explanation}")
|
|
print(f" Yield Risk Explanation: {result.yield_risk_explanation}")
|
|
if result.component_risks:
|
|
print(" Component Risks:")
|
|
for component, value in result.component_risks.items():
|
|
print(f" {component}: {value:.1%}")
|
|
|
|
except Exception as e:
|
|
logger.error(f"Error during analysis: {str(e)}")
|
|
raise
|
|
|
|
if __name__ == "__main__":
|
|
test_portfolio() |