Spaces:
Running
Running
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()
|