
    j                       d dl mZ d dlZd dlZd dlmZmZ d dlmZmZ d dl	m
Z
 d dlmZmZ d dlmZmZmZ  ed	           G d
 d                      Z ed	           G d d                      Z ed	           G d d                      Zd<dZd=dZd>d?dZd>d@d!ZdAd"ZdBd$ZdCd*Zddd+d,dd-dDd3ZdEd6ZdFd;ZdS )G    )annotationsN)asdict	dataclass)datetimetimezone)Path)meanpstdev)AnyIterableMappingT)frozenc                  V    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded<   d	S )
ChartIndicatorsfloatsma_fastsma_slowrsi_14atr_14bollinger_upperbollinger_lowervwapN__name__
__module____qualname____annotations__     market_context.pyr   r      sU         OOOOOOMMMMMMKKKKKr   r   c                  r    e Zd ZU ded<   ded<   ded<   ded<   ded<   d	ed
<   d	ed<   ded<   ded<   ddZdS )MarketContextSnapshotr   tsstrcoinsource	timeframer   
indicatorsfloat | Noneopen_interest_usdfunding_ratetuple[str, ...]tagsr   reliability_scorereturndict[str, Any]c                   t          |           }d|d<   | j                            t          j                                                  |d<   | j                                        |d<   t          | j	                  |d<   |S )Nmarket_context
event_typer#   r%   r-   )
r   r#   
astimezoner   utc	isoformatr%   upperlistr-   )selfevents     r    as_eventzMarketContextSnapshot.as_event#   si    t.lg((66@@BBd	))fTYfr   N)r/   r0   )r   r   r   r   r;   r   r   r    r"   r"      s         LLLIIIKKKNNN####     r   r"   c                  8    e Zd ZU ded<   ded<   ded<   ded<   dS )	SourceReliabilityr$   r&   intsample_sizer   hit_rateavg_return_pctNr   r   r   r    r=   r=   ,   s<         KKKOOOr   r=   candleMapping[str, Any]keyr$   r/   r   c                ,    t          | |                   S )N)r   )rB   rD   s     r    _getrF   4   s    r   valueslist[float]nr>   c                t    | sdS | t          |t          |                      d          }t          |          S )N        )minlenr	   )rG   rI   windows      r    _smarO   8   s>     sSCKK((())*F<<r      closesc                    t                     dk     rdS  fdt          dt                               D             }|t          |t          |                     d          }d |D             }d |D             }|rt          |          nd}|rt          |          nd}|dk    r
|dk    rd	ndS ||z  }d	d	d
|z   z  z
  S )N   g      I@c                8    g | ]}|         |d z
           z
  S )   r   ).0irQ   s     r    
<listcomp>z_rsi.<locals>.<listcomp>B   s*    GGGAfQi&Q-'GGGr   rU   c                .    g | ]}t          |d           S rK   )maxrV   xs     r    rX   z_rsi.<locals>.<listcomp>D   s     )))QSC[[)))r   c                H    g | ]}t          t          |d                      S rZ   )absrL   r\   s     r    rX   z_rsi.<locals>.<listcomp>E   s(    ///1c#a++///r   rK   r   g      Y@      ?)rM   rangerL   r	   )	rQ   rI   deltasrN   gainslossesavg_gainavg_lossrss	   `        r    _rsirh   ?   s    
6{{QtGGGGq#f++1F1FGGGFSCKK((())*F))&)))E/////F#,tE{{{H%.tF|||3H1}} 1uu$.	H	BES2X&''r   candleslist[dict[str, Any]]c           	        | sdS g }d }| D ]}t          |d          }t          |d          }t          |d          }|||z
  }n4t          ||z
  t          ||z
            t          ||z
                      }|                    |           |}t	          |t          |t          |                     d                    S )NrK   highlowclose)rF   r[   r_   appendr	   rL   rM   )	ri   rI   true_ranges
prev_closecrl   rm   rn   trs	            r    _atrrt   N   s     sKJ 	 	Av1ennQ  BBTCZTJ%6!7!7S:=M9N9NOOB2

SC$4$4555667888r   c           
     $   d}d}| D ]}t          |d          }t          |d          }t          |d          }t          |                    d|                    dd                              }||z   |z   dz  }|||z  z  }||z  }|r||z  ndS )NrK   rl   rm   rn   volumevolg      @)rF   r   get)	ri   numdenrr   rl   rm   rn   rv   typicals	            r    _vwapr|   `   s    
C
C  Av1ennQ  quuXquuUC'8'899::#:%,wv$399$r   Iterable[dict[str, Any]]c                   t          |           }d |D             }t          |d          }t          |d          }|t          dt          |                     d          pdg}t	          |          }t          |          dk    rt          |          nd}t          t          |d          t          |d          t          t          |          d          t          t          |          d          t          |d|z  z   d          t          |d|z  z
  d          t          t          |          d          	          S )
Nc                .    g | ]}t          |d           S )rn   )rF   )rV   rr   s     r    rX   z,compute_chart_indicators.<locals>.<listcomp>p   s"    ///1d1g///r   	         rK   rU      rS   )r   r   r   r   r   r   r   )r8   rO   rL   rM   r	   r
   r   roundrh   rt   r|   )ri   seriesrQ   r   r   	bb_windowbb_midbb_stds           r    compute_chart_indicatorsr   n   s)   ']]F/////FFAHFBHBF,,,--.73%I)__F"%i..1"4"4VI#Fx##x##T&\\1%%T&\\1%%fq6z1155fq6z11555==!$$   r   r(   r+   r)   r*   r,   c                   g }| j         | j        k    r|                    d           n%| j         | j        k     r|                    d           | j        dk    r|                    d           n | j        dk    r|                    d           |7|dk    r|                    d           n|d	k     r|                    d
           |r|dk    r|                    d           t	          |          S )Ntrend_up
trend_downF   rsi_overbought   rsi_oversoldgMb@?funding_crowded_longgMb@funding_crowded_shortr   oi_available)r   r   ro   r   tuple)r(   r+   r*   r-   s       r    _tagsr      s
   DZ000J		z2	2	2L!!!B$%%%%		b	 	 N###&  KK.////G##KK/000 $.22N###;;r   hyperliquid15m)r*   r+   r&   r'   r#   r%   r&   r'   r#   datetime | Nonec                D   t          |          }t          |||          }d}	|dk    r|	dz  }	||	dz  }	||	dz  }	t          d|	          }	t          |pt	          j        t          j                  |                                 ||||||t          |	d          	  	        S )	Ng?r   g?g?g?r`      )	r#   r%   r&   r'   r(   r*   r+   r-   r.   )
r   r   rL   r"   r   nowr   r5   r7   r   )
r%   ri   r*   r+   r&   r'   r#   r(   r-   reliabilitys
             r    build_market_context_snapshotr      s     *'22J\+<==DKt$ttc;''K +hl++ZZ\\+!Q//
 
 
 
r   observationsdict[str, SourceReliability]c                   i }| D ]L}|                     t          |                    dd                    g                               |           Mi }|                                D ]\  }}d}g }|D ]~}t          |                    dd                    }	t          |                    dd                    }
|
dk    r|	dk    p|
dk    o|	dk     }||rd	ndz  }|                    |	           t          |t          |          |r t          |t          |          z  d
          nd|rt          t          |          d          nd          ||<   |S )Nr&   unknownr   actual_return_pctrK   predicted_directionupdownrU   r   r   )r&   r?   r@   rA   )

setdefaultr$   rx   ro   itemsr   r=   rM   r   r	   )r   groupedobsscoresr&   rowshitsreturnsrowactual	predictedhits               r    score_signal_reliabilityr      s   /1G N N3swwx;;<<bAAHHMMMM+-F 
 
 	# 	#C377#6<<==FCGG$94@@AAI$3!\f9L9[QWZ[Q[COAA!#DNN6""""*D		37@U4#d))+Q///S6=F5g2223	
 
 
v Mr   path
str | Pathsnapshotr0   c                ^   t          |                                           }|j                            dd           |                                }|                    dd          5 }|                    t          j        |d          dz              d d d            n# 1 swxY w Y   |S )NT)parentsexist_okazutf-8)encoding)	sort_keys
)	r   
expanduserparentmkdirr;   openwritejsondumps)r   r   targetr:   fs        r    append_market_context_eventr      s    $ZZ""$$F
Mt444E	S7	+	+ :q	
5D111D8999: : : : : : : : : : : : : : :Ls   )-B""B&)B&)rB   rC   rD   r$   r/   r   )rG   rH   rI   r>   r/   r   )rP   )rQ   rH   rI   r>   r/   r   )ri   rj   rI   r>   r/   r   )ri   rj   r/   r   )ri   r}   r/   r   )r(   r   r+   r)   r*   r)   r/   r,   )r%   r$   ri   r}   r*   r)   r+   r)   r&   r$   r'   r$   r#   r   r/   r"   )r   r}   r/   r   )r   r   r   r"   r/   r0   )
__future__r   r   mathdataclassesr   r   r   r   pathlibr   
statisticsr	   r
   typingr   r   r   r   r"   r=   rF   rO   rh   rt   r|   r   r   r   r   r   r   r   r    <module>r      s_   " " " " " "   ) ) ) ) ) ) ) ) ' ' ' ' ' ' ' '       # # # # # # # # ) ) ) ) ) ) ) ) ) ) $        $       ( $             ( ( ( ( (9 9 9 9 9$% % % %   &   0 '+!%     B   .     r   