o
    TLNiE                     @   s\   d dl Z d dlmZmZmZmZ dedee fddZdeeef deeef fdd	Z	dS )
    N)AnyDictOptionalTuplevreturnc                 C   sV   z | d u s
t | trW d S t| }t|st|rW d S |W S  ty*   Y d S w )N)
isinstanceboolfloatmathisnanisinf	Exception)r   f r   9/var/www/html/Trade-python/app/v1/utils/symbol_ranking.py_safe_float   s   r   market_datac              	      s2  t | tr
| dnd t | tr| dnd}g }d}d}dtdtdttttf f fdd	}|d
d\}}}|dd\}	}
}|dd\}}}|||	 | 7 }|||
 | 7 }|| | }t |tr|d}t |trt|dptd  }t	|d}|dv r|d7 }|
d n|dv r|d7 }|
d |dur|dkr|td|d 7 }n|dk r|tdt|d 7 }t||}|dkrd}n||krdnd}d}|d krd}n|d!krd}n|d"krd#}|s|dkr|
d$ n|dkr|
d% n|
d& t|d't|d't|d'|||dd( d)S )*a  Compute a deterministic opportunity score from computed indicators/strategies.

    Returns
    -------
    {
      bull: float,
      bear: float,
      opportunity: float,
      direction: 'BULLISH'|'BEARISH'|'NEUTRAL',
      quality: float (0..1),
      reasons: list[str]
    }

    Notes
    -----
    - Uses only computed fields: market_data['indicators'] and market_data['strategies'].
    - Does not require LTP/quote.
    - Designed to be stable + cheap; not meant to be a perfect trading model.
    
indicatorsN
strategies        tfwr   c           
         s~  t  tsdS  | }t |tsdS t|d}t|d}t|d}t|d}d}d}d}	|d urZ|d urZ|dkrZ|	d7 }	||krP|d	| 7 }n
||k rZ|d	| 7 }|d ur|	d7 }	d
|  krldkrun n|d	| 7 }n(d|  krdkrn n|d	| 7 }n|dkr|d| 7 }n
|dkr|d| 7 }|d ur|	d7 }	|dkr|d	| 7 }n
|dk r|d	| 7 }|||	fS )N)r   r   r   closevwaprsi	macd_histr   r            ?4   D       0   K   g      ?   )r   dictgetr   )
r   r   indr   r   r   r   bsusedr   r   r   	_tf_score.   sF   



z$score_market_data.<locals>._tf_score5minuter   15minuteg333333?daygffffff?multi_timeframe	alignment strength)bullishbuyg       @zMTF alignment bullish)bearishsellzMTF alignment bearishr   g      ?g      $@g      ?NEUTRALBULLISHBEARISH      r   g?zindicators suggest bullish biaszindicators suggest bearish biaszinsufficient signal      )bullbearopportunity	directionqualityreasons)r   r%   r&   strr
   r   intstriplowerr   appendminabsmaxround)r   r   rD   r?   r@   r,   b5s5u5b15s15u15bdsdud
used_totalmtalignr3   rA   rB   rC   r   r+   r   score_market_data   sh   $-






rZ   )
r   typingr   r   r   r   r
   r   rE   rZ   r   r   r   r   <module>   s    &