
    /L_jr                        d Z ddlZddlmZ  ee      j
                  dz  Zddddd	d
dddddddZdZdZ	dZ
d Zd!dZd!dZd"dededefdZdedefdZd!dZedk(  r+ ed e               ed e               ed  e              yy)#z
Config centralizzata per la strategia del RETTANGOLO.
Legge lista asset da rettangolo_assets.csv (modificabile a mano, no riavvio per il monitor).
    N)Pathzrettangolo_assets.csv15153060120180240360720D)1m5m15m30m1H2H3H4H6H12H1Dr   g     p@   
   c                 6    | r| dk  ryt         t        |       z  S )zCalcola la qty massima che mantiene l'order value entro ORDER_VALUE_USD.
    Return float. NON side-specific (LONG e SHORT usano la stessa size).r   g        )ORDER_VALUE_USDfloat)current_prices    2/opt/charter-live/live_deploy/rettangolo_config.pymax_qty_for_order_valuer!   !   s!     MQ.U=111    c                    t         j                         sg S g }	 t        t         dd      5 }t        j                  |      }|D ]j  }|j                  d      xs dj                         j                         }|j                  d      xs dj                         }|r|s]t        j                  |d      }|j                  d      xs dj                         j                         d	v }	| r|	s|j                  d
      xs dj                         j                         xs d}
|r|
|j                         k7  r|j                  d      xs dj                         j                         xs d}|dvrd}|j                  ||||	|
||j                  d      xs dj                         d       m 	 ddd       |S # 1 sw Y   |S xY w# t        $ r g cY S w xY w)a  Ritorna lista di dict {symbol, timeframe, tf_min, enabled, strategy, notes}.
    Se only_enabled=True, filtra solo gli asset con enabled=true.
    Se strategy != None, filtra solo gli asset con quella strategy (es. 'rettangolo', 'vptr3').
    Se il CSV non esiste o e' vuoto, ritorna lista vuota (mai eccezione).
    Backward-compat: se colonna 'strategy' manca nel CSV, default 'rettangolo'.rzutf-8)encodingsymbol 	timeframer   enabled)truer   yesystrategy
rettangolopattern_moderelaxed)strictr0   notes)r&   r(   tf_minr)   r-   r/   r2   N)
ASSETS_CSVexistsopencsv
DictReadergetstripupper	TF_TO_MINlowerappend	Exception)only_enabledr-   outfreaderrowr&   tf_txtr3   r)   stratr/   s               r    load_assetsrG   )   s    	
C*cG4 	^^A&F ''(+1r88:@@B''+.4";;=V"vt4779-3::<BBDHaa,<CCEKKM]Q])9 9 !$ 7 D9KKMSSUbYb'<<#,L

$!'$& %$0!ggg.4";;= %	> J?	> J  	s/   G
 FF=3G
 =GG
 G
 
GGc                 P    t        | |      D ci c]  }|d   |d    c}S c c}w )zMShortcut: ritorna dict {symbol: tf_min} per SLTP engine (TUTTE le strategie).r@   r-   r&   r3   rG   r@   r-   as      r    load_symbol_tfrM   U   s+    .9|^f.ghAhK8$hhhs   #r&   defaultreturnc                     | s|S | j                         j                         }t               D ]  }|d   |k(  s|d   c S  |S )a  Ritorna la strategia registrata per il symbol in rettangolo_assets.csv.
    Se il symbol non e' nel CSV, ritorna `default` (default: 'rettangolo').
    Usata dal webhook per validare che Pine Alert strategy matchi con quella registrata.
    Esempi:
      get_strategy_for_symbol('BTCUSDT') -> 'rettangolo' (se BTC e' in CSV con strategy=rettangolo)
      get_strategy_for_symbol('DASHUSDT') -> 'vptr3' (se DASH e' in CSV con strategy=vptr3)
      get_strategy_for_symbol('XYZUSDT')   -> 'rettangolo' (default, XYZ non e' in CSV)
    r&   r-   r:   r;   rG   )r&   rN   symassets       r    get_strategy_for_symbolrT   Z   sO     
,,.


 C %?c!$$% Nr"   c                 x    | sy| j                         j                         }t               D ]  }|d   |k(  s y y)zOTrue se il symbol e' registrato in rettangolo_assets.csv (qualsiasi strategia).Fr&   TrQ   )r&   rR   rS   s      r    is_symbol_in_csvrV   l   sA    
,,.


 C ?c! r"   c                 H    t        | |      D cg c]  }|d   	 c}S c c}w )zJShortcut: ritorna lista di symbol strings (TUTTE le strategie di default).rI   r&   rJ   rK   s      r    load_symbolsrX   w   s"    !,,QY!Z[AAhK[[[s   __main__zAssets enabled:zSymbols:z
SYMBOL_TF:)TN)r.   )__doc__r7   pathlibr   __file__parentr4   r<   r   LEVERAGEMAX_OPEN_POSITIONSr!   rG   rM   strrT   boolrV   rX   __name__print r"   r    <module>re      s     (^""%<<
 Sd
e5
Ss	   2)Xi
C #  $S T \
 z	
[]+	*ln%	,()	 r"   