File size: 2,627 Bytes
3fe0726
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
"""
Saturday Fundamental Analysis Runner
Runs fundamental analysis for all tickers in available_tickers table
"""

import sys
from pathlib import Path
from datetime import datetime

# Add src to path
sys.path.insert(0, str(Path(__file__).parent / "src"))

from db.local_database import LocalDatabase, DatabaseEntry, DataType
from fundamental_analysis.decision_maker import evaluate_stock

def run_saturday_analysis():
    """Run fundamental analysis for all available tickers"""
    
    print("=" * 60)
    print("📊 SATURDAY FUNDAMENTAL ANALYSIS")
    print("=" * 60)
    print(f"Started at: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")
    
    # Initialize database
    db = LocalDatabase()
    
    # Get all available tickers
    tickers = db.get_all_available_tickers()
    total = len(tickers)
    
    if total == 0:
        print("⚠️  No tickers found in available_tickers table")
        print("Run: python src/db/populate_tickers.py alpaca")
        return
    
    print(f"📋 Found {total} tickers to analyze\n")
    
    success_count = 0
    error_count = 0
    skipped_count = 0
    
    for i, ticker in enumerate(tickers, 1):
        try:
            print(f"[{i}/{total}] Analyzing {ticker}...", end=" ")
            
            # Run fundamental analysis
            result = evaluate_stock(ticker, compare_to_sector=False)
            
            if result is None:
                print("⚠️  Skipped (no data)")
                skipped_count += 1
                continue
            
            # Save to database
            today = datetime.now().date().isoformat()
            entry = DatabaseEntry(
                date=today,
                data_type=DataType.FUNDAMENTAL.value,
                ticker=ticker,
                data=result,
                metadata={'saturday_batch': True}
            )
            
            if db.save(entry, expiry_days=7):
                print(f"✅ {result.get('recommendation', 'HOLD')}")
                success_count += 1
            else:
                print("❌ Save failed")
                error_count += 1
                
        except Exception as e:
            print(f"❌ Error: {e}")
            error_count += 1
    
    print("\n" + "=" * 60)
    print("📊 ANALYSIS COMPLETE")
    print("=" * 60)
    print(f"✅ Success: {success_count}")
    print(f"⚠️  Skipped: {skipped_count}")
    print(f"❌ Errors: {error_count}")
    print(f"📊 Total: {total}")
    print(f"\nCompleted at: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
    print("=" * 60)

if __name__ == "__main__":
    run_saturday_analysis()