
    Ij                    .   d dl 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 d dlmZmZ d dlmZ d dlmZmZ d	Zh d
Z ed           G d d                      Z ed           G d d                      Zd$dZd%dZd%dZd&dZd'dZd(d"Zd#S ))    )annotations)Counterdefaultdict)	dataclass)Decimal
ROUND_DOWN)Any)	CostModelTradeCostInput)OrderIntent)TradingViewContexttradingview_blockers"candidate_v76_fee_aware_anti_chase>   BTCETHSOLLINKT)frozenc                  *   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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Zded<    ed          Zded<   dZded<   dZded<   d Z	ded!<   d"Z
d#ed$<   dS )%AntiChaseContextstrcoinsymbolr   current_pricerecent_high
retest_lowsma_fastsma_slowatr_pctmove_15m_pctmove_1h_pctpullback_from_high_pctintbreadth_positive_candidatesrelative_strength_rank
volume_24h
spread_pctexpected_slippage_pctfunding_rate_hourly_pctwallet_equity_usdcunknownmarket_trend_direction0market_breadth_positive_pctFboolrecent_stop_cooldownNzTradingViewContext | Nonetradingview_contextTdata_quality_allowed ztuple[str, ...]data_quality_reasons)__name__
__module____qualname____annotations__r,   r   r.   r0   r1   r2   r4   r3       ]/home/agent/projects/CryptoTradingBot/Crypto_Agent/src/strategies/v76_fee_aware_anti_chase.pyr   r      sX        IIIKKK####$$$$""""$$$$"++++++273<<7777!&&&&&599999!%%%%%,.......r9   r   c                  l    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<    ed	          Zded
<   dS )FillHistoryRowr   r   sider   pxsz
closed_pnlfeer-   minutes_heldN)r5   r6   r7   r8   r   rB   r3   r9   r:   r<   r<   ,   sd         IIIIIIKKKKKKLLL#GCLLL((((((r9   r<   notionalr   pricereturnc                    |dk    rt          d          S | |z                      t          d          t                    S )Nr   r-   
0.00000001rounding)r   quantizer   )rC   rD   s     r:   _quantize_sizerK   7   s=    zzs||u&&w|'<'<z&RRRr9   ctxc                f    t          t          d          | j        t          d          z            S )Nr-   1.20maxr   r   rL   s    r:   _expected_edge_pctrR   =   s'     ws||S[76??:;;;r9   c                f    t          t          d          | j        t          d          z            S )Nz0.80z0.85rO   rQ   s    r:   _stop_distance_pctrT   C   s%    wvgfoo =>>>r9   	list[str]c                   | j                                         }g }|t          vr|                    d           | j        s|                    d           | j        r|                    d           | j        dk    r|                    d           | j        dk    r-| j        t          d          k     r|                    d           |	                    t          | j        d	d
                     | j        t          d          k     r|                    d           | j        dk     r|                    d           | j        dk    r|                    d           | j        t          d          k    p| j        t          d          k    }| j        t          d          k     }|r|r|                    d           | j        dk    r/| j        | j        z  t          d          z
  t          d          z  nt          d          }| j        | j        cxk    o
| j        k    nc o|t          d          k    }| j        | j        k    }|r|s|                    d           t/          |           }t1          |           }	||	t          d          z  k     r|                    d           t3          | j                                      t9          t          d          || j        t          d           z  | j        t          d!          | j        "                    }
||
j        t          d!          z  k     r|                    d#           |S )$Ncoin_not_live_primarydata_qualityr0   downmarket_trend_downr+   50market_breadth_not_supportivelongi  )r=   max_age_seconds25000000weak_liquidity   weak_market_breadth   weak_relative_strengthrN   z3.00z0.45!anti_chase_overextended_no_retestr   1100r-   z0.30no_confirmed_retest_holdz1.40risk_reward_below_1_4x)min_slippage_pct1524)notional_usdexpected_move_pcthalf_spread_pctdepth_penalty_pct
hold_hoursr)   edge_below_4x_realistic_cost) r   upperALLOWED_COINSappendr2   r0   r,   r.   r   extendr   r1   r&   r$   r%   r    r!   r"   r   r   r   r   r   rR   rT   r
   r(   estimater   r'   r)   roundtrip_cost_pct)rL   r   blockersoverextendedno_meaningful_retestreclaim_from_retest_pctretest_heldbelow_recent_highexpected_edgestop_distancecosts              r:   anti_chase_blockersr   G   sZ   8>>DH=  /000# ('''
 0.///
!V+++,,,
!Y..33RU\]aUbUb3b3b7888OO()@v_cdddeee
~
++++()))
&**-...
!A%%0111#gfoo5Z7SY??9ZL5G =, =;<<<hkhvyzhzhz 1CN BgcllRV]^cVdVddd  AH  IL  AM  AM#s|CCCCs|CCCCrH_cjkqcrcrHrK)S_< 4- 42333&s++M&s++M}wv6660111c&?@@@II +NWS\\9!7s||$'$?	
 	
 	
	 	D t.===6777Or9   client_order_idr   OrderIntent | Nonec          
        t          |           rd S t          d          }t          |           }| j        |z  t          d          z  }t	          | j        t          d          z  ||t          d          z  z            }|t          d          k     rd S t	          | j        | j        t          d          z  | j        t          d          |t          d          z  z
  z            }t          || j                  }|dk    rd S t          di dt          d| j        d	| j                                        d
dddddddd|dd dd d|                    t          d          t                    dd d|ddd|d|S )Nz0.15rg   10z0.9975rf   r   strategy_idr   r   r=   buyreduce_onlyF
order_typemarkettifIocsizerD   trigger_price	stop_lossrG   rH   take_profitr   reasonfee_aware_breakout_retestrisk_usdestimated_notional_usdr3   )r   r   rT   r*   minr   r   r   rK   r   STRATEGY_IDr   r   rt   rJ   r   )rL   r   risk_pctstop_distance_pctr   rC   r   r   s           r:   !build_fee_aware_anti_chase_intentr   z   s   3 tvH*3//%075>>AH3)GFOO;XIZ]dej]k]kIk=lmmH'$--tCL#.783D3D"DcFW[bcf[g[gj{  F  GL  M  M  kM  \M  GN  O  OI(C$566Dqyyt   Kzz X^^ U	
 E 8 E T d d $$W\%:%:Z$PPP D ( +*    (x! r9   rowslist[FillHistoryRow]dict[str, Any]c                F   d | D             }t          |          }t          d |D                       }t          d |D                       }t          d |D             t          d                    }t          d | D             t          d                    }t          d |D             t          d                    }t          d |D             t          d                    }t          d	           }	t	          d
 |D                       }
|D ]6}|	|j                                        xx         |j        |j        z
  z  cc<   7|rOt          |          t          |          z  t          d          z  	                    t          d                    nt          d          }g }|dk     r|
                    d           ||z
  dk    r|
                    d           |t          d          k     r|
                    d           |dk     r|
                    d           |
r|
                    d          d         nd\  }}|rOt          |          t          |          z  t          d          z  	                    t          d                    nt          d          }|t          d          k    r|
                    d           |sdnd}|||||||||z
  ||||t          t          |	                                                    ||dk    rdnddS )Nc                (    g | ]}|j         d k    |S )r   r@   .0rows     r:   
<listcomp>z0evaluate_recent_fill_history.<locals>.<listcomp>   s$    999cS^q%8%8c%8%8%8r9   c              3  0   K   | ]}|j         d k    dV  dS r      Nr   r   s     r:   	<genexpr>z/evaluate_recent_fill_history.<locals>.<genexpr>   s.      99Scnq&8&8q&8&8&8&899r9   c              3  0   K   | ]}|j         d k     dV  dS r   r   r   s     r:   r   z/evaluate_recent_fill_history.<locals>.<genexpr>   s.      ;;s(:(:(:(:(:(:;;r9   c              3  $   K   | ]}|j         V  d S Nr   r   s     r:   r   z/evaluate_recent_fill_history.<locals>.<genexpr>   s$      ==sCN======r9   r-   c              3  $   K   | ]}|j         V  d S r   )rA   r   s     r:   r   z/evaluate_recent_fill_history.<locals>.<genexpr>   s$      ..#cg......r9   c              3  d   K   | ]+}|j         t          d           k     |j        |j        z
  V  ,dS )60NrB   r   r@   rA   r   s     r:   r   z/evaluate_recent_fill_history.<locals>.<genexpr>   sB      iisHX[bcg[h[hHhHh#.372HhHhHhHhiir9   c              3  d   K   | ]+}|j         t          d           k    |j        |j        z
  V  ,dS )240Nr   r   s     r:   r   z/evaluate_recent_fill_history.<locals>.<genexpr>   sB      jjcsGW[bch[i[iGiGi#'1GiGiGiGijjr9   c                      t          d          S )Nr-   )r   r3   r9   r:   <lambda>z.evaluate_recent_fill_history.<locals>.<lambda>   s    WS\\ r9   c              3  H   K   | ]}|j                                         V  d S r   )r   rt   r   s     r:   r   z/evaluate_recent_fill_history.<locals>.<genexpr>   s.      88#SX^^%%888888r9   rg   z0.01z0.00   sample_too_smallr   net_pnl_negative_after_fees45win_rate_below_gateshort_holds_negativer   )Nr   35coin_concentration	candidateedge_failurepaper_candidate_onlykeep_live_entries_blocked)statusclosed_countwinslosseswin_rate_pctr@   feesnet_after_feesshort_hold_net_pnllong_hold_net_pnltop_cointop_coin_share_pctper_coin_net_pnlrz   recommendation)lensumr   r   r   r   rt   r@   rA   rJ   rv   most_commondictsorteditems)r   closedr   r   r   total_closed_pnl
total_feesshort_hold_netlong_hold_netby_coincountsr   win_raterz   r   	top_count	top_sharer   s                     r:   evaluate_recent_fill_historyr      sn   99T999Fv;;L99F99999D;;f;;;;;F==f===ws||LL.....==JiifiiikrsvkwkwxxNjjVjjjlstwlxlxyyM)45I5I)J)JG8888888F > >  !!!S^cg%==!!!!eq  G 5 55FPPQXY_Q`Q`aaaw~  @F  xG  xGHHb*+++*$))5666'$---....///6<K&,,Q//22)Hikw  M##gl&;&;;gennLVVW^_eWfWfggg  ~E  FL  ~M  ~MI74==  ,--- (<[[nF$ &*Z7,*' !8!8994:k4I4I00Oj  r9   N)rC   r   rD   r   rE   r   )rL   r   rE   r   )rL   r   rE   rU   )rL   r   r   r   rE   r   )r   r   rE   r   )
__future__r   collectionsr   r   dataclassesr   decimalr   r   typingr	   src.execution.cost_modelr
   r   src.execution.order_intentr    src.research.tradingview_contextr   r   r   ru   r   r<   rK   rR   rT   r   r   r   r3   r9   r:   <module>r      s   " " " " " " , , , , , , , , ! ! ! ! ! ! ' ' ' ' ' ' ' '       > > > > > > > > 2 2 2 2 2 2 U U U U U U U U2--- $/ / / / / / / /6 $) ) ) ) ) ) ) )S S S S< < < <? ? ? ?0 0 0 0f   B, , , , , ,r9   