
    Ѩ\j                    x   d dl mZ d dlZd dlmZmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d	Zd
Z ed          Z ed          Z ed          Z ed          Z e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S ),    )annotationsN)asdict	dataclass)Decimal)Any)OrderIntent)TrendRetestFeatures)external_entry_blockers(research_v78_2_confirmed_range_reversionzv78.2.0z0.07510z0.00015z0.00045z0.02T)frozenc                  @    e Zd ZU ded<   ded<   ded<   ded<   ddZdS )TrueRangeDecisionboolallowedstrregimer   
confidencetuple[str, ...]blockersreturndict[str, Any]c                    t          |           }t          | j                  |d<   t          | j                  |d<   |S )Nr   r   )r   r   r   listr   selfrows     d/home/agent/projects/CryptoTradingBot/Crypto_Agent/src/strategies/confirmed_range_reversion_v78_2.pyto_dictzTrueRangeDecision.to_dict   s9    Tll00Lt}--J
    Nr   r   )__name__
__module____qualname____annotations__r    r    r   r   r      sT         MMMKKK     r    r   c                      e Zd ZU ded<   ded<   ded<   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Z	ded<   ddZ
dS )RangeEntryDecisionr   actionz
str | Nonesider   r   confirmed_band_reentry_to_vwapreasonconfirmed_range_reversion_v2strategy_familyTr   research_onlyFlive_order_allowedmainnet_signed_actionr&   source_attributionr   r   c                    t          |           }t          | j                  |d<   t          | j                  |d<   |S )Nr   r2   )r   r   r   r2   r   s     r   r   zRangeEntryDecision.to_dict/   s;    Tllt}--J$()@$A$A !
r    Nr!   )r"   r#   r$   r%   r,   r.   r/   r0   r1   r2   r   r&   r    r   r(   r(   #   s         KKK2F22229O9999M$$$$$"'''''*,,,,,     r    r(   featuresdict[str, TrendRetestFeatures]r   c                   |                      d          |                      d          g}t          d |D                       rt          ddt          d          d          S d |D             }g }t	          d	 |D             t          d
                    t          t          |                    z  }t	          d |D             t          d
                    t          t          |                    z  }t	          d |D             t          d
                    t          t          |                    z  }t	          d |D             t          d
                    t          t          |                    z  }|t          d          k    st          d |D                       r|                    d           |t          d          k    st          d |D                       r|                    d           |t          d          k    st          d |D                       r|                    d           |t          d          k    s|t          d          k    r|                    d           t          d |D                       r|                    d           t          | |sdnd|st          d          nt          d          t          |                    S )NBTCETHc              3     K   | ]}|d u V  	d S Nr&   .0features     r   	<genexpr>z&classify_true_range.<locals>.<genexpr>8   s&      
2
2w7d?
2
2
2
2
2
2r    Fno_trade1)btc_eth_range_inputs_missingc                    g | ]}||S r:   r&   r;   s     r   
<listcomp>z'classify_true_range.<locals>.<listcomp>:   s    BBBg.AG.A.A.Ar    c              3  $   K   | ]}|j         V  d S r:   )adx_15mr<   r   s     r   r>   z&classify_true_range.<locals>.<genexpr><   s$      //33;//////r    0c              3  >   K   | ]}t          |j                  V  d S r:   )abssma_1h_spread_pctrF   s     r   r>   z&classify_true_range.<locals>.<genexpr>=   -      DDS233DDDDDDr    c              3  >   K   | ]}t          |j                  V  d S r:   )rI   sma_4h_spread_pctrF   s     r   r>   z&classify_true_range.<locals>.<genexpr>>   rK   r    c              3  $   K   | ]}|j         V  d S r:   )bb_width_pctrF   s     r   r>   z&classify_true_range.<locals>.<genexpr>?   s%      99S(999999r    22c              3  F   K   | ]}|j         t          d           k    V  dS )25N)rE   r   rF   s     r   r>   z&classify_true_range.<locals>.<genexpr>@   s/      %R%RcckGDMM&A%R%R%R%R%R%Rr    primary_adx_not_range0.8c              3  `   K   | ])}t          |j                  t          d           k    V  *dS )z1.2N)rI   rJ   r   rF   s     r   r>   z&classify_true_range.<locals>.<genexpr>B   s:      ,i,i]`S1F-G-G'RW..-X,i,i,i,i,i,ir    primary_1h_trend_not_flat1.5c              3  `   K   | ])}t          |j                  t          d           k    V  *dS )2N)rI   rM   r   rF   s     r   r>   z&classify_true_range.<locals>.<genexpr>D   s:      ,g,g[^S1F-G-G'RU,,-V,g,g,g,g,g,gr    primary_4h_trend_not_flat0.204!primary_bollinger_width_not_rangec              3  h   K   | ]-}|j          p |j        d k    p|j        d k    p
|j        d k    V  .dS )r   N)data_quality_allowedvwap_15mbb_lower_15mbb_upper_15mrF   s     r   r>   z&classify_true_range.<locals>.<genexpr>H   sR      

svs''n3<1+<n@PTU@UnY\YimnYn





r    !primary_range_features_unreliableconfirmed_rangez0.9z0.2)getanyr   r   sumlenappendtuple)r4   primaryrowsr   avg_adxavg_1h_spreadavg_4h_spreadavg_bb_widths           r   classify_true_rangerq   6   s   ||E""HLL$7$78G

2
2'
2
2
222 e 
GCLLBcdddBB7BBBDH//$///>>TASASSGDDtDDDgcllSSV]^abf^g^gVhVhhMDDtDDDgcllSSV]^abf^g^gVhVhhM99D99973<<HH7SVW[S\S\K]K]]L#%R%RT%R%R%R"R"R/000wu~~%%,i,idh,i,i,i)i)i%3444wu~~%%,g,gbf,g,g,g)g)g%3444wv&&,*E*E;<<<


z~


 =;<<<\H+\+<+<R\t|  _Q^efk^l^l^l  CJ  KP  CQ  CQ  SX  Ya  Sb  Sb  c  c  cr    r=   r	   r*   r   externaldict[str, Any] | None!tuple[list[str], tuple[str, ...]]c                j    t          | j        ||          \  }}| j        dk    rd |D             }||fS )NHYPEc                    g | ]}|d v|	S )>   crowding_context_missingr&   )r<   values     r   rC   z&_external_blockers.<locals>.<listcomp>P   s#    ]]]e5@\3\3\E3\3\3\r    )r
   coin)r=   r*   rr   r   attributions        r   _external_blockersr|   M   sE    3GL$QQHk|v]]x]]][  r    range_allowedr   c          	     Z   g }d}|s|                     d           | j        | j        k    o| j        | j        k    o| j        | j        k     }| j        | j        k    o| j        | j        k     o| j        | j        k    }|o| j        t          d          k    }|o| j        t          d          k    }|rdn|rdnd }	|	q| j        t          d          k    r|                     d           nC| j        t          d          k    r|                     d           n|                     d	           | j	        t          d
          k    r|                     d           | j
        t          d          k    s| j
        t          d          k    r|                     d           | j        t          d          k    r|                     d           | j        dk    s| j        | j        k    r|                     d           n| j        | j        z   t          d          z  }
| j        dk    r/t          |
| j        z
            | j        z  t          d          z  nt          d          }|t          d          k    r|                     d           |	dk    rE| j        t          d          k     s| j        t          d          k     r|                     d           |	dk    rE| j        t          d          k    s| j        t          d          k    r|                     d           | j        s|                    | j                   |	r)t)          | |	|          \  }}|                    |           t+          |	r|sdnd|	t-          t.                              |                    |           S )!Nr&   true_range_regime_not_confirmed4060longshortlower_band_reentry_missingupper_band_reentry_missingrsi_not_at_range_extremerR   coin_adx_too_trendingr[   5coin_bollinger_width_not_rangez1.8volume_breakout_do_not_fader   !live_l2_quotes_missing_or_crossedrY   1009990.25%live_mid_dislocated_from_signal_closez-1.5z-0.8$higher_timeframe_bearish_blocks_longrW   rT   %higher_timeframe_bullish_blocks_shortpaper_candidater?   )r2   )ri   low_15mra   	close_15mr`   high_15mrb   rsi_15mr   rE   rO   volume_ratiobest_bidbest_askrI   rM   rJ   r_   extenddata_quality_reasonsr|   r(   rj   dictfromkeys)r=   r}   rr   r   r{   
long_shapeshort_shape
long_setupshort_setupr*   live_middislocationexternal_blockerss                r   confirmed_range_reversionr   T   s   H#%K ;9:::G$88  OW=NQXQe=e  Ojqj{  F  O  kOJ"g&::  Qw?PSZSg?g  Qlsl}  AH  AQ  mQK@74== @JB'/WT]]"BKE66%EWWD|?gdmm++OO89999_--OO89999OO6777&&/000wv..'2FQT2U2U8999genn,,56661 0G4D D D;<<<<$w'7773<<G`g`qtu`u`uc(W%6677':KKgV[nn\\  |C  DI  |J  |J((OOCDDDv~~74wvFF'JcfmntfufuJuJu>???wG5FF'JcfmnsftftJtJt?@@@' 64555 +);GT8)T)T&;)***4XX//jZ^`efjfsfst|f}f}`~`~  T_  `  `  `  `r    decisionOrderIntent | Nonec                   |j         dk    s	|j        dvrd S |j        dk    r| j        n| j        }t	          | j        t          d          z  t          d                    }|j        dk    r*| j        t          d          |t          d          z  z
  z  n)| j        t          d          |t          d          z  z   z  }|j        dk    r| j	        |k    s|j        dk    r| j	        |k    rd S t          ||z
            |z  t          d          z  }|d	k    rd S t          |z  }|j        dk    r| j        n| j        }t	          t          | j        t          d
          z  |          }t          ||z
            |t           z  z   |t"          z  z   ||z  t          d          z  z   }	t$          |	z  }
t'          ||
          t          d          z  }||z  }t)          d#i dt*          d| j         dd| j        d|j        dk    rdndddddddd|d|dd d|d| j	        ddt/          j                    j        z   d |j        d!|	|z  d"|S )$Nr   >   r   r   r   r   z0.15r@   r   r   r   rY   z0.999999strategy_idsymbolz
/USDC:USDCrz   r*   buysellreduce_onlyF
order_typelimittifAlosizepricetrigger_price	stop_losstake_profitclient_order_idzpaper-v782-r,   risk_usdestimated_notional_usdr&   )r)   r*   r   r   maxatr_pctr   r   r   r`   rI   MAX_NOTIONAL_USDsell_impact_1k_pctbuy_impact_1k_pctMIN_EXIT_SLIPPAGE_PCT
spread_pctMAKER_FEE_RATETAKER_FEE_RATERISK_BUDGET_USDminr   STRATEGY_IDrz   uuiduuid4hexr,   )r=   r   entry
buffer_pctstopstop_pctmax_size_by_notionalexit_impactexit_slippage_pctall_in_risk_per_unitmax_size_by_riskr   notionals                r   build_maker_intentr   ~   s6   +++x}DU/U/Ut ( 7 7GW=MEW_wv6HHJMU]^dMdMd7?gcllZ'%..-HHIIjqjz  F  GJ  K  K  NX  [b  ch  [i  [i  Ni  i  kjDG$4$=$=8=T[C[C[`g`pty`y`yt54<  5(75>>9H1}}t+e3080G0G',,WMfK173EPS3TVabbut|,,u~/EE~H]]`dgx`x  |C  DI  |J  |J  aJ  J&)==#%5669L9LLDe|H   K,**** \\ mv--UU6	
 E 7 E T e d $ $$ &
(888  &,,   (x! r    )r4   r5   r   r   )r=   r	   r*   r   rr   rs   r   rt   )r=   r	   r}   r   rr   rs   r   r(   )r=   r	   r   r(   r   r   )
__future__r   r   dataclassesr   r   decimalr   typingr   src.execution.order_intentr    src.market.trend_retest_featuresr	   &src.strategies.v78_research_archetypesr
   r   STRATEGY_VERSIONr   r   r   r   r   r   r(   rq   r|   r   r   r&   r    r   <module>r      s   " " " " " "  ) ) ) ) ) ) ) )             2 2 2 2 2 2 @ @ @ @ @ @ J J J J J J8 ''""74== ####  $
 
 
 
 
 
 
 
 $       $c c c c.! ! ! !'` '` '` '`T# # # # # #r    