Spaces:
Running
Running
| try: | |
| from ..data.fundamentals import get_fundamental_data | |
| except (ImportError, ValueError): | |
| from data.fundamentals import get_fundamental_data | |
| def analyze_value(symbol: str) -> dict: | |
| """ | |
| Analyze value based on fundamentals. | |
| """ | |
| fund_data = get_fundamental_data(symbol) | |
| if "error" in fund_data: | |
| return {"action": "HOLD", "confidence": 0.0, "reasoning": f"Error: {fund_data['error']}"} | |
| pe = fund_data.get("pe_ratio") | |
| # forward_pe = fund_data.get("forward_pe") | |
| # sector = fund_data.get("sector") | |
| score = 0 | |
| reasons = [] | |
| # Simple PE Logic (Generic) | |
| if pe: | |
| if pe < 15: | |
| score += 1 | |
| reasons.append(f"Low PE Ratio ({pe})") | |
| elif pe > 30: | |
| score -= 1 | |
| reasons.append(f"High PE Ratio ({pe})") | |
| else: | |
| reasons.append(f"Moderate PE Ratio ({pe})") | |
| else: | |
| reasons.append("PE Ratio data missing") | |
| # Dividend Logic (if applicable) | |
| div_yield = fund_data.get("dividend_yield") | |
| if div_yield and div_yield > 0.03: | |
| score += 0.5 | |
| reasons.append(f"Good Dividend Yield ({div_yield:.1%})") | |
| action = "HOLD" | |
| if score >= 1: | |
| action = "BUY" | |
| elif score <= -1: | |
| action = "SELL" | |
| return { | |
| "strategy": "Value", | |
| "symbol": symbol, | |
| "action": action, | |
| "confidence": min(abs(score) / 2.0, 1.0), | |
| "reasoning": "; ".join(reasons) | |
| } | |