
    \qjv"                       U d Z ddlmZ ddlmZ ddlmZ  ee      Zde	d<    e
h d      Zde	d	<   d8d
Zddddddddddd
Zde	d<   dddddddZde	d<   d9d:d!Zd"Zd#Zd$Zd%Z e
h eeeed&d'd(d)d*      Zde	d+<   d,Zd;d-Zed.	 	 	 	 	 	 	 	 	 d<d/Zg d0Zd1e	d2<   d=d3Zd4d d5d6	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d>d7Zy )?z@Shared helpers for stock-only live monitoring vs IBKR positions.    )annotations)Any))FUND_WEIGHT_TABLE_STOCK_VOL_EDGE_MA_SLOPEdict[str, float]STOCK_ONLY_WEIGHTS>   tsmomvol_edge
equity_diptactical_awma_slope_inverseqs_actionable_etfzfrozenset[str]TODAY_TRADES_CORE_SLEEVESc                 x   t         j                         D  ci c]   \  } }t        |      dkD  s| t        |      " }} }t        |j	                               }|dkD  r'|j                         D  ci c]  \  } }| ||z   c}} n|}t
        D  ci c]  } | |v r||    dkD  r| ||     c} S c c}} w c c}} w c c} w )z
    Core live-book weights at the same absolute levels as the full stock-only
    table after renormalization (so VOO/SH/SVIX notionals match chat tickets).
    Do not renormalize again after this subset.
    r   )r   itemsfloatsumvaluesr   )kvfullwsumrenorms        9/opt/rentech/trading_bot/RenTech/live/stock_book_utils.pytoday_trades_core_weightsr      s     %7$<$<$>ODAq%(Q,AuQxKODOt{{}D7;axdjjl3daaTk3TF +;6!9q= 	
6!9  P3s   B+B+1B1B7zTactical All WeatherzEquity Dip (CM SP100)zVolatility Edge ETNzQS Actionable-4 (SPY)zMA Slope Top-10zJohansen ETF TripletszTSMOM / Managed FutureszMA Slope Inverse (SH)zRide Rockets 50/50zMA Slope Intraday)
r   r
   r	   r   ma_slope_topnjohansen_etfr   r   ride_rocketsma_slope_intradayzdict[str, str]STOCK_SLEEVE_LABELSzMacro ETF rotation (VOO/TLT/IEF/GLD/DBC). Each sleeve only stays on if price is above its SMA and has positive momentum; otherwise that sleeve sits in cash.u   CrackingMarkets-style SP100 dips: after a ≥3% down day with SMA200 up and high ATR%, place a DAY limit at close − 0.9×ATR. Exit on profit (+0.5×ATR), close above prior high, or after >10 trading days. No hard stop. Live sizing ≈ sleeve ÷ 10 names.zVolatility risk-premium sleeve in short-vol ETNs (usually SVIX). Sized from VIX vs realized vol / term structure; can flip toward long-vol (VIXY) when the edge flips.zTime-series momentum / managed futures across SPY, EFA, EEM, TLT, IEF, GLD, DBC, UUP. Blends 3/6/12-month trends, vol-scales each leg, and can go long or short. Low equity beta.zCrash hedge: buy SH (inverse S&P) when SPY looks bearish on dual momentum / SMA200 regime rules. Flat (cash) when the regime is clear.u<  Four QuantifiedStrategies-style SPY calendar/overnight rules (equal-weight when active): Turnaround Tuesday, overnight after 3 down days, first day of the month, overnight at a 10-day low. When on, it adds long VOO (our SPY proxy); when off, cash. PnL is folded into VOO/Tactical marks — it has no separate ticker.r   r
   r	   r   r   r   STOCK_SLEEVE_BLURBSNc                \   | xs i } d}g }|D ]  }|t         vr|t        j                  ||      t        j                  |d      d}|| v rt	        t        | |         d      |d<   t               j                  |      }|t	        t        |      d      |d<   |j                  |        |S )z3Ordered sleeve definitions for the Today Trades UI.r     )sleevelabelblurb   
budget_usd   weight)r   r   getr!   roundr   r   append)budgetsorderoutkeyrowws         r   today_trades_strategy_guider4   V   s    mGE !#C //(,,S#6(,,S"5

 '> %eGCL&91 =C%'++C0=!%(A.CM

3 J    )SPYTLTIEFGLDDBC)r6   EFAEEMr7   r8   r9   r:   UUP)SVIXVIXYSVXY)SHVOOIVVQQQIWMDIACORE_BOOK_ETFS
   c                    t               }| j                         D ]G  \  }}t        |      j                         }|t        v r(t        |      dkD  s7|j                  |       I |S )zALong stock names that look like dip holdings (exclude core ETFs).g      I@)setr   strupperrG   r   add)ib_mvr0   symmvss        r   dip_open_symbols_from_ib_mvrR      s[    EC;;= RHNN9tGGAJ Jr5   )max_holdingsc               L    t        | ||      }|t        t        |      d      z  S N   )sleeve_budget_usdmaxint)fund_navfund_weight
fund_scalerS   r$   s        r   dip_per_name_budget_usdr]      s)     xjAFCL)1---r5   )))GDXJIAUSILprecious_metals_junior))r9   UNGUSOcommodity_gold_gas_oil))XLBXLIXLPsector_cyclical_defensive))COPrc   XOPenergy_complex))r:   PDBCrc   commodity_broad))EWAEWCIGEchan_classicz&list[tuple[tuple[str, str, str], str]]JOHANSEN_TRIPLETSc                H    t        |       t        |      z  t        |      z  S N)r   )rZ   r[   r\   s      r   rW   rW      s     ?U;//%
2CCCr5   g      ?F)r\   metaallow_shortc                   |xs i }g }t        |||      }	t        |j                               }
|j                         D ci c]  \  }}t	        |      dkD  s|| }}}t        |j                         d       D ]  \  }}t	        |      dk  r|	t	        |      z  }|j                  |d      }|dkD  r%||dz  k  rd}d	}nd
}d}|dk(  rdnd d| d|dd}n>|r;| }||dz  kD  rd}d}d| dt	        |      dd}nd
}d}d| dt	        |      dd}n|j                  ||| |||t        |dkD  r|n| d      t        |d      t        |	d      d|d        t        t              t        t              z  t        t              z  t        t              z  }|j                         D ]@  \  }}||
v r||v s| dv s|j                  dd| |d| d|  dd t        |d      i|d       B |S c c}}w )!z
    Compare model targets to IB stock market values.

    *targets* are fractions of sleeve capital (negative = short when allow_short).
    2   c                     t        | d          S rU   )abs)xs    r   <lambda>z(compare_sleeve_targets.<locals>.<lambda>   s    QqT
 r5   )r1   gư>g        r   g      ?ADD   HOLDP   IncreaseHoldz long z toward z.1%z
 of sleeve   zIncrease short zHold short z (~z of sleeve)r'   )target_weighttarget_notional_usdib_market_value_usdrW   )priorityactionbooksymbolsummarydetail)r   r   r
   rH   REMOVEzFlat u    — not in current z modelr   )rW   rJ   keysr   rz   sortedr+   r-   r,   MACRO_TICKERSTSMOM_TICKERSVOL_EDGE_TICKERSMA_INVERSE_TICKERS)r   targetsrN   rZ   r[   r\   ru   rv   actions
sleeve_navuniverserQ   rP   heldrO   r3   
target_usdhaveactprir   want_mv	book_etfss                          r   compare_sleeve_targetsr      sc     :2D$&G"8[*EJ7<<>"H${{}=eaB"ArE=D=.BC (
Qq6D=#a&(
xxS!q5j3&&'*e|@se8TUVYSZZdeG!kGgm#+C5QJO'uCAs|;G"%&+0q1u:+WX+Y+0q>).z1)=	
 	
3(
T M"S%77#>N:OORUVhRiiI::< R(?)t'VVNN "& !!&se+?vVL4eBlKdK		 Nw >s   G5G5)returnr   rt   )r.   zdict[str, float] | Noner   list[dict[str, Any]])rN   r   r   zset[str])
rZ   r   r[   r   r\   r   rS   rY   r   r   )rZ   r   r[   r   r\   r   r   r   )r   rK   r   r   rN   r   rZ   r   r[   r   r\   r   ru   zdict[str, Any] | Nonerv   boolr   r   )__doc__
__future__r   typingr   /RenTech.strategy_stack.combine_best_ideas_stackr   dictr   __annotations__	frozensetr   r   r   r!   r4   r   r   r   r   rG   DEFAULT_DIP_MAX_HOLDINGSrR   r]   rr   rW   r    r5   r   <module>r      s   F "  e'+,U'V $ V -6	- > 	" *)%0&+&/(,' ^  	Z	W
	^	f	>	</' ^ >8 4H+   "+
	
	
 

 
	

 	
 	
 	
 	
 	
"   	" 1... .
 . .= 9 D "&O
O O 	O
 O O O  O O Or5   