
    ^j                     2   % S r SSKJr  SSKrSSKrSSKJr  SSK	J
r
  SSSSSSSSSSSSSSS	.r\\\4   \S
'   SSSSSSSSSSSSSSS	.r\\\4   \S'   SS\R$                  S\S\R&                  4S jjrS\S\S\4S jr   SS\S\S\S\S\S\S\4S jjrg)u  
Trade Planner — расчёт параметров сделки на основе ATR.

Рассчитывает:
    - Точка входа (entry)
    - Стоп-лосс (SL)
    - Тейк-профит (TP) — базовый и лесенка
    - Лесенка: 3 цели с частичным закрытием

Использует ATR(14) и мультипликаторы из config.py:
    SL = entry ± 1.5 × ATR
    TP = entry ± 3.0 × ATR
    )OptionalN)get_target_config)load_dataframe
   i     )ASTRSBERVTBRROSNNVTKPHORSNGSPPLZLX5MTSSLKOHGAZPMOEXNSVZMOEX_LOT_SIZES{Gz?g-C6?      ?MOEX_PRICE_STEPSdfperiodreturnc                    U S   R                  [        5      U S   R                  [        5      U S   R                  [        5      pCnUR                  S5      n[        R                  " X#-
  R                  5       X%-
  R                  5       X5-
  R                  5       /SS9R                  SS9nUR                  US9R                  5       $ )u&   Расчёт ATR (Average True Range).HighLowCloser   )axis)window)	astypefloatshiftpdconcatabsmaxrollingmean)r   r   highlowclose
prev_closetrs          models/trade_planner.pycalculate_atrr2   '   s    &z((/E1A1A%1H"W+J\J\]bJcuDQJ				!		  	
 ss{	 
 ::V:$))++    pricestepc                 "    [        X-  5      U-  $ )u,   Округление до шага цены.)round)r4   r5   s     r1   round_to_stepr8   3   s    %%r3   ticker	direction
confidencecapitalrisk_percentlimitc                 `   [        U SUS9nUb  [        U5      S:  a  SSU  30$ S H  n[        R                  " Xg   SS9Xg'   M     [        R                  " US	   SS9US	'   UR                  S
   n[        US   5      n	[        U5      n
[        U
R                  S
   5      n[        R                  " U5      (       d  US::  a  SSU S30$ [        U 5      nUR                  SS5      nUR                  SS5      n[        R                  U S5      n[        R                  U S5      nUS:X  a  U	nUX-  -
  nUX-  -   nOU	nUX-  -   nUX-  -
  n[        UU5      n[        UU5      n[        UU5      nUS:X  a  UU-
  nUU-
  nO
UU-
  nUU-
  nUS:  a  [        UU-  S5      OSnX4-  S-  nUS:  a  UU-  OSn[        [!        UU-  5      S5      nUS:  a  UU-  nUU-  nUU::  a  OUS-  nUS:  a  M  US:  a  UU-  OUn[        US5      nUU-  nUU-  nUU-  nUS:  a  UU-  S-  OSnUS:X  a=  [        UX-  S-  -   U5      n [        UX-  S-  -   U5      n![        UX-  S-  -   U5      n"O<[        UX-  S-  -
  U5      n [        UX-  S-  -
  U5      n![        UX-  S-  -
  U5      n"S[        U 5      SSUS:  a  [        US-  U-  S5      OSS.S[        U!5      SSUS:  a  [        US-  U-  S5      OSS.S[        U"5      SSUS:  a  [        US-  U-  S5      OSS./n#0 SU _S U_S![        US5      _S"[        U	5      _S#[        US$5      _S%[        X-  S-  S5      _S&[        U5      _S'[        U5      _S([        U5      _S)[        UU-  S-  S5      _S*[        UU-  S-  S5      _S+U_S,UU[        US5      UUU[        US5      [        US5      [        US5      S-.	_S.U#_S/[!        US0   5      _S1[#        UR                  S2S35      5      _S4[#        UR                  S5S35      5      _$ )6u  
Полный расчёт параметров сделки.

Args:
    ticker: тикер (напр. 'SNGSP')
    direction: 'BUY' или 'SELL'
    confidence: уверенность сигнала (0..1)
    capital: бюджет в рублях
    risk_percent: риск на сделку, % от капитала
    limit: сколько свечей загрузить для ATR

Returns:
    dict с полным планом
H1)r>      erroru-   Недостаточно данных для )Openr   r   r    coerce)errorsVolumer    r   zATR = u+   , невозможно рассчитатьatr_mult_slg      ?atr_mult_tpg      @r   r   BUY   d   g      ?r      )levelr4   size_pctcumulative_pctrr<      (   r9   r:   r;   current_priceatr   atr_pctentry	stop_losstake_profitsl_pcttp_pctrr_ratioposition)	r<   r=   max_risk_rublot_sizelotssharesposition_costactual_riskrisk_pct_of_capitalladderdata_timestamp	timestamp	data_dateDate 	data_timeTime)r   lenr&   
to_numericilocr$   r2   npisnanr   getr   r   r8   r7   r)   intstr)$r9   r:   r;   r<   r=   r>   r   collastrU   
atr_seriesrV   _tcfgrH   rI   ra   r5   rY   sltprisk_rub
reward_rubr^   r`   
shares_rawrb   test_shares	test_costrc   rd   re   rf   tp1tp2tp3rg   s$                                       r1   
plan_trader   8   sM   . 
E	2B	zSWr\HQRR/--9 0==Hh?BxL772;D$w-(M r"J

#
$C	xx}}q6#&QRSS f%E))M3/K))M3/K!!&!,H-D ES&&S&&S&&S&&%&E	r4	 B	r4	 B E2:%Z
:RZ
2:Q,uZ(*A.AH )C/L,4qL(aJs:()1-D (Xo%'		 ( !%qTH_hFtQ<DH_FUNM8#K9@1+/#5! EEC$5$;;TBEC$5$;;TBEC$5$;;TBEC$5$;;TBEC$5$;;TBEC$5$;;TB eCjbB8@1uZ#%0!4!	MeCjbB8@1uZ#%0!4!	MeCjbC8@1uZ#%0!4!	MF & Y  	eJ*  	}-	 
 	uS!}  	5,s2A6  	u  	U2Y  	uRy  	%5(3.2  	%
U*S0!4  	H  	(!,2 "=!4 a0#()<a#@

 6 	&7 : 	#d;/0; < 	S&"-.= > 	S&"-.?   r3   )   )g     j@r   i  )__doc__typingr   numpyrr   pandasr&   configr   data.loaderr   r   dictrv   ru   __annotations__r   r$   	DataFrameSeriesr2   r8   r    r3   r1   <module>r      s#      $ & D"q2q
RB	"S#X  $tS
tS$$	& $sEz" 	,bll 	,C 	, 	,& &e & & QQQ Q 	Q
 Q Q 
Qr3   