
    iOj6                        d dl Z d dlZd dlZd dlZd dlmZ d dl	m
Z
 d dlZd dlZd dlmZmZmZmZmZmZmZ d dlZ ej        eddd           e j                            e j                            e j                            e                    d          Zd	 Zd
 Zd Z d Z!d Z" e edd           edd           edd                    d             Z# e 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          d
  
        d              Z$ e edd           edd!           edd          d"          d#             Z%dS )$    N)make_subplots)dcchtmlInputOutputStatecallback	no_updatez/graficou   Gráfica   )pathnameorderdatac                      t          j         t          j                            t          d                    } t          d | D                       S )Nzhistorico_*.csvc                     g | ]I}t           j                            |                              d d                              dd          JS )
historico_ .csv)osr   basenamereplace).0fs     '/var/www/html/bolsaweb/pages/grafico.py
<listcomp>z#listar_empresas.<locals>.<listcomp>   sJ    cccYZ27##A&&..|R@@HHQSTTccc    )globr   r   joinDATA_DIRsorted)csvss    r   listar_empresasr"      s@    9RW\\(,=>>??Dcc^bcccdddr   c                    t           j                            t          d|  d          }t	          j        |dddgd          }t	          j        |j        d          |_        ||j                                                 	                                }|j
        D ]!}t	          j        ||         d          ||<   "|S )	Nr   r   r   r      )	index_colskiprowsheadercoerce)errors)r   r   r   r   pdread_csvto_datetimeindexnotna
sort_indexcolumns
to_numeric)empresarutadfcols       r   leer_csvr6      s    7<<"<w"<"<"<==D	TQ!Q	B	B	BB~bhx888BH	BHNN		(	(	*	*Bz : :-39993Ir   c                    d| j         v rdnd}| |                                         }|                    dd                                          | d<   |                    dd                                          | d<   |                    d	d                                          | d
<   |                    d	d                                          }| d
         d|z  z   | d<   | d
         d|z  z
  | d<   |                                }|                    d                              dd                                          }|                    d                               dd                                          }ddd||                    dt          j
                  z  z   z  z
  | d<   d| j         v r| d                             dt          j
                  }|                    dd                                          }|                    dd                                          }	||	z  }
||z  |
                    dt          j
                  z  | d<   | |fS )Nz	Adj CloseClose2   r   )min_periodsSMA50   SMA200   SMA20r$   Boll_UpBoll_Lowr   )lower   F)comadjust)upperd   RSIVolume   
Ind_Custom)r0   dropnarollingmeanstddiffclipewmr   npnan)r4   r5   sstd20deltagainlossvolsma14v_med14denominadors              r   calcular_indicadoresr^       s(   $
22++C
3A))BA)..3355BwK99Sa9005577BxL))BA)..3355BwKIIbaI((,,..EwK!e)+ByM[1u9,BzNFFHHE::A:""r%"88==??DZZaZ   %%"U%;;@@BBDcQQ(?(?!??@@BuI2:l**1bf55iii3388::kk""k55::<<goG{':':1bf'E'EE<s7Nr   c                 6   t          j        |           }	 |                    d          }|j        s t	          |d         j        d                   S n# t          $ r Y nw xY w	 |j        j        }|r|dk    rt	          |          S n# t          $ r Y nw xY wd S )N2d)periodr8   r   )	yfTickerhistoryemptyfloatiloc	Exception	fast_info
last_price)
ticker_symtickerr4   ps       r   precio_vivoro   :   s    Yz""F^^4^((x 	/G)"-...	/   ' 	Q88O   4s#   <A 
A! A!%"B	 	
BBc                     t           j                                        t          j        d          z
                      d          } t           j                                                            d          }t          j        dt          j        dt          j        t          j
        d          d          g	          t          j        d
t          j        t          j        d          t          j        dg dd          gd          t          j        t          j        d          t          j        dd|           gd          t          j        t          j        d          t          j        dd|          gd          t          j        t          j        d          t          j        dddddddd d!dd"d#dd$d%dd&d'dd(d)dgg d*dd+d,id+d-i.          gd/          g	          t          j        d0t          j        t          j        d1d2d3d45          t          j        d6d78          g          g	          t          j        d9g d:dd;d<d=i>          t          j        d?g @          gA          S )BN   )monthsz%Y-%m-%dTz	mt-3 mb-2u   Gráfica Técnicaauto)width)	classNamechildrenzg-2 align-items-end mb-3Empresagraf-empresau   Selecciona empresa…F)idoptionsplaceholder	clearable   )mdDesdegraf-iniciodate)ry   typevaluer$   Hastagraf-finIndicadoresgraf-indicadoresz SMA 50sma50labelr   z SMA 200sma200z
 Bollinger	bollingerz
 Fibonacci	fibonacciz RSIrsiz Volumenvolumenu    Índ. Vol.custom)r   r   r   marginRight4px12px)ry   rz   r   inline
inputStyle
labelStyle   zmb-2u   Generar gráficagraf-btnsuccessr   )ry   colorn_clicksgraf-rendimientozms-4 fw-bold fs-5)ry   ru   graf-figura)drawlinedrawopenpath
eraseshape)modeBarButtonsToAdd
scrollZoomheight75vh)ry   configstylegraf-shapes-store)ry   r   )fluidrv   )r*   	Timestamptoday
DateOffsetstrftimedbc	ContainerRowColr   H4Labelr   Dropdownr   	ChecklistButtonSpanGraphStore)
seis_meseshoys     r   layoutr   O   s   ,$$&&a)@)@)@@JJ:VVJ
,




'
'

3
3C=tGk+,,F;;;-    G0Ii  LNBD[glmmm
 	 	 	 	IgIV:FFF
 	 	 	 	IgI&<<<
 	 	 	 	Im$$M%'w??(x@@*{CC*{CC$u==(yAA+AA 211)51)62  
$ %	 	 	 <      D GfJ)j	TUVVVI+7JKKK
 	 	(    I#M#M#M
 
     I$2...q9/ 9 9 9 9r   rx   rz   r   ry   c                 V    t                      }d |D             }|r|d         nd }||fS )Nc                 @    g | ]}|                     d d          |dS )_ r   )r   )r   es     r   r   z#cargar_opciones.<locals>.<listcomp>   s.    MMMq!))C--::MMMr   r   )r"   )r   empresasopcionesdefaults       r   cargar_opcionesr      s?       HMMHMMMH%/hqkk4GWr   r   figurer   rv   r   r   r   r   r   r   r   F)prevent_initial_callc                 B   | st           dddifS 	 t          |           }n&# t          $ r}t           d| ddifcY d }~S d }~ww xY wt          |          \  }}|r||j        |k             }|r||j        |k             }|j        rt           dddifS d|v }	d	|v }
d
|v }dt          |	          z   t          |
          z   }dgdg|dz
  z  z   }|                     dd          g|	rdgng z   |
rdgng z   }t          |dd||d          }|	                    t          j        |j        ||         dt          dd          d          dd           d|v rJ|	                    t          j        |j        |d         dt          ddd !          d"          dd           d#|v rI|	                    t          j        |j        |d$         d%t          d&d          d'          dd           d(|v r|	                    t          j        |j        |d)         d*t          ddd+!          d,d-.          dd           |	                    t          j        |j        |d/         t          ddd+!          d0d,d1d2d34          dd           d5|v r||                                         ||                                         }}||z
  }t          g d6g d7          D ]C\  }}|||z  z
  }|                    |t          |d8d !          |d9z  d:d;|d<d=d>dd?           Dd@dAlm} d@dBlm} dC  |            D             }i ||}||         j        dD         }dE|dFdG}d}| |v r"t-          ||                    }|r|}dH|dFdG}d}|                    |t          |ddI!          d| ddJdd?           |                    dddKL           |dz   }dM| }dN| } ||                                         dOz  }!||                                         dPz  }"|!|z
  |z  d9z  }#|"|z
  |z  d9z  }$||         |z
  |z  d9z  }%|	                    t          j        |j        |%|d0dQt          dRS          dTU                     |	rdVnd }&|	r|	                    t          j        |j        |dW         dWt          dXd          dY          |&d           |                    dZt          dd d8[          |&d\           |                    d]t          d^d d8[          |&d\           |rd nd@d9g}'|                    |&d|'dW_           |rWd`|j        v rN|d`         d9z  }(|	                    t          j        |j        |(dat          dbd          dc          |&d           |
r|	sdVnddnd })|
r[de|j        v rR|	                    t          j        |j        |de         ddfdgh          |)d           |                    |)ddL           t          ddidjdIdkdl          }* |j        ddmdndot          dpdqdrdsdt          t          dodZdudvw          t          dxdVy          |pg dzd{| t          dMdsd||#|$gd}d~d0dddt          dS          t          dS          d          i  |j        ddd0i|* |                    ddidjdIdkdl           ||         j        d@         }+||         j        dD         },|,|+z
  |+z  d9z  }-|-d@k    rdnd}.|-d@k    rdxnd}/|. |-d<d;|+d<d|,d<d}0||0d|/ifS )NzSelecciona una empresar   grayzError: redzSin datos para ese rangooranger   r   r   r      g333333?r   r   zRSI (14)VolumenTg{Gz?)rowscolsshared_xaxesrow_heightssubplot_titlesvertical_spacingPrecioz#1f77b4g      ?)r   rt   u7   <b>%{x|%d/%m/%Y}</b>  %{y:.3f} €<extra>Precio</extra>)xyr   linehovertemplate)rowr5   r   r;   zSMA 50z#FF9800dash)r   rt   r   u!   %{y:.3f} €<extra>SMA 50</extra>r   r=   zSMA 200z#E91E63u"   %{y:.3f} €<extra>SMA 200</extra>r   r@   	Bollingerdashdotbollu)   %{y:.3f} €<extra>Boll. Superior</extra>)r   r   r   r   legendgroupr   rA   Ftonextyzrgba(128,128,128,0.07)u)   %{y:.3f} €<extra>Boll. Inferior</extra>)r   r   r   
showlegendr   fill	fillcolorr   r   )r   gh|?5?g r?g      ?g-?gx&?r   )#7B1FA2#9C27B0z#AB47BCz#BA68C8z#CE93D8z#E1BEE7r   g?rG   z.1fz% (z.2f)left)r   r   annotation_textannotation_positionr   r5   r   )ACTIVOS)get_tickers_extrac                 ,    i | ]}|d          |d         S )nombrerm    )r   rs     r   
<dictcomp>z&actualizar_grafica.<locals>.<dictcomp>   s"    CCC!Qx[!H+CCCr   rb   u   Último cierre: z.3fu    €zVIVO: dotz	top rightu   Precio (€))r   r5   
title_textr   yaxisgףp=
?gGz?skipzrgba(0,0,0,0))r   lines)r   r   r   r   	hoverinfor   moder$   rH   r   zRSI: %{y:.1f}<extra></extra>F   )r   r   rt   )r   r   r   r5      green)r   r5   ranger   rK   u
   Índ. Vol.z#00BCD4u!   Índ.Vol: %{y:.1f}<extra></extra>r}   rI   zrgba(117,117,117,0.5)zVol: %{y:,.0f}<extra></extra>)r   r   r   marker_colorr   acrosscursorz#888)
showspikes	spikemode	spikesnap	spikedash
spikecolorspikethicknessplotly_whitez	x unifiedr9   hbottomg)\(?right)orientationyanchorr   xanchorr   <   (   )lr   tbz#2E7D32)
line_color
line_widthzoom)template	hovermodehoverdistancelegendmarginnewshapeshapesdragmodez% vs actualz+.1f%zrgba(200,0,0,0.3)z#777r   )
overlayingsider   r   
tickformat
ticksuffixshowgridzerolinezerolinecolorzerolinewidthtickfont
title_fontanchorrangeslider_visible+r   z#C62828u	    € → u    €)r   )r
   r6   ri   r^   r-   rf   intr   r   	add_tracegoScatterdictmaxminzip	add_hlineactivosr   databaser   rh   ro   update_yaxesr0   Barupdate_layoutupdate_xaxes)1r2   r   f_iniciof_finindicadoresshapes_previasr4   r   
col_preciomostrar_rsimostrar_volmostrar_custom
n_subplotsratiosr   figmax_pmin_prP   ratior   nivelr   r   extratodosprecio_mostraretiquetacolor_lineapv
pct_axis_npct_yidpct_ykeyyminymaxpct_minpct_max
pct_seriesrow_rsi	rsi_rangeind_displayrow_volspike_stylep0p1rendsigno
color_rend
texto_rends1                                                    r   actualizar_graficar_     s,
     F2Wf4EEE:g : : :-A--'5)99999999: *"--NB
 &H$% #E!"	x J4w6III;&K{*K,NS%%%K(8(88JSC5JN++Fooc3//0K4WZLLUWXkv\~]f\g\g|~N
a%  C MM"*
(bnDy<<<O   !	     +bjh"W+9AF K K K=
 
 
 a	 	 	 	 	 ;bjh"X,IS!A!A!A>
 
 
 a	 	 	 	 	 k!!bjh"Y-4fAI#N#N#NE	
 
 

 a 	 	 	 	 	bjh"Z.F!)<<<&&>E
 
 
 a 	 	 	 	 k!!*~))++R
^-?-?-A-Auu}333YYY
 
 	D 	DLE5 D5L(EMME5&(Q(Q(Q-23Y*K*K*Ku*K*K*K*K.4!  D D D D
  ******CC/@/@/B/BCCCE w % E
^(,N:.::::HK%w(( 	 N,,,,,HKMM
3U;;;'H'1     n=== aJ!Z!!G%%%Hj>%'Dj>%'Dn$6<Gn$6<G Z.>1^CcIJMM"*
(j(((      (aaDG #bjh"U)T	===8
 
 
 A	 	 	 	 	
 	Ec!J!J!JPW]^___G&!L!L!LRY_`aaa*8DDC	W!9OOO 	#lbj88\*S0KMM"*(k!9C(H(H(HA   	  # # # 0;D*qqG Cx2:--bfh"X,)@9
 
 
 A	 	 	 	 	
 	W!	BBB 8xF1  K C XwRSTTTbB"+++q999#  T$G$-'''&)))
 
 
   2 C>>>+>>>H$  K K K 
J	Q	B	J	R	 BGr>CD199CC"E"aiiYJF4FFFFFFFFFFJ
Wj111s     
A>AArelayoutDataTc                 &    | rd| v r| d         S |pg S )Nr  r   )relayoutshapes_actualess     r   guardar_shapesrd  y  s,      "H((!! b r   )&r   r   numpyrS   pandasr*   plotly.graph_objectsgraph_objectsr*  plotly.subplotsr   yfinancerc   r   r   r   r   r   r   r	   r
   dash_bootstrap_componentsr   register_page__name__r   r   dirname__file__r   r"   r6   r^   ro   r   r   r_  rd  r   r   r   <module>rp     s   				          ! ! ! ! ! ! ) ) ) ) ) )      E E E E E E E E E E E E E E E E E E ' ' ' '  8*:Q G G G G7<<(A(ABBFKKe e e
    4  *< < <B 

F>9%%
F>7##	E.$ 
  
 

F=(##
Fz**
Fw''	E.'""	E*j!!	E-!!	E*g	E
g&&	E
v&&  N2 N2 N2b 

F''	E-((	E
v&&	  ! ! ! ! !r   