
    i                       d dl Z d dlZd dlmZ d dlmZ d dlm	Z	m
Z
mZmZmZmZmZmZ d dlmZ d dlmZmZ d dlZd dlmZmZ d dlZda G d d	e          Z G d
 d          Z G d de          Z G d d          Z  G d d          Z! G d d          Z" G d d          Z# G d de          Z$dadZ%dZ&de'de'fdZ(de)de'de'de'd e'd!e'de'fd"a*de'd#e'd$e'de'fd%Z+d&e'd'e'd(e'de'fd)Z,d&e'd'e'd(e'de'fd*Z-d+e'de.fd,Z/d-e'd.e.de'fd/Z0 G d0 d1e          Z1 G d2 d3e          Z2 G d4 d5          Z3 G d6 d7e          Z4 G d8 d9          Z5d:e'd;e'd<e.d=e.de'f
d>Z6dS )?    NBytesIO)ListTupleOptionalDictAnyUnionCallableoverload)Enum)datedatetime)TOpLabTOplabStockData   c                       e Zd ZdZdZdZdZdS )TOptionStatusAtivazN/AZeradaExpiradaN)__name__
__module____qualname__ATIVADISP_NAZERADAEXPIRADA     (/home/jrussi/acompanhamento/Estrutura.pyr   r   x   s"        EGFHHHr    r   c            
       8    e Zd Zd ZddZdededededef
d	Zd
S )TOptionc                    d| _         d| _        d| _        d| _        d| _        t          d          | _        t          d          | _        d | _        d | _	        d| _
        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        t,          j        | _        d S )N r           nan)	AtivoBaseQuantTipoOperstrikeNfloatstrike
VencimentoDataVencimentoDataValorLastNomeValorInValorOutValorNowValorBidValorAsk	ValorLastTransacaoValueValorspreadVolatilidadeSerieidr   r   Statusselfs    r!   __init__zTOption.__init__   s     
		!"5\\$U||.2-1	!"""" #%("%#&
%2%8r    target_optionc                    | j         |_         | j        |_        | j        |_        | j        |_        | j        |_        | j        |_        | j        |_        | j        |_        | j        |_        | j	        |_	        | j
        |_
        | j        |_        | j        |_        | j        |_        | j        |_        | j        |_        | j        |_        | j        |_        | j        |_        | j        |_        | j        |_        d S N)r(   r)   r*   r+   r,   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r:   r;   r<   r=   r>   )r@   rB   s     r!   CopyOptionTozTOption.CopyOptionTo   s    "&."j!Y!Y $#{#'? '+':$&*&8#!Y $!%!%!%!%"&.$($4!%)%6""j7#{r    Sdias_para_vencimentor_anualv_anualreturnc                     | j         dk    rdnd}|dk    rd}|t          z  }t          ||| j        |||          }| j        || j        z
  z  S )NcallCPr   绽|=)r*   DIAS_UTEIS_NO_ANOBlackScholesOptionr.   r)   r3   )r@   rF   rG   rH   rI   call_put_flagtime_in_yearsoption_premiums           r!   BlackScholesSimplezTOption.BlackScholesSimple   sf      $yF221$$#( ,/@@ ,M1dk=Zacjkkz^dl:;;r    N)rB   r#   )r   r   r   rA   rE   r-   intrU   r   r    r!   r#   r#   ~   sp        9 9 92+ + + +4<E < <u <_d <in < < < < < <r    r#   c                   D     e Zd Zed             Z fdZ fdZd Z xZS )TObjectListc                     | r| d         S d S )Nr   r?   s    r!   LastzTObjectList.Last   s     	8Otr    c                 J    t                                          |           d S rD   superappendr@   item	__class__s     r!   AddzTObjectList.Add       tr    c                     | D ]:}t          |d          r(t          |j                  r|                                 ;t                                                       d S )NDestroy)hasattrcallablerf   r^   clearr`   s     r!   ClearzTObjectList.Clear   sX     	 	DtY'' HT\,B,B r    c                 .    |                                   d S rD   )rj   r?   s    r!   rf   zTObjectList.Destroy   s    

r    )	r   r   r   propertyr[   rc   rj   rf   __classcell__rb   s   @r!   rX   rX      sy          X
              r    rX   c                   V    e Zd Zd Zd Zd Zed             Zej        d             ZdS )TChartc                 $    t          d           d S )NzChart cleared.printr?   s    r!   
ClearChartzTChart.ClearChart   s    r    c                 $    t          d           d S )NzLegend created.rr   )r@   argss     r!   CriarLegendazTChart.CriarLegenda   s         r    c                 F    t          d| d           t          |          S )NzSeries 'z
' created.)rs   TLineSeries)r@   namerv   s      r!   
criarSeriezTChart.criarSerie   s*    ))))***4   r    c                     dS )NFr   r?   s    r!   View3DzTChart.View3D   s    ur    c                     d S rD   r   r@   values     r!   r}   zTChart.View3D   s    r    N)	r   r   r   rt   rw   r{   rl   r}   setterr   r    r!   rp   rp      sw             ! ! !! ! !   X]  ]  r    rp   c                   "    e Zd Zd ZddZd ZdS )ry   c                     || _         g | _        g | _         t          dt          fddd                      | _        d| _        d| _        d | _        d| _	        d S )NPenFred)VisibleColorTbluer%   )
NameXValuesYValuestypeobjectr   ShowInLegendr   VertAxisTitle)r@   rz   s     r!   rA   zTLineSeries.__init__   s]    	M4yee*L*LMMOO 



r    r%   c                 n    | j                             |           | j                            |           d S rD   )r   r_   r   )r@   xylabelcolors        r!   AddXYzTLineSeries.AddXY   s4    AAr    c                 n    | j                             |           | j                            |           d S rD   )r   extendr   )r@   x_valuesy_valuess      r!   AddarrayzTLineSeries.Addarray   s4    H%%%H%%%%%r    N)r%   r%   )r   r   r   rA   r   r   r   r    r!   ry   ry      sF        	 	 	   
& & & & &r    ry   c                       e Zd Zd Zed             Zej        d             Zed             Zej        d             Zd Zd Z	dS )	TStringGridc                 L    i | _         d| _        d| _        i | _        d| _        d S Nr   )cells
_row_count
_col_countrows
fixed_colsr?   s    r!   rA   zTStringGrid.__init__   s)    
	r    c                     | j         S rD   r   r?   s    r!   RowCountzTStringGrid.RowCount  
    r    c                     || _         d S rD   r   r   s     r!   r   zTStringGrid.RowCount      r    c                     | j         S rD   r   r?   s    r!   ColCountzTStringGrid.ColCount  r   r    c                     || _         d S rD   r   r   s     r!   r   zTStringGrid.ColCount  r   r    c                 \    ||f| j         vrd| j         ||f<   t          | j         ||          S Nr%   )r   	_GridCell)r@   colrows      r!   CellszTStringGrid.Cells  s7    :TZ''%'DJSz"S#...r    c                 $    t          d           d S )NzColumns auto-sized.rr   r?   s    r!   AutoSizeColumnszTStringGrid.AutoSizeColumns  s    #$$$$$r    N)
r   r   r   rA   rl   r   r   r   r   r   r   r    r!   r   r      s             X _    _    X _    _ / / /
% % % % %r    r   c                   P    e Zd Zd Zed             Zej        d             Zd ZdS )r   c                 0    || _         || _        || _        d S rD   )_cells_col_row)r@   
cells_dictr   r   s       r!   rA   z_GridCell.__init__  s     				r    c                 P    | j                             | j        | j        fd          S r   )r   getr   r   r?   s    r!   r   z_GridCell.value!  s!    {	495r:::r    c                 L    t          |          | j        | j        | j        f<   d S rD   )strr   r   r   )r@   vals     r!   r   z_GridCell.value%  s#    .1#hhTY	*+++r    c                     | j         S rD   )r   r?   s    r!   __str__z_GridCell.__str__)  s
    zr    N)r   r   r   rA   rl   r   r   r   r   r    r!   r   r     sj          
 ; ; X; \7 7 \7    r    r   c                   4     e Zd Zed             Z fdZ xZS )TStringListc                 ,    d                     |           S )N,)joinr?   s    r!   	CommaTextzTStringList.CommaText.  s    xx~~r    c                 J    t                                          |           d S rD   r]   r`   s     r!   rc   zTStringList.Add2  rd   r    )r   r   r   rl   r   rc   rm   rn   s   @r!   r   r   -  sQ          X        r    r   g      @2   XrJ   c                    t          |           }ddd|z  z   z  }ddt          j        dt          j        z            z  t          j        t          j        |d           dz            z  d|z  dt          j        |d          z  z   dt          j        |d          z  z   dt          j        |d	          z  z   d
t          j        |d          z  z   z  z
  }| dk     rd|z
  }|S )N   gqq?   g:p?g[2ֿgh^_?   gxN#   gC)H?   r   )absmathsqrtpiexppow)r   lkresults       r!   CNDr   [  s    AA	QQATYq47{+++dhA7J.K.KKQA66txPQST~~9UUtx1~~%	&(3dhq!nn(D	E F 	1uuVMr    CallPutFlagrF   Trvc                 F   |dk    rd}|dk    r ||k    r| dk    r||z
  ndS | dk    r||z
  ndS t          j        ||z            |t          j        |d          dz  z   |z  z   |t          j        |          z  z  }||t          j        |          z  z
  }| dk    r>|t	          |          z  |t          j        | |z            z  t	          |          z  z
  S | dk    r@|t          j        | |z            z  t	          |           z  |t	          |           z  z
  S dS )Nr   rO   rM   r&   rN   r   )r   logr   r   r   r   )r   rF   r   r   r   r   d1d2s           r!   rQ   rQ   f  s3   AvvAvvq55'3..1q55C7'3..1q55C7
(1q5//Q!Q!!33q8
8Q1=M	NB	a$)A,,	Bc3r77{Q1"q&!1!11CGG;;;			48QBF###c2#hh.S"XX==3r    meanstdDevc                     |dk    r't          | |z
            dk     rt          d          S dS |dz  }| |z
  dz   d|z  z  }d|t          j        dt          j        z            z  z  t          j        |          z  S )Ng&.>infr&   r   r   )r   r-   r   r   r   r   )r   r   r   varianceexponents        r!   NormalCurver   y  s    ~~q4x==4<<3qyHTA~X.H$)AK0001TXh5G5GGGr    sTstrike_pricepremiumc                 .    t          d| |z
            |z
  S r   maxr   r   r   s      r!   
CallPayoffr     s    q"|#$$w..r    c                 .    t          d|| z
            |z
  S r   r   r   s      r!   	PutPayoffr     s    q,#$$w..r    r   c                 &    | dk    rdS | dk     rdS dS )Nr   r   rZ   r   )r   s    r!   signr     s!    1uuQQ1uuRR1r    r   decimalsc                 8    d| z  }t          | |z            |z  S )N
   )round)r   r   factors      r!   roundtor     s$    8)_F  6))r    c                       e Zd ZdZdZdS )TTipoAnaliser   r   N)r   r   r   taNoPrimeiroVencimentotaAntecipadar   r    r!   r   r     s        LLLr    r   c                       e Zd ZdZdZdZdS )TTipoCalculoPayoffr   r   r   N)r   r   r   tcpFinaltcpNoVencimentotcpAntecipador   r    r!   r  r    s        HOMMMr    r  c                       e Zd Zd ZdS )TAnaliseEsperancaDatac                 L    g | _         g | _        g | _        g | _        d| _        d S Nr&   )Precos	FDPValuesPayoffValues
HopeValuesEsperancaTotalr?   s    r!   rA   zTAnaliseEsperancaData.__init__  s-    #%&()+')%(r    N)r   r   r   rA   r   r    r!   r  r    s#        ) ) ) ) )r    r  c                   *    e Zd ZdZdZdZdZdZdZdZ	dS )	
TCategoriazBox/Renda Fixau   Collar CalendáriozCollar PotencializadozEstruturas Direcionais	StranglesOutror%   N)
r   r   r   BOX_RENDA_FIXACOLLAR_CALENDARIOCOLLAR_POTENCIALIZADOESTRUTURAS_DIRECIONAIS	STRANGLESOUTROSEM_CATEGORIAr   r    r!   r  r    s4        ,N035!IEMMMr    r  c                   N   e Zd Zd Zd Zd Zd Zd ZdefdZ	de
d	e
d
e
dededefdZededeeee
ef         fd            Zededd fd            Zde
de
ded
e
dededee         dededededede
de
de
fdZdede
de
de
de
f
dZdedede
de
dededefd Zd!ed"e
d#ed
e
de
f
d$Zd%e
d&e
d
e
d'ed(ed)edefd*Zd%e
d&e
d
e
d'ed(ed)edefd+Zd%e
d&e
d
e
d'ed(ed)efd,Zded%e
d&e
d
e
d'ef
d-Zded%e
d&e
d
e
d'ef
d.Z de
fd/Z!d0eded1ed2e
d3ef
d4Z"d1ed5eded6e
d0ed7e
fd8Z#dd"e
d
ee
         de
fd:Z$d"e
ded
e
de
fd;Z%	 	 	 	 dde
de
d
e
dee         dededededede
fd>Z&de
de
d
e
dee         dededededede
de
de
fd?Z'	 	 	 dde
de
ded
e
dee         dededededede
de
de
fdAZ(d%e
d&e
dBe
dee
e
f         fdCZ)ddEZ*ddFZ+dGe
dHedIe
de
fdJZ,dKe
dLe
dMe
dNede
f
dOZ-defdPZ.defdQZ/deeef         fdRZ0dSe
dTe
dee
e
f         fdUZ1defdVZ2de
de
dBedWedXed
e
dYe
dee         de
fdZZ3d[e
dd fd\Z4d[e
dd fd]Z5de6j7        fd^Z8d_e9fd`Z:da Z;db Z<d%e
d&e
d
e
de6j7        fdcZ=dded'ed(ed)efdeZ>dded'ed(ed)efdfZ?dge@e         dhe@e         fdiZAdjedkefdlZBdmedd fdnZCddoZDde
de
dBede
de
de
fdpZEde
de
dqedred
e
dee         de
fdsZFdt ZGddve
dwe
dxedye
de6j7        f
dzZHed{eIeef         dd fd|            ZJed}d deIeef         fd~            ZKd%e
d&e
d
e
defdZLd ZMd ZNd9S )
TEstruturac                    t                      | _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _	        d| _
        d| _        d| _        d| _        d| _        d| _        d| _        d| _        t$          j        | _        d| _        d| _        d| _        d| _        d| _        d| _        d S )Nr&   r%   r   r   )rX   Optionsr3   
ValorLucroValorOffsetValorAimr4   r5   r(   ValorAtivoInValorAtivoNowr=   Sigmar2   MaiorVencimentoInfoindice	QuantBaser  r  	Categoria	CorretoraDTELucroAimLucroOutLucroAimPercentualMenorVencimentor?   s    r!   rA   zTEstrutura.__init__  s    -8]]!!$"%""" #&$'
	$%	%/%= ""),$%r    c                 8    | j                                          d S rD   )r  rf   r?   s    r!   rf   zTEstrutura.Destroy  s    r    c                     |                                  | _        | j        | j        | j        z  z
  | _        | j        | j        | j        z  z
  | _        d S rD   )GetMenorVencimentor/  r!  r3   r(  r,  r5   r  r?   s    r!   calcular_dadoszTEstrutura.calcular_dados  sH    #6688t~(EE-$,*GGr    c                    t          dd dd            t          |                                           D ]:\  }}|dk    r/t          |t                    r|dn|}t          | d|            ;t          dd dd            | j        st          d           nt          | j                  D ]\  }}t          |          }g }|                                D ]:\  }}	t          |	t                    r|	dn|	}
|                    | d|
            ;t          d	|d
z   ddd                    |          z              t          d d           dS )uH   Imprime os dados da estrutura linha a linha e as pernas em linha única.
z------------------------------z DADOS DA ESTRUTURA r  .4f: u    OPÇÕES (PERNAS) u+   Nenhuma opção encontrada nesta estrutura.Perna r   02d >>  | zN------------------------------------------------------------------------------N)	rs   varsitems
isinstancer-   r  	enumerater_   r   )r@   attrr   val_displayiopt	opt_attrs	linha_optr   r   v_fmts              r!   imprimirzTEstrutura.imprimir  s   7677v77888  ::++-- 	0 	0KD%y  0:5%0H0HSnnne....///6666f66777 | 	F?@@@@#DL11 F F3 II		%OO-- 6 6DAq*4Q*>*>EqJJJAE$$__U__5555,qs,,,,uzz)/D/DDEEEEmmmr    c                    t           rt           j        sdS i }t           j        D ]N}|j                                                                        }|                    |d          |j        z   ||<   Ot           j        D ]U}|j                                                                        }||         dk    s|j        dk    rt          j        |_	        VdS )u   
        Percorre as pernas da estrutura. Se o somatório global de quantidade
        de um Ticker for 0, marca o status como ZERADA.
        Nr   )
	estruturar  r2   upperstripr   r)   r   r   r>   )r@   totais_por_tickeropnomes       r!   VerificarOpcoesZeradasz!TEstrutura.VerificarOpcoesZeradas  s    
  		 1 	F # 	P 	PB7==??((**D&7&;&;D!&D&Drx&Od## # 	1 	1B7==??((**D !&!++rx1}})0		1 	1r    rJ   c                    d dd g}t          |                                           D ]Y\  }}|dk    rNt          |d          r|j        }nt	          |t
                    r|d}n|}|                    | d|            Z|                    d dd            t          | j                  D ]\  }}g }t          |                                          D ]S\  }}	t          |	d          r|	j        }
nt	          |	t
                    r|	d}
n|	}
|                    | d|
            T|                    d	|d
z   ddd	                    |          z              |                    d           d	                    |          S )zBGera uma string formatada com os dados da estrutura e suas pernas.z====================z ESTRUTURA r  r   r6  r7  z---------------u
    OPÇÕES r8  r   r9  r:  r;  z3===================================================r5  )
r<  r=  rg   r   r>  r-   r_   r?  r  r   )r@   linhasr@  r   val_fmtrB  rC  p_datar   r   rF  s              r!   txtzTEstrutura.txt$  s   00001::++-- 		4 		4KD%y  5'** $#kGGu-- $!&nnGG#G222233333633444-- 
	G 
	GFAsFS		)) / /11g&& GEE5))  JJEEEooeoo....MM01Q300005::f3E3EEFFFFfyy   r    r   
volatilityCDIr*   diasAntesDoPrimeiroVencAnaliseDatac                 l   g }g }g }	g }
|t           z  }|t          |z  z
  }d}||t          |z  z   k     r|dk    rt          |||          }d}|t          j        k    r|                     ||          }n'|t          j        k    r|                     |||          }|                    |           |                    |           |	                    |           ||z  }|
                    |           ||z  }||z  }||t          |z  z   k     ||_	        ||_
        |	|_        |
|_        ||z  |_        d S )Nr&   r   )PASSOS_POR_DESVIO_PADRAONUM_DESVIOS_PADRAO_INTEGRACAOr   r   r   CalcPayoffnoVencimentor  CalcPayoffAntecipador_   r  r  r  r  r  )r@   r   rU  rV  r*   rW  rX  listaPrecos	listaFDPslistaPayoffs
listaHopesstepr   	hopeTotalFDPValuePayoffValuehopeContributions                    r!   _GerarDistribuicaoDeResultadosz)TEstrutura._GerarDistribuicaoDeResultados\  sv    	
440:==	$6CCCC1uu&q$
;;!<>>>"&"="=a"E"EKK\666"&";";A?VX["\"\K""1%%%  ***##K000#+k#9 !!"2333--	IA# $6CCCC& ) )#/ !+%.%5"""r    papelc                    |                                                                 }t          |          dk     s|d                                         sd|ddfS |d d         }|d         }d|cxk    rdk    rn ndnd	}||d|fS )
Nr   r   ativor&   r%   ALrL   put)rK  rJ  lenisalpha)clsrh  
base_ativoletra_serietipos        r!   DecodificarPapelOpcaoz TEstrutura.DecodificarPapelOpcao  s    ##%% u::>>q!1!1!3!3>E3** 2A2Y
Ah2222s22222vvZk11r    dados_stringc                                   }	 ddl m} t          j         ||          dd          j        j                                        _        n+# t          $ r}t          d|            |cY d}~S d}~ww xY wj	        rt          d           |S g d	}t          fd
|D                       st          d|            |S dD ]E}|j        v r:|                             t
                    j                                        |<   Ft          j        d         j                            ddd          d                              d          d<   t          j        d         d                              d                              t                    d<   d         j                                        j                                        d<   d                              fd          g d<                       d d          d<   d         d         z  d<   d}                                D ]<\  }}	|	d         }
|
dk    rt'                      }t          |
          |_        |	d         |_        |
dk    rdnd |_        |	d         |_        |	d         |_        |	d         |_        |	d         |_        |	d         |_        |j        d!k    r)t9          d"          |_        t9          d"          |_        nd|_        d|_        d|_        |j         !                    |           ||	d         z  }|j"        d#k    r/|	d$         |_"        |	d         d!k    r|	d         |_#        5d|_#        >||_        |j         r$tI          |j         d         j                  |_%        tM          d|j%                  }||z  |_        |S )%u   
        Importa transações de uma string/clipboard, decodifica papéis em opções/ativos.

        op.ValorIn = Preço Unitário da Transação.
        estrutura.ValorIn = Custo Financeiro Líquido Total.
        r   )StringIO	r   )sepdecimalu&   Erro ao ler a string de transações: Nu6   Erro de leitura: DataFrame vazio após leitura do CSV.)r+   Papelr)      Preçoc              3   *   K   | ]}|j         v V  d S rD   )columns).0r   dfs     r!   	<genexpr>zATEstrutura.ImportarEstruturaDeStringTransacoes.<locals>.<genexpr>  s*      DD3"*$DDDDDDr    u&   Erro: Colunas faltando. Necessárias: )r{  r|  r)   r|  .F)regexcoerce)errorsr&   r)   r+   r{  c                 R    t          j                            |                     S rD   )pdSeriesrt  )r   rp  s    r!   <lambda>z@TEstrutura.ImportarEstruturaDeStringTransacoes.<locals>.<lambda>  s    bi 9 9! < <== r    )r*   r(   StrikeSerie_Letrac                 8    | d         dv r| d         n| d          S )Nr+   )compracr)   r   )r   s    r!   r  z@TEstrutura.ImportarEstruturaDeStringTransacoes.<locals>.<lambda>  s#    F(F(FGSQX\M r    r   )axisQuant_SinalizadaFinanceiro_Transacaor*   rM   Vrj  r'   r%   r(   )'iorw  r  read_csvr~  r   rK  	Exceptionrs   emptyallastype
to_numericreplacefillnarV   lowerapplyiterrowsr#   r)   r*   r+   r2   r3   r7   r6   r9   r-   r.   r/   r;   r  rc   r(   r"  r   r(  r   )rp  ru  rI  rw  ecolunas_necessariasr   custo_total_estruturaindexr   quant_sinalizadarM  qbr  s   `            @r!   #ImportarEstruturaDeStringTransacoesz.TEstrutura.ImportarEstruturaDeStringTransacoes  s=    CEE			######XXl33sKKKB --//BJJ 	 	 	>1>>???	
 8 	JKKKBBBDDDD0CDDDDD 	Q<OQQRRR 0 	: 	:Cbj  S'..--177993 }R\%5%=%=c3e%=%T%T]efffmmnqrr8 mBwKAAAHHKKRRSVWW7 Z^))++/55776
=?[=N=N====>
 >
999: "$YY "* "
 "
 &((:%;bl%J!"
 !$ ++-- %	1 %	1JE3"#561$$B+,,BH&kBG-11ccsBG'lBGXBJh-BKh-BK #HB w'!!!%LL	 %e	 !!BO!!"%%%!S)?%@@! "b(('*;'7$K7**-0]I**-0I* 2	 	B"%i&7&:&@"A"AII'((1B6	 s   A	A 
B "A;5B ;B r$  N_dias_projecaoChartPlotExpectedProfit
PlotProfit
PlotSigmasPlotFDP	PlotAtivo	limiteMin	limiteMaxc           	         |d u}|dk    rd}|t          j        |          z  |z  }|t          z  }t                      }|                     ||||||           |                     ||||          }|r|                                 |                     ||||||	|           |
re|                    dddd          }d|j	        _
        d|_        d|_        t          d          D ]#}|                    ||dz
  |z  z   dd	d
           $|rJ|                    dddd          }d|j	        _
        d|_        d|_        |                    |dd	d
           |S )Nr   r   Sigmasr   pscircleFclRed   r%   
clTeeColorAtivor   psrectangle)r   r   rZ  r  rg  _CalcularEsperancaNaFaixart   _PlotarDadosCalculoEsperancar{   r   r   r   r   ranger   )r@   r$  r   r  rV  r*   rW  r  r  r  r  r  r  r  r  	plotGraphrU  rb  analise_datar   serierB  s                         r!   _ExecutarAnaliseLucroEsperadoz(TEstrutura._ExecutarAnaliseLucroEsperado  s    $&	aOdi888D@
44,..++D*c4I`bnooo//iTXYY 	7--e\9iY`bl  oA  B  B  B R((1j%HH$)	!%*"%q R RAKKA'; ;QLQQQQ 7((!]EJJ$)	!%*"%D!R666r    rb  c                     |dk    r|dk    r|j         S d}t          t          |j                            D ]@}|dk    s|j        |         |k    r'|dk    s|j        |         |k    r||j        |         z  }A||z  S )NrZ   r&   )r  r  rn  r  r  )r@   rX  r  r  rb  rc  rB  s          r!   r  z$TEstrutura._CalcularEsperancaNaFaixa=  s    OO)r//--	s;-..// 	7 	7Abk&8&;y&H&Hbk&8&;y&H&H[3A66	4r    c                 n   |r8|                     dddd          }|                    |j        |j                   |r8|                     dddd          }	|	                    |j        |j                   |r|                     dddd          }
t          t          |j                            D ]}|dk    s|j        |         |k    rF|dk    s|j        |         |k    r/|
                    |j        |         |j        |         dd	           _|
                    |j        |         d
dd	           d S d S )NF.D.P.r   	psNothingFProfitzExpected ProfitrZ   r%   r  r   )	r{   r   r  r  r  r  rn  r   r  )r@   r  rX  r  r  r  r  r  serieFDPserieProfit	serieHoperB  s               r!   r  z'TEstrutura._PlotarDadosCalculoEsperancaI  sf     	I''![%HHHk0+2GHHH 	O**8QUKKK  !3[5MNNN 	P(():A{ERRI3{12233 P P"__+*<Q*?9*L*L"__+*<Q*?9*L*LOOK$6q$9;;QRS;TVXZfggggOOK$6q$91b,OOOO	P 	PP Pr    Opcao
PrecoAtivodiasParaVencimentoc                     |j         dk    rd}n|j         dk    rd}ndS |dk    rd}|t          z  }t          |||j        |||j                  S )NrL   rM   rm  rN   r&   r   rO   )r*   rP   rQ   r.   r;   )r@   r  r  r  rV  rR   tempoEmAnoss          r!   _PrecificarOpcaoBSzTEstrutura._PrecificarOpcaoBS\  sj    :MMZ5  MM3""!&(+<<!-U\;X[]b]opppr    minvmaxvplotarStrikesplotarValorAtivoplotarSigmasc           	          ddl }ddl}ddlm}	  |j        ||d          }
t          t          t          d  j        D                                           }t          t          t          t          |
          |z                                 } fd|D             } |	j	        d          \  }}|
                    ||dd	d
           |                    d j         d                                  d           |                    d           |                    d           |                    ddd                                ||||           |                    ddddd           |S )u   
        [MÉTODO ADAPTADO] Simula o PlotarPayoffNoVencimento, gerando uma figura Matplotlib.
        O objeto Figure é retornado para ser processado pelo mpld3.
        r   N   c                 .    g | ]}|j         d v |j        S rL   rm  r*   r.   r  rM  s     r!   
<listcomp>zFTEstrutura.PlotarPayoffNoVencimento_Matplotlib_FIG.<locals>.<listcomp>  '    "b"b"brwRaGaGa29GaGaGar    c                 <    g | ]}                     |          S r   r\  r  precorV  r@   s     r!   r  zFTEstrutura.PlotarPayoffNoVencimento_Matplotlib_FIG.<locals>.<listcomp>  )    VVVu4..uc::VVVr    r      figsizePayoffr   r   r   r   	linewidthPayoff:  (@  dias)   Preço do Ativo   Lucro/Prejuízo (P&L)T--ffffff?	linestylealphar  r  r  blackr   皙?r   r  r  r  )numpypandasmatplotlib.pyplotpyplotlinspacesortedlistsetr  subplotsplot	set_titler2   r2  
set_xlabel
set_ylabelgridPlotar_Strikes_ValorAtivo_Sigmaaxhline)r@   r  r  rV  r  r  r  npr  pltprecos_basestrikesprecos_finaispayoffsfigaxs   `  `            r!   'PlotarPayoffNoVencimento_Matplotlib_FIGz2TEstrutura.PlotarPayoffNoVencimento_Matplotlib_FIGp  s    	'''''' "bk$c22c"b"bt|"b"b"bccddeetC[(9(9G(C$D$DEEFFVVVVVVVV #,w///R 	whfPQRRR 	P	PPt/F/F/H/HPPPQQQ
'(((
-...
C000 	,,'-%	 	- 	
 	
 	
 	

1Gtq
LLL 
r    c           	          dd l }dd lm} ddlm}	  j        D ]F}
|
j        dk    r9|
j        dk    r. j        dk    r j        nd|
_        t          d|
j                   G |j
        ||d          }t          t          t          d  j        D                                           }t          t          t          t          |          |z                                 } |j        d	          \  }} fd
|D             }|                    ||ddddd            fd|D             }|                    ||dddd           |                    ||           |                    d j         d                                  d           |                    d           |                    d           |                    ddd                                ||||           |                    ddddd !           |                    d"#           |                                  |	            } |j        |d$d%d&'            |j        |           |                                                    d(          S ))Nr   r   rj        ?zop.Volatilidade: r  c                 2    g | ]}|j         d k    |j         S r   r.   r  s     r!   r  zFTEstrutura.PlotarPayoffNoVencimento_Matplotlib_SVG.<locals>.<listcomp>  "    "U"U"UryST}}29}}}r    r  r  c                 <    g | ]}                     |          S r   r  r  s     r!   r  zFTEstrutura.PlotarPayoffNoVencimento_Matplotlib_SVG.<locals>.<listcomp>  )    [[[E33E3??[[[r    r/   r   -r          @)r   r   r  r  r  c                 >    g | ]}                     |d           S r  rU   r  s     r!   r  zFTEstrutura.PlotarPayoffNoVencimento_Matplotlib_SVG.<locals>.<listcomp>  +    YYY%t..ua==YYYr    zAgora (T+0)r        ?)r   r   r  r  r  r  r  r  r  T      ?r  r  r  g333333?r  best)locsvgtight{Gz?)formatbbox_inches
pad_incheszutf-8)r  r  r  r  r   r  r*   r;   r$  rs   r  r  r  r  r  r  set_xlimr  r2   r2  r  r   r  .Plotar_Strikes_ValorAtivo_Sigma_Matplotlib_SVGr  legendtight_layoutsavefigclosegetvaluedecode)r@   r  r  rV  r  r  r  r  r  r   rM  r  r  r  r
  r  payoffs_vencpayoffs_nowbufs   `  `               r!   'PlotarPayoffNoVencimento_Matplotlib_SVGz2TEstrutura.PlotarPayoffNoVencimento_Matplotlib_SVG  s    	'''''' , 	? 	?Bw'!! ?a''48J4E4Edjj4BO-bo>>> "bk$c22c"U"Ut|"U"U"UVVWWXXtC[(9(9G(C$D$DEEFF#,w///R \[[[[][[[
|<vY\deqtuuu ZYYYY=YYY
{-vY]ilmmm 	D$
P	PPt/F/F/H/HPPPQQQ
'(((
-...
C000 	;;'-%	 	< 	
 	
 	
 	

1Gsas
KKK
		f	giiC7tLLLL	#||~~$$W---r    c           	      R    ddl }ddlm} ddlm}	  |j        d          \  }
}|                    d j         d                                  d           |	                    d           |
                    d	           |                    dd
dd           |                    ddd            |j        ||d          }t          t          t!          d  j        D                                           }t          t          t!          t          |          |z                                 } fd|D             }|                    ||d|	j        d         d                                ||||           |                                  |j                     dS )u   
        Simula o PlotarPayoffNoVencimento do Delphi, usando Matplotlib para visualização.
        Usa os dados da própria instância (self) e chama o método Plotar_Strikes_ValorAtivo_Sigma.
        r   Nr  r  r  r  r  u"   Preço do Ativo no Vencimento (R$)u   Lucro/Prejuízo Total (R$)grayr        ?)r   r  r  Tr  333333?r  r  c                 .    g | ]}|j         d v |j        S r  r  r  s     r!   r  z7TEstrutura.PlotarPayoffNoVencimento.<locals>.<listcomp>  r  r    c                 <    g | ]}                     |          S r   r  r  s     r!   r  z7TEstrutura.PlotarPayoffNoVencimento.<locals>.<listcomp>  r  r    zPayoff no Vencimentoztab:bluer   r  )r  r  r  matplotlib.colorscolorsr  r  r2   r2  r  r   r  r  r  r  r  r  r  r  TABLEAU_COLORSr  r&  show)r@   r  r  rV  r  r  r  r  r  mcolorsr
  r  r  r  r  r	  s   `  `            r!   PlotarPayoffNoVencimentoz#TEstrutura.PlotarPayoffNoVencimento  s    	''''''++++++ #,w///R
P	PPt/F/F/H/HPPPQQQ
:;;;
2333


1FcS
AAA
C000 "bk$c22 c"b"bt|"b"b"bccddeetC[(9(9G(C$D$DEEFF WVVVVVVV 	w.DGLbcmLnz{||| 	,,R@PR^___
		




r    c           	      P   d|_         |                    dddd           |                                  |                     ||||           g }| j        D ]'}|j        dk    r|                    |j                   (|                                 t          d          D ]#}|                    ||||z
  z  dz  z              $|                                 |
                    d	          }	d
|	_        |D ]/}
|	                    |
|                     |
d|          dd           0d S )NFlaLeftr      Trj  e   d   Now	aleftaxisr   r%   r  )r}   rw   
FixValorInr  r  r*   r_   r.   sortr  r{   r   r   rU   )r@   r  r  r  rV  r  lista_strikesoptionrB  r  r.   s              r!   PlotarEstruturaNowzTEstrutura.PlotarEstruturaNow  sQ   8RT222,,UM=R_```%'l 	4 	4F{g%%$$V]333s 	A 	AA  TD[(9C(?!?@@@@  ''$# 	[ 	[FKK 7 73 G G\ZZZZ	[ 	[r    c                    d|_         |                    dddd           |                                 \  }}t                      }|                     |           |j                                         | j        D ]U}	|	j        |k    s|	j        dk    r=t                      }
|	
                    |
           |j                            |
           V|                                 }|                                }||k    r_t          |j                  dk    rG|j        d         j        dk    r1|j        d         xj        ||z
  |j        d         j        z  z  c_        g }|j        D ]'}	|	j        dk    r|                    |	j                   (|                    ||g           |                                 |                     ||||           t+          d          D ]#}|                    ||||z
  z  d	z  z              $|                                 |                    d
          }d|_        |D ]-}|                    ||                    |          dd           .|                                 d S )NFr=  r   r>  Trj  r   r?  r@  ThenrB  r%   r  )r}   rw   GetVencimentosr  CopyEstruturaTor  rj   r/   r*   r#   rE   rc   CalcValorInrn  r)   r3   r_   r.   r   rD  r  r  r{   r   r   r\  rf   )r@   r  r  r  rV  r  
maior_venc
menor_vencestrutura_lclrF  
new_optionself_valor_inestrutura_lcl_valor_inrE  rB  r  r.   s                    r!   PlotarEstruturaThenzTEstrutura.PlotarEstruturaThen  s   8RT222!%!4!4!6!6
J"]+++##%%%l 	6 	6F!Z//V[G5K5K$YY
##J///%))*555((**!.!:!:!<!<333#m>S:T:TWX:X:X
 $Q'-22%a(00]E[5[_l_tuv_w_}4}}00%'#+ 	4 	4F{g%%$$V]333dD\***,,UM=R_```s 	A 	AA  TD[(9C(?!?@@@@  (($# 	` 	`FKK D DV L LbR^____r    c                     |                                   d}| j        D ]}||j        |j        z  z  }d}||z  | _        | j        S )Nr&   r   )rC  r  r3   r)   )r@   totalrF  r  s       r!   rL  zTEstrutura.CalcValorIn  sW    l 	3 	3FV^fl22EE rz|r    r)   r+   r,   r/   c                     t                      }||_        ||_        ||_        ||_        ||_        d|_        ||_        | j        	                    |           || j
        k    r	|| _
        d S d S r
  )r#   r)   r*   r+   r<   r,   r.   r/   r  rc   r%  )r@   r)   r*   r+   r,   r/   rF  s          r!   	AddOptionzTEstrutura.AddOption  sw    ! &   ,,,#-D    -,r    r2   r.   r3   c                     t                      }||_        ||_        ||_        ||_        ||_        ||_        | j                            |           d S rD   )	r#   r)   r2   r*   r+   r.   r3   r  rc   )r@   r+   r2   r*   r.   r)   r3   rF  s           r!   AddOption_with_name_and_valuez(TEstrutura.AddOption_with_name_and_value  sQ          r    Nc                    | j         }|                                 \  }}|t          d          k    p||k    }| j        D ]}|j        dk    r||j        ||j        z
  z  z  }#||s|j        |k    rd|j        dk    r'||j        t          ||j	        |j                  z  z  }d|j        dk    r&||j        t          ||j	        |j                  z  z  }|j        |z
  }||                    ||||j                  z  }|S )Nr   rj  rL   rm  )r   rJ  r-   r  r*   r)   r3   r/   r   r.   r   rU   r;   )	r@   r  rV  rU  rM  rN  is_single_maturityrF  dias_restantess	            r!   r\  z!TEstrutura.CalcPayoffnoVencimento  s,     "&!4!4!6!6
J(E%LL8WjJ>Vl 	m 	mF{g%%fn)DEE;"4;9Jj9X9X {f,,
:v}V\Vd0e0e!ee--	*fmU[Uc0d0d!dd &,%6%CNV66z>SVX^XklllEEr    c                 n   |                                  }|dk    r|                     |          S ||z
  }|dk     rt          d           dS | j        }| j        D ]Z}|j        dk    r||j        ||j        z
  z  z  }#|j        |z
  }| 	                    ||||          }	||j        |	|j        z
  z  z  }[|S )Nr   z"Error: Evaluation date has passed.r&   rj  )
r2  r\  rs   r   r  r*   r)   r3   r/   r  )
r@   r  rW  rV  rN  diasParaAvaliacaorU  rF  r\  valor_opcaos
             r!   r]  zTEstrutura.CalcPayoffAntecipado,  s    ,,..
??..z:::&)@@q  67773 l 	G 	GF{g%%fn)DEE!'!25F!F"55fj.Z]^^v~)EFFr    r&   Tc
                    |                                  \  }
}|t          d          k    r|
|k    r|dk    rt          d           dS |                                 }|                     ||||t
          j        d||||||	dd          S )Nr   r   u   A estrutura possui múltiplos vencimentos. Para uma análise correta, utilize a versão da função que inclui o parâmetro CDI.r&   rZ   )rJ  r-   rs   r2  r  r   r   )r@   r$  r   rV  r  r  r  r  r  r  rM  rN  dias_para_vencs                r!   CalcExpectedProfitNoVencimentoz)TEstrutura.CalcExpectedProfitNoVencimentoD  s     "&!4!4!6!6
J%,,&&Z:-E-ECSTHH  U  V  V  V3002211%~s2>2UWXZ_2DjR\^egprtvxz z 	zr    c                     |                                  }|                     ||||t          j        d||||||	|
|          S r   )r2  r  r   r   )r@   r$  r   rV  r  r  r  r  r  r  r  r  ra  s                r!   (CalcExpectedProfitNoVencimentoComLimitesz3TEstrutura.CalcExpectedProfitNoVencimentoComLimitesT  sW     002211%~sT`Tw23U<NPZ\fhoqz2;YH H 	Hr    rZ   c                     |                                  }|dk    s|t          d          k    rdS ||z
  }|                     ||||t          j        ||||||	|
||          S )Nr   r   r&   )r2  r-   r  r   r  )r@   r$  r   rW  rV  r  r  r  r  r  r  r  r  rN  r^  s                  r!   CalcExpectedProfitAntecipadoz'TEstrutura.CalcExpectedProfitAntecipado]  s     ,,..
!OOuU||!;!;3&)@@11%?PRUWcWp2I5Rdfp2<gyR[]fh h 	hr    Nc           	         |                                   g }| j        D ]'}|j        dk    r|                    |j                   (|                    | j                   |dk    r|                    |           |dk    r|                    |           |                    t          | j        | j        t          |          d                     |                    t          | j        | j        t          |          d                     |	                                 |d         }|d         }||dz  z   }|dz  }||fS )	Nrj  {Gz?r   r   rZ   皙?g?)
rC  r  r*   r_   r.   r"  	calcSigmar$  r   rD  )r@   r  r  rg  rE  rF  minv_resultmaxv_results           r!   CalcGraphLimitszTEstrutura.CalcGraphLimitsm  sE   %'l 	4 	4F{g%%$$V]333T.///$;;  &&&$;;  &&& 	Yt'8$*eAhhPRSSTTTYt'8$*eAhhPQRRSSS#A&#B'!K#$55!C'K''r    EstruturaLclc                    | j         |_         | j        |_        | j        |_        | j        |_        | j        |_        | j        |_        | j        |_        | j        |_        | j        |_        | j	        pd|_	        | j
        pd|_
        | j        |_        | j        |_        | j        |_        | j        |_        | j        |_        | j        |_        | j        |_        | j        |_        | j        |_        | j        |_        |j                                         | j        D ]?}t/                      }|                    |           |j                            |           @d S r
  )r3   r!  r4   r  r   r5   r,  r.  r-  r"  r#  r2   r(   r$  r(  r=   r+  r/  r%  r)  r*  r  rj   r#   rE   rc   )r@   rp  rF  rP  s       r!   rK  zTEstrutura.CopyEstruturaTo  sJ   #| $ $"&/#'#3  $ $*.*A' $$($5$<!%)%7%>3" I!%!Z!%'8'+';$'+';$!%!%""$$$l 	1 	1F J
+++ $$Z0000	1 	1r    c                    t                      }|                     |           | j        dk    rt          | j                  nd}| j        |z  |_        | j        |z  |_        | j        |z  |_        | j        |z  |_        | j        |z  |_        | j	        |z  |_	        |j
        D ]}|j        |z  |_        | j         d|_        |S )u   
        Retorna uma cópia da estrutura com as quantidades normalizadas para a unidade.
        Útil para plotar o gráfico de 'Lucro por Ação' ou 'Perfil da Estratégia'.
        r   r   u    (Unitário))r  rK  r(  r   r3   r!  r4   r  r   r5   r  r)   r2   )r@   est_unitdivisorrF  s       r!   GetUnitaryCopyzTEstrutura.GetUnitaryCopy  s     <<X&&& *.1)<)<#dn%%%!  <'1 MG3 MG3"o7#/'9 MG3 & 	2 	2F!<'1FLL  9222r    
ValorAtivodiasratePercAnualc           	      <   | j         }| j        D ]}|j        dk    r||j        ||j        z
  z  z  }#|j        dv r`|j        dk    rdnd}|j        }||j        z   }|dk    rd}|t          z  }	t          ||||	||j	                  }
||j        |
|j        z
  z  z  }|S )Nrj  r  rL   rM   rN   r   rO   )
r   r  r*   r)   r3   r.   r/   rP   rQ   r;   )r@   rv  rw  rx  rU  rF  rR   r   
total_diasrS   option_values              r!   rU   zTEstrutura.BlackScholesSimple  s     l 	H 	HF{g%%fn)DEE//'-{f'<'<#M!F$55
??!&J *-> >1-QP]_lnt  oB   C   C)FGGr    rF   r   r   Vencimentosc           	          d}| j         D ]X}|j        dv rM|j        dk    rdnd}|j        }d|j        |z   dz
  z  dz   }	t	          ||||	d	z  ||          }
||j        |
z  z  }Y|S )
Nr&   r  rL   rM   rN      r   g-C6?i  )r  r*   r.   r<   rQ   r)   )r@   rF   r   r   r|  rU  rF  rR   r   rw  r{  s              r!   BlackScholesSeriezTEstrutura.BlackScholesSerie  s    l 		5 		5F{o--'-{f'<'<#M V\K7!;<tC1-AtczSTVWXX44r    c                 j    d| _         | j        D ]}|j        | j         k    r|j        | _         | j         S r   )r%  r  r/   r@   rF  s     r!   GetMaiorVencimentozTEstrutura.GetMaiorVencimento  sA     l 	9 	9F 4#777'-'8$##r    c                     t          d          }| j        D ]3}|j        dk    r&|j        |k     r|j        t
          j        fv r|j        }4|t          d          k    rt          |          ndS )Nr   rj  r   )r-   r  r*   r/   r>   r   r   rV   )r@   r   rF  s      r!   r2  zTEstrutura.GetMenorVencimento  su    ul 	3 	3F{g%%$v--})<(===!'!2$e44s6{{{!;r    c                     d}t          d          }| j        D ]1}|j        dk    r$|j        |k    r|j        }|j        |k     r|j        }2||t          d          k    rt	          |          ndfS )Nr   r   rj  )r-   r  r*   r/   rV   )r@   maior_vencimentomenor_vencimentorF  s       r!   rJ  zTEstrutura.GetVencimentos  s      <<l 	9 	9F{g%%$'777'-'8$$'777'-'8$:JeTYll:Z:Z%5!6!6!6`aaar    minX_refmaxX_refc                    t          d          }t          d          }| j        D ]w}|j        dk    rj|j        dk    r*t	          ||j                  }t          ||j                  }|j        dk    r*t	          ||j                  }t          ||j                  }x|dk    r||k     r|}|dk    r||k    r|}|t          d          k    rd}|t          d          k    rd}||fS )Nr   z-infr   rj  r&   )r-   r  r)   r.   minr   r*   r3   )r@   r  r  minXmaxXrF  s         r!   
GetXLimitszTEstrutura.GetXLimits  s    U||V}}l 	5 	5F|q  =A%%tV]33DtV]33D;'))tV^44DtV^44D q==X__Xdq==X__Xd 5<<5==  $Tzr    c                 J    d                     d | j        D                       S )Nr%   c              3   $   K   | ]}|j         V  d S rD   )r2   r  rF  s     r!   r  z+TEstrutura.GetSymbolList.<locals>.<genexpr>%  s$      >>vv{>>>>>>r    )r   r  r?   s    r!   GetSymbolListzTEstrutura.GetSymbolList$  s%    ww>>>>>>>>r    r%  menorVencimentoGanhoMinc	                 J   |d u}	|t          j        |          z  }
|
|z  }|	rc|                                 d|_        |                    dddd          }|                    dddd          }|                    dddd          }|}d|z  }|}d}|d|z  z
  }|d	z  }d}|t          |d|z  z   d
          k     rt          |||          }||z  }|dk    r|                     ||          }d|z
  t          j        d||z
  |z  dz  z            z  |z   }||z  |z  }||z  }|	rH|	                    ||dd           |	                    ||dd           |	                    ||dd           ||z  }|t          |d|z  z   d
          k     |	r|                    dddd          }d|j
        _        t          d          D ]#}|	                    ||dz
  |z  z   ddd           $|                    dddd          }d|j
        _        |	                    |ddd           ||z  S )NFr  r   r  r  zExpected profitr   r&      g      ^@r   r   rj  r   r%   r  r  r  r  r  r  )r   r   rt   r}   r{   r  r   r\  r   r   r   r   r  )r@   r$  r   rg  r%  r  rV  r  r  r  VolatilityForNDaysrU  r  	serieLiner  XmabnormalTotalr   rb  rc  rd  re  ajustePayoffhoperB  s                              r!   CalcExpectedProfitBSPonderadoz(TEstrutura.CalcExpectedProfitBSPonderado(  s   $&	"TYq\\1'$.
 	S EL $$Xq+uEEE((1k5III(():A{ERRI
N1z>!B	#dQ^+U3333"1dJ77H8#K1uu"99!SAA !A"R1q7H2H)I)IIAM+-<T!	 ?KK8R>>>OOA{BEEEOOAtR>>>IA #dQ^+U3333   	3$$Xq*eDDE %EI1XX N NDAEZ#77BMMMM$$WaFFE %EIKKa\2224r    agressividadec                    t                      }|                     |           |j        D ]H}|j        dk    r#d}|xj        |z  c_        |xj        |z  c_        0|j        |_        |j        |_        I|                                |_        |S r   )r  rK  r  r8   r7   r6   rL  r3   )r@   r  result_estruturarF  spread_totals        r!   FazerEstruturaAgressivaz"TEstrutura.FazerEstruturaAgressiva_  s     &<<-...&. 
	3 
	3F1$$  !</</"("2"("2#3#?#?#A#A r    c                 4   t                      }|                     |           d}t          | j                  D ]\  }}|j        |j        z
  |_        t          |j        |z  d          }t          |j        |         j	                  }|j        |         xj        |z  c_        |j        |         xj        |z  c_        |j        |         j
        ||z  z
  |j        |         _
        ||j        |         j	        |j        |         j
        z  z  }||_
        |S )Nr&   )r  rK  r?  r  r7   r6   r:   r   r   r)   r3   )r@   r  r  custo_totalrB  rF  r  
sinal_opers           r!   FazerEstruturaAgressivaSpreadz(TEstrutura.FazerEstruturaAgressivaSpreads  s   %<<-..."4<00 	c 	cIAv!'6?!BF"6#5#ErJJL.6q9?@@J$Q'00L@00$Q'00L@002B2J12M2UXbeqXq2q$Q'/+3A6<?O?WXY?Z?bbbKK#. r    c           
      n   g }|                                   | j        D ]<}|                    |j        |j        |j        |j        |j        |j        d           =t          j
        |          }|d                             dj                  |d<   |d                             dj                  |d<   |S )z
        Substitui TStringGrid por pandas.DataFrame para estruturar os dados da estrutura.
        Retorna um DataFrame que pode ser facilmente exportado para HTML.
        )r)   r*   r+   r2   r  Valor Inr  {:.2f}r  )rC  r  r_   r)   r*   r+   r2   r.   r3   r  	DataFramemapr!  )r@   dadosrF  r  s       r!   EstruturaToGridzTEstrutura.EstruturaToGrid  s     l 	 	F LL -"N      \%   (|''888J++HO<<:	r    Gridc                    	 t          | j                  dz   |_        d|_        d|_        d|j        d         _        |                                  t          | j                  D ]z\  }}t          |j
                  |                    d|dz             _        |j        |                    d|dz             _        |j        |                    d|dz             _        |j        |                    d|dz             _        |j        d|                    d|dz             _        |j        d|                    d	|dz             _        t          |j                  |                    d
|dz             _        |j        d|                    d|dz             _        d|                    d|dz             _        d|                    d|dz             _        ||                                 d S # w xY w)Nr   r   r   z6Quant,tipo,Oper,Nome,Strike,ValorIn,Dias,Volat,Vol_Impr   r   .2fr   r   r  r6  r  r%      	   )rn  r  r   	FixedColsr   r   r   rC  r?  r   r)   r   r   r*   r+   r2   r.   r3   r/   r;   r   )r@   r  rB  rF  s       r!   EstruturaToGrid_Detalhesz#TEstrutura.EstruturaToGrid_Detalhes  s   	--1DMDNDM%]DIaL"OO&t|44 
0 
0	6-0->->

1a!e$$*-3[

1a!e$$*-3[

1a!e$$*-3[

1a!e$$*06-C-C

1a!e$$*06-D-D

1a!e$$*-01B-C-C

1a!e$$*060C-I-I

1a!e$$*-/

1a!e$$*-/

1a!e$$**  """DDDDDs   G4G8 8G:c                 b    | j         D ]&}|j        dk    r|j        |_        |j        |_        'd S r   )r  r)   r7   r3   r6   r  s     r!   rC  zTEstrutura.FixValorIn  s@    l 	1 	1F|a!'!'		1 	1r    c                    dt           dt           dt           fddt          t                    dt           ffd}d | j        D             }|sd S  ||          }|dk    rd S | j        D ]}t          |j        |z            |_        d S )	Nr  r  rJ   c                     |r	|| |z  }} |	| S rD   r   )r  r  s     r!   mdcz(TEstrutura.NormalizarQuants.<locals>.mdc  s&      !a%1   Hr    valoresc                     | sdS | d         }t          dt          |                     D ]} || |                   }t          |          S )Nr   r   )r  rn  r   )r  r   rB  r  s      r!   mdc_arrz,TEstrutura.NormalizarQuants.<locals>.mdc_arr  sX    $11QZF1c'll++ 1 1VWQZ00v;;r    c                     g | ]	}|j         
S r   )r)   r  s     r!   r  z/TEstrutura.NormalizarQuants.<locals>.<listcomp>  s    AAA&AAAr    r   )rV   r   r  r   r)   )r@   r  valores_quant	mdc_valuerF  r  s        @r!   NormalizarQuantszTEstrutura.NormalizarQuants  s    	3 	3 	3 	 	 	 	
	T#Y 	3 	 	 	 	 	 	 BADLAAA 	FGM**	>>Fl 	; 	;F 	!9::FLL	; 	;r    c                 
   g }| j         D ]0}|j        dk    r#|j        |vr|                    |j                   1|                    ||g           |                                 d}t          d|          D ])}||||z
  z  |z  z   }||vr|                    |           *|                                 g }	|D ]K}
|                     |
|          }d}| j        dk    r|dz  | j        z  }|	                    |
||d           Lt          j
        |	          }|d                             d	j                  |d<   |d
                             d	j                  |d
<   |d                             d	j                  |d<   |S )z
        Substitui TStringGrid por pandas.DataFrame para estruturar os dados de Payoff.
        Retorna um DataFrame que pode ser facilmente exportado para HTML.
        rj  r   r   r&   r   r@  )Valor Ativo (R$)PayOff (R$)Retorno (%)r  r  r  r  )r  r*   r.   r_   r   rD  r  r\  r3   r  r  r  r!  )r@   r  r  rV  rE  rF  
num_pontosrB  r  r  
strike_valpayoff
percentager  s                 r!   PayOffsToGridBSzTEstrutura.PayOffsToGridBS  s   
 &(l 	8 	8F{g%%=55!((777 	dD\*** 
q*%% 	, 	,A1t,z99EM))$$U+++ ( 	 	J00SAAFJ|q  $sldl:
LL$.%)      \%   "$$6!7!;!;HO!L!L}-11(/BB=}-11(/BB=	r    r  c                    ddl }ddlm} ddlm} d}|                                \  }	}
|                                \  }}|rd | j        D             }d | j        D             }|j        d         }|D ]9}|	                    ||ddd	
           |
                    |dd|dddd           :|D ]9}|	                    ||ddd	
           |
                    |dd|dddd           :|r| j        dk    r| j        dk    r|                                 \  }}|dk    r|nd}| j        | j        z   |j        |          z  }|dk    r|||z
  dz  z   }t          dd          D ]|}|dk    r	| j        ||z  z   }|	                    ||j        d         ddd
           |	|cxk    r|
k    r4n K|                    ||| dddd|j        d         dddddd 	  	         }t#          | d!          r| j        dk    ry| j        | j        z
  }|                    |d"dd#d$           |                    d%|d&|d'd"d(d)d*|                                +           t-          d,| j        d-| j        d.           | j        dk    r#|
                    | j        dd/dddd0d1d23	  	         | j        dk    r| j        n| j        }| j        | j        z  | j        z
  }t-          d4| j        d-| j        d.           |dk    rS|
                    ||d5d6dd7d8           |                    |t7          d|          t9          d|          d6dd9           |r7| j        dk    r.|	                    | j        d:dd;d<| j        d'd=d>           dS dS dS )?u   
        Plota Strikes, Preço do Ativo e Sigmas no objeto Axes do Matplotlib.
        Mantendo as cores e estilos da especificação original.
        r   Nr   c                 2    g | ]}|j         d k    |j        S rL   r  r  s     r!   r  zMTEstrutura.Plotar_Strikes_ValorAtivo_Sigma_Matplotlib_SVG.<locals>.<listcomp>/  &    SSS2FARARRYARARARr    c                 2    g | ]}|j         d k    |j        S rm  r  r  s     r!   r  zMTEstrutura.Plotar_Strikes_ValorAtivo_Sigma_Matplotlib_SVG.<locals>.<listcomp>0  &    QQQ"5@P@PBI@P@P@Pr    	orangered:r   r  r  >r  r   r  r  markerr   
markersizezordermarkeredgecolormarkeredgewidth<r~  rk  rj  r   r  r3     σcenterr   whiter  noneround,pad=0.2	facecolorr  	edgecolorboxstyle)verticalalignmenthorizontalalignmentfontsizer   bboxr  r!  purpler  )r   r   r  r  r  ri  z Alvo: r  bottomr  bold)r   var  
fontweight	transformzB

Plotar_Strikes_ValorAtivo_Sigma_Matplotlib_SVG: y_alvo: ValorAimz   valorin:

or   Entrada   )r  r   r  	fillstyler  r   r  z<

Plotar_Strikes_ValorAtivo_Sigma_Matplotlib_SVG: valorNow:
sr   	P&L Atual)r  r   r  r   r  )r   r  r  greenr  u   Preço Entrada ())r   r  r  r   r  )r  r  r  r6  r7  get_xlimget_ylimr  CSS4_COLORSaxvliner  r$  r"  rJ  r   r  textrg   r!  r3   r  get_yaxis_transformrs   r#  r5   r(  vlinesr  r   )r@   r  r  r  r  r  r  r:  rP   x_min_limitx_max_limity_min_limity_max_limitstrikes_callsstrikes_putsstrike_colorr.   rM  rN  dias_projecaovolatility_reais
text_y_posrB  	sigma_valy_alvox_atualy_atuals                              r!   r%  z9TEstrutura.Plotar_Strikes_ValorAtivo_Sigma_Matplotlib_SVG  s%   
 	''''''++++++   $&;;== [#%;;== [  	I TSSSSMQQQQQL #.{;L ( I I

6PQY\
]]]#\aXY+2C  I I I I ' I I

6PQY\
]]]#\aXY+2C  I I I I  &	DJNNt/@1/D/D%)%8%8%:%:"J
*4q..JJbM  $04:=@V@VV!## )K+,E+MM
r1  AAvvx $ 1A8H4H HI JJy0CK0P\`lmuxJyyy #i>>>>;>>>>>%& HHH.608%'")"5k"B-4),-3,;	" " $&     $ 4$$ 		M!););]T\1FJJx43VYJZZZ GGD&"8F"8"8"8! 4466  8 8 8 XZ^Zgivx|  yE  FL  M  M  M q  GGD%qGPR$ayQS  U U U
 )-(:Q(>(>$$$DDU=/$,>OQUQ^`moso{  }C  	D  	D  	DQ;;GGGWS2%b  2 2 2 IIgs1gAwvY\dgIhhh  	 1A 5 5JJ!A):AAAA      	 	 5 5r    c                 
   ddl }ddlm} ddlm} |                                \  }}	|rd | j        D             }
d | j        D             }|
D ]O}|                    ||j        d         ddd	           |	                    |dd
|j        d         dddd           P|D ]O}|                    ||j        d         ddd	           |	                    |dd|j        d         dddd           P|r| j
        dk    r| j        dk    r|                                 \  }}|dk    r|nd}| j
         |j        |          z  }|| j        z  }|dk    rxt          dd          D ]g}| j        ||z  z   }|                    ||j        d         ddd	           |                    ||dz  | dddd|j        d         ddddd           h|r6| j        dk    r-|                    | j        dd d!d"| j        d#d$%           dS dS dS )&u   
        Plota Strikes, Preço do Ativo e Sigmas no objeto Axes do Matplotlib.
        Substitui TChart por ax (matplotlib.axes.Axes).
        r   Nc                 2    g | ]}|j         d k    |j        S r  r  r  s     r!   r  z>TEstrutura.Plotar_Strikes_ValorAtivo_Sigma.<locals>.<listcomp>  r  r    c                 2    g | ]}|j         d k    |j        S r  r  r  s     r!   r  z>TEstrutura.Plotar_Strikes_ValorAtivo_Sigma.<locals>.<listcomp>  r  r    r  r  r   r  r  r  r  r   r  r  r  r  r~  rj  r   r  r3  r  r  r   r  r  r  r  r  )r  r  r  r   r  r  r  r  u   Preço Spot (r  r  )r   r  r  r   )r  r  r  r6  r7  r  r  r  r  r  r$  r"  rJ  r   r  r  )r@   r  r  r  r  r  r  r:  y_miny_maxr  r  r.   rM  rN  r  volatility_for_n_daysr  rB  r	  s                       r!   r  z*TEstrutura.Plotar_Strikes_ValorAtivo_Sigma  s   
 	''''''++++++ {{}}u  	ISSSSSMQQQQQL
 ( I I

6)<[)IUXdemp
qqq#W5H5Ubclm+2C  I I I I ' I I

6)<[)IUXdemp
qqq#W5H5Ubclm+2C  I I I I  	DJNNt/@1/D/D%)%8%8%:%:"J
*4q..JJbM$(J1G1G$G!4t7HH!##r1  A $ 1A8H4H HIJJy0CK0P\`lmuxJyyy GG!*2,4!#%1+>)0%()/(7	      $  	G 1A 5 5JJt(3RU  ^Fmqm~  ^F  ^F  ^F  ^FJ  G  G  G  G  G	G 	G 5 5r    tiposquantsc                    t          |          t          |          k    rt          d          t          t          |                    D ]7}||         dk    rdnd}|                     ||         ||         |dd           8d S )Nz4Length of 'tipos' and 'quants' arrays must be equal.r   rM   r  r&   )rn  
ValueErrorr  rW  )r@   r  r  rB  r  s        r!   SetarEstruturazTEstrutura.SetarEstrutura  s     u::V$$STTTs5zz"" 	; 	;Aay1}}#ANN6!9eAh3::::	; 	;r    PreencherValorInPreencherValorOutc                 $   d}t                      }| j        D ]}|                    |j                   |                    | j                   g }t                                                      }	 |                    |j        |           d}d}	t          | j                  D ]\  }
}t          |          D ]\  }}|j        |j
        k    r|j        dk    rA|	|j        |j        z  z  }	||j        |j        z  z  }|r|j        |_        |r|j        |_        n@|	|j        |j        z  z  }	||j        |j        z  z  }|r|j        |_        |r|j        |_        |j        |_        |j        |_         n|D ]}| j        |j
        k    r	|j        } n|| _        |r|	| _        |r|| _        |D ]}|                                 d }|                                 d S # |D ]}|                                 d }|                                 w xY w)Nr&   rM   )r   r  rc   r2   r(   r   CreateCotarSymbolsplusr   r?  Symbolr+   r)   bidaskr3   r4   r6   r7   r"  rf   )r@   r  r  valor_ativo_foundlista_ativosrF  
stock_dataoplab_instancetotal_mtotal_dmjr   datas                r!   CotarEstruturazTEstrutura.CotarEstrutura  sh   "}}l 	* 	*FV[))))(((,.
**,	%++L,BJOOOGH&t|44  	6(44  GAt{dk11!;#--$tx(??H#v|dh'>>G/ :150 ;26($tx(??H#v|dh'>>G/ :150 ;26(*.(*.(% 2* #  >T[00(,%E 1 !2D  ) ( '& #  L""$$$$$ #  L""$$$$s   2D;G 1HVencimentoReferenciac                 B   t                      }| j        |_        | j        |_        | j        |_        | j        dz   |_        | j        D ]U}|j        |k    s|j        dk    r=t                      }|	                    |           |j        
                    |           V|S )Nz (Restante)rj  )r  r"  r(   r$  r2   r  r/   r*   r#   rE   rc   )r@   r)  estrutura_futurarF  rP  s        r!   $DerivarEstruturaParaVencimentoFuturoz/TEstrutura.DerivarEstruturaParaVencimentoFuturoU  s    %<<(,(9%%)^"!% $	M 9l 	9 	9F!$888fkW>T>T$YY
##J/// (,,Z888r    c                 "   t                      }|                     |           | j        dz   |_        |                                 \  }}|t	          d          k    r|S |j        D ]}|j        dk    r||_        |                                 |S )Nz (Venc. Unificado)r   rj  )	r  rK  r2   rJ  r-   r  r*   r/   rL  )r@   estrutura_simplificadar  menor_venc_dummyrF  s        r!   "DerivarEstruturaComVencimentoUnicoz-TEstrutura.DerivarEstruturaComVencimentoUnicof  s    !+3444&*i2F&F#-1-@-@-B-B**uU||++)) -4 	5 	5F{g%%$4!**,,,%%r    c                    |t          j        |          z  }||z  }|t          |z  z
  }|t          z  }	d}
||t          |z  z   k     r8||k    r||k    rt	          |||          }|
|z  }
||	z  }||t          |z  z   k     8|
|	z  S r
  )r   r   r[  rZ  r   )r@   r$  r   rg  r  r  r  rU  r   rb  
prob_totalrd  s               r!   CalcProbabilidadeNaFaixaz#TEstrutura.CalcProbabilidadeNaFaixa{  s     %	! 4*T1
0:==44
$6CCCCYQ)^^&q$
;;h&
IA	 $6CCCC
 D  r    N1N2c                    d}d}| j         D ]S}	|	j        |k    rF|	j        dk    r|dk    s|	j        |k    r|	j        }|	j        dk    r|dk    s|	j        |k     r|	j        }T|dk    r|dk    r
||k    rd}d}|                     |||d ddddddd          }
|                     |||d ddddd||          }|
|z
  }d }d}	 |                     |||||          }|dk    rF|                     |          }|                    ||||t          j	        dd ddddddd          }||z  }|r|
                                 n# |r|
                                 w w xY w||z   S )	Ng      rm  rZ   rL   r2  r&   Fr   )r  r/   r*   r.   rd  r3  r,  r  r   r   rf   )r@   r$  r   r4  r5  rV  r  limite_inf_nao_exerciciolimite_sup_nao_exerciciorF  
E_Total_N1E_Contrib_NaoExercicio_N1Esperanca_Se_Exercicio_N1estrutura_remanescenteEsperanca_Se_NaoExercicio_N2probabilidade_nao_exercicio
E_Total_N2s                    r!   ,CalcExpectedProfitCondicionalDoisVencimentosz7TEstrutura.CalcExpectedProfitCondicionalDoisVencimentos  s?   #' #' l 	A 	AF B&&;%''0B66FMLd<d<d39=0;&((0B66FMLd<d<d39=0$**1IR1O1O$'???'*$'*$ BB5$PSUYDI5RWY^`egikmo o
$($Q$QRWY]_bdhQVX]_dfkmrQi  lD%E %E! %/1J$J! 8<'*$	1*.*G*GtUWYq  tL  +M  +M'*Q..)-)R)RSU)V)V& 4QQRWY]_aQTVbVyQRTXZ_afhmotv{}  BDE E
 0KZ/W,% 1&..000 & 1&..00001 )+GGGs   >A%D: :Ec                 \   t          d|                                 d           t                                                      }g }g }	 | j        D ]}|                    |j                   | j        r#| j        |vr|                    | j                   | j        sJ| j        rC| j        d         j        dd         }|dv r%|dk    r|dz   n|d	z   }|                    |           d
                    |          }t          d|            |	                    |          }d}| j        D ]%}|j
        dk    r(t          d          |_        t          d          |_        |D ]}	|j        |	j        k    r|j
        dk    r|	j        dk    r|	j        |_        |j
        dk    r|	j        |_        |	j        |_        |	j        |_        |	j        |_        |	j        dk    r|	j        }|	j        r$t-          |	j                  dk    r|	j        | _        t/          |	d          r.|	j        dk    r#|	j        | _        | j        dk    r|	j        | _         n'|rd| j        s|d         j        r|d         j        | _        | j        s|d         j        r|d         j        | _        | j        dk    r|dk    r|| _        | j        dk    r| j        rt          d| j         d           |	                    | j                  }
|
r#|
d         j        dk    r|
d         j        | _        |
r#|
d         j        dk    r|
d         j        | _        |
                                 t          d|                                 d           |                                 dS # |                                 w xY w)u   
        Método de instância que cota e enriquece a própria estrutura usando a API Oplab.
        É a versão final da função 'enriquecer_estrutura'.
        z

CotarEstruturaAPI:r  r   Nr   )BOVAPETRVALErB  114r   u'   DEBUG: Consultando API para símbolos: r&   rj  r'   r   rv  ri  z$DEBUG: Sigma zerado. Cotando apenas z para Sigma.)rs   rT  r   r  r  r_   r2   r(   r   r  r*   r-   r.   r/   r  r  Askr7   Bidr6   r8   r$  rn  rg   rv  r#  r"  ri   rf   )r@   r#  r"  r!  rF  base_tickerativo_completocomma_separated_symbolssigma_encontrador'  stock_data_ativos              r!   CotarEstruturaAPIzTEstrutura.CotarEstruturaAPI  s    	&

F;;;**,.
P	%, 1 1##FK0000~ 5$."D"D$$T^444> 9dl 9#|A3BQB7#;;;<G6<Q<QkD&8&8WbehWh^!((888 '*hh|&<&<#U<SUUVVV'889PQQJ  #,  ;'))$)%LLFM(-eF%&  D{dk11!;'11dkAoo,0KFM ";'1104F-*.(*.(+/8(:>>/3z,> <c$..A.AA.E.E-1^DN"466 D4?Q;N;N15D.#0D8848O 13 28  3 >:a=+B >&0m&=T^) Bjm.F B)3A)AT&J!OO(81(<(<"2TZ zQ4>YT^YYYZZZ#1#B#B4>#R#R # <(8(;(AA(E(E"21"5";TZ# H(8(;(F(J(J)9!)<)GT& &&(((*DHHJJ??? ""$$$$$N""$$$$s   	L6N N+r@  	min_preco	max_precor  	cdi_anualc                     ddl } |j        |||          }g }|D ]-}|                     ||          }	|                    |	           . |j        |          }
t          j        ||
| j        d          }|S )u  
        Gera um DataFrame de Payoff (Lucro/Prejuízo) para plotagem.

        Args:
            min_preco, max_preco: Limites do eixo X para o preço do ativo.
            num_pontos: Número de pontos a serem calculados.
            cdi_anual: Taxa de juros (CDI), usado no CalcPayoffnoVencimento.

        Retorna:
            pd.DataFrame com colunas ['Preço do Ativo', 'Lucro/Prejuízo', 'Estratégia'].
        r   N)r  u   Lucro/Prejuízou   Estratégia)r  r  r\  r_   arrayr  r  r2   )r@   rO  rP  r  rQ  r  precosr	  r  
payoff_vallucro_prejuizo	df_payoffs               r!   GerarDataFramePayoffzTEstrutura.GerarDataFramePayoff	  s     	
 Y	:>>  	' 	'E 44UIFFJNN:&&&& "'**L%-9"
 "
  	 r    
dados_jsonc                     |             }|                     dd          |_        |                     dd          pd|_        |                     dd          |_        |                     dd          |_        |                     dd          p|                     d	          pd|_        |                     d
d          |_        |                     dd          |_        |                     dd          p|                     d          pd|_        |                     dd          |_	        |                     d          p|                     d          pd|_
        |                     d          pd|_        |                     d          pd|_        |                     d          p|                     d          pd|_        	 t          |                     dd                    |_        n!# t           $ r t          j        |_        Y nw xY w|                     dd          |_        |                     dg           D ]}t'                      }|                     dd          |_        |                     dd          |_        |                     dd          |_        |                     dd          |_        |                     dd          |_        |                     dd          |_        |                     dd          |_        |                     dd          |_        |                     d d          |_        |                     d!d          |_        	 t9          |                     d"d#                    |_        n!# t           $ r t8          j        |_        Y nw xY w|j                             |           |S )$u   
        [CLASSE] Converte um dicionário de dados (JSON) em um novo objeto TEstrutura.
        Usa 'cls' para instanciar a classe.
        r=   r%   	quantBaser   rN  	ativoBasevalorAtivoInr&   valor_ativo_insigmavalorInvalorAim	valor_aimvalorOutr+  dter   r/  r%  r&  info	categoria	corretoraopcoesquantrs  operrM   r.   vencimento_diasvalorBidvalorAsk	valorLaststatusr   )!r   r=   r(  r2   r(   r"  r$  r3   r!  r4   r+  r/  r%  r&  r  r)  r  r  r*  r#   r)   r*   r+   r.   r/   r6   r7   r8   r   r>   r   r  rc   )rp  rY  rI  op_datarM  s        r!   #ConverterEstruturaJSONParaEstruturaz.TEstrutura.ConverterEstruturaJSONParaEstruturaB	  s\    CEE	!~~dB//	(nn[!<<A	#33	(nn["==	!+!D!D!o
WgHhHh!olo	$..#66	&NN9c::	'^^J<<b
{@[@[b_b	'^^J<<	"u--K1F1FK!	$.NN3D$E$E$J	!$.NN3D$E$E$J	!#//O:>>&3I3IOR		;",Z^^K-L-L"M"MI 	; 	; 	;",":I	;(nn["==	!~~h33 	& 	&GB{{7A..BHkk&"--BGkk&#..BGkk&"--BGHc22BI#KK(91==BM Y44BJ!++j#66BK!++j#66BK";;{C88BL0)'++h*H*HII		 0 0 0)/			0 !!"%%%%s$   	(G2 2HH$(NN+*N+rI  c                 $   i d|j         d|j        d|j        d|j        d|j        d|j        d|j        d|j        d	|j        d
|j	        d|j
        d|j        d|j        d|j        j        d|j        dd |j        D             S )u   
        [CLASSE] Converte um objeto TEstrutura em um dicionário de dados (JSON) serializável.
        O parâmetro é a instância da estrutura a ser serializada.
        r=   r[  rN  r\  r]  r_  r`  ra  rc  r+  re  r/  r%  rf  rg  rh  c                     g | ]L}|j         |j        |j        |j        |j        |j        |j        |j        |j        |j	        |j
        j        d MS ))ri  rs  rj  rN  r.   rk  r`  rl  rm  rn  ro  )r)   r*   r+   r2   r.   r/   r3   r6   r7   r8   r>   r   r  s     r!   r  zBTEstrutura.ConverterEstruturaParaEstruturaJSON.<locals>.<listcomp>	  sj          XGGG i')}!z " "!# io   r    )r=   r(  r2   r(   r"  r$  r3   r!  r4   r+  r&  r/  r%  r)  r   r*  r  )rp  rI  s     r!   #ConverterEstruturaParaEstruturaJSONz.TEstrutura.ConverterEstruturaParaEstruturaJSONu	  s   !
),!
,!
 IN!
 ,	!

 I2!
 Y_!
 y(!
 	*!
 	*!
 9=!
 IN!
 y8!
 y8!
 ,2!
 ,!
     $+  !!
 !	
r    c                       dd l }dd lm} ddlm}  j        D ]1}|j        dk    r$|j        dk    r j        dk    r j        nd|_        2 |j	        ||d          }t          t          t          d  j        D                                           }	t          t          t          t          |          |	z                                 }
 fd|
D             } fd|
D             }||z   }t          |          t          |          }}||k    r||z
  d	z  nd
}||z  }||z  }t           j                  dk    rt           j         j        z            nd
}d|z    fd|D             } fd|D             } j         j        z
   j        z  }| z  } |ddigg          }|                    |                    |
d         g| z  gdddd          d           |                    |                    ||gddgdt+          dd          dd          d           t-           d          r j        dk    r j         j        z
   j        z  }|                    |                    ||g||gdt+          ddd           d!dd"          d           |                    d#d$|d%d&|d'dt+          dd()          d*+            j        dk    r|                    |                     j         j        g||gdt+          d,d-d.           dd          d           |                    |                     j        gdgdt+          d/d%d0t+          dd1          2          d3d4          d            j        dk    r|                    |                     j         j        g||gdt+          d,d-d.           dd          d           |                    |                     j        gdgdt+          d5d%d0t+          dd1          2          d6d4          d            j        dk    r j        dk    rډ                                 \  }}|dk    r|nd7} j         j        z   |j        |          z  }t;          d8d9          D ]}|dk    r	 j        ||z  z   }|                    |                    ||g||gdt+          d:d;d<=          dd          d           |                    |d>d#| d?dt+          d:d@)          d*A           |                    |                    |
|dB|t+          dCdD          dEF          d           |                    |                    |
|dG|t+          dCdDdH           dIF          d            j        D ]}|j        dk    r|j        dJk    rdKndL}|                    |                    |j        gdgdt+          |d:d%t+          dMd1          N          ddO          d           |                    |j        t+          d:d.d<=          dPQ            j        dk    r j        n j        }|                    |                    |g|gd|gt+          dRd%dCS          dTdUV          d           tA          dW|dX|           |!                    dY||gddddZd[d'\           |"                    d]||gddddZdddd[d^           |"                    d_d`| z  | z  gdddda           |#                    dbdct+          dddedfd`d<g          t+          dhdidjdhk          dl j$         dm %                                 dno           |&                    ddp          S )qNr   )make_subplotsrj  r  r  c                 2    g | ]}|j         d k    |j         S r  r  r  s     r!   r  z2TEstrutura.PlotarPayoff_Plotly.<locals>.<listcomp>	  r  r    c                 <    g | ]}                     |          S r   r  r  s     r!   r  z2TEstrutura.PlotarPayoff_Plotly.<locals>.<listcomp>	  r  r    c                 >    g | ]}                     |d           S r  r  r  s     r!   r  z2TEstrutura.PlotarPayoff_Plotly.<locals>.<listcomp>	  r  r    g333333?r2  gMbP?r@  c                     g | ]}|z  S r   r   r  r   fators     r!   r  z2TEstrutura.PlotarPayoff_Plotly.<locals>.<listcomp>	  s    777Qa%i777r    c                     g | ]}|z  S r   r   r{  s     r!   r  z2TEstrutura.PlotarPayoff_Plotly.<locals>.<listcomp>	  s    555AQY555r    secondary_yT)specsmarkersFskip)r   r   modevisible
showlegend	hoverinfo)r~  linesr  r  )r   width)r   r   r  liner  r  r!  r  r  z5,5)r   r  dashAlvo)r   r   r  r  rz   r  r  paperri  r   zAlvo: r     )r   sizer  )xrefr   r   yshiftr  	showarrowfontbgcolorr  r   dotzcircle-xyellow)r  r   )symbolr  r   r  zAtivo (Ent.))r   r   r  r  rz   r  z
circle-dotzAtivo (Atual)r~  rj  r   r  z5,3r   )r   r  r  r   r     )r   r   yrefr  r  r  r  r/   r   g      @z4Venc: R$%{y:.2f} (%{customdata:.2f}%)<extra></extra>)r   r   rz   
customdatar  hovertemplateAtualz5,4z5Atual: R$%{y:.2f} (%{customdata:.2f}%)<extra></extra>rL   ztriangle-rightztriangle-leftr  )r  r   r  r  )r   r   r  r  r  r  r  )r   r  opacitysquare)r  r  r   r  z3P&L: R$%{y:.2f} (%{customdata:.2f}%)<extra></extra>)r   r   r  r  r  rz   r  z	

x_atualr  r  z#eeezbelow traces)titler  showlinemirror	linecolor	gridcolorlayerhoverformatzP&L Financeiro (R$))r  r  r  r  r  r  zerolinezerolinecolorzerolinewidthr  r~  zP&L Percentual (%)right)r  sider  r  r  showgridr~  z	x unifiedplotly_whitehr  gRQ?)orientationyanchorr   xanchorr   r   <   P   )r   r   tr  r  r  r  )	hovermodetemplater&  marginr  )	full_htmlinclude_plotlyjs)'r  plotly.graph_objectsgraph_objectsplotly.subplotsrv  r  r*   r;   r$  r  r  r  r  r  r   r   r3   r(  r5   	add_traceScatterdictrg   r!  add_annotationr"  r#  rJ  r   r  r.   	add_vliners   update_xaxesupdate_yaxesupdate_layoutr2   r2  to_html)!r@   r  r  rV  r  gorv  rM  r  r  r  r,  r-  y_tudoymin_rymax_rmargemrt  	perc_vencperc_nowr  
perc_atualr
  r
  maior_vmenor_v	dias_proj	vol_reaisrB  r	  r  r  r|  s!   `  `                            @r!   PlotarPayoff_PlotlyzTEstrutura.PlotarPayoff_Plotly	  s:
   ))))))111111 , 	P 	PBw'!!?a''48J4E4Edjj4BO "bk$c22c"U"Ut|"U"U"UVVWWXXtC[(9(9G(C$D$DEEFF \[[[[][[[YYYYY=YYY +Vc&kk-3v-=-=&6/T))3&&69$,6G6G%6O6O#dl4>1222UXg 8777,777	5555555=4</?o
 m]D$9#:";<<< 	bjjQ Ve^$4Eev ! 
 
  	 	 	 	 	bjjTl!fG3/// ! 
 
  	 	 	 	 4$$ 	!););mdl2dnDF MM"**,6"%@@@   %   !  " " " *f***r222  	 	 	 q  MM"**$d&786"qu===   %   !  " " " MM"**$%#%"Cw777	   $  %   !  " " "  !!MM"**%t'9:6"qu===   %   !  " " " MM"**%&#'"Cw777	   %  %   !  " " "  :>>d/!33#2244GW#*Q;;BI)DJ69K9KKI2q\\  668 -I=	 bjj ),v& Ke1EEE$$ )    %  & & & "" #Kb999# #     	bjj|,9F#...P ! 
 
 	 	 	 	 	 	bjj{XF#E:::Q ! 
 
 	 	 	 	 	 , 	k 	kBy1}}-/W->->))ObjjykaSyv[rPT[^fmPnPnPnooo$ )    %	  & & &
 	;UZ[0\0\0\fijjj
 )-(:Q(>(>$$$DDUbjjG9		WaVbxb???kO ! Q Q^c 	 	e 	e 	e 	mGIg666 	0,$'V 	 	 	 	 	 	'6" !   	 	
 	
 	
& 	&E>6E>2Wu 	 	
 	
 	
 	!#CT7VWXXX"bB///MTYMMD,C,C,E,EMMM 	 	
 	
 	
 {{UU{CCCr    c                 2    | j         D ]}|j        |_        dS )u:   Salva o ValorIn (preço da transação) no TransacaoValue.N)r  r3   r9   r  s     r!   SaveValorInzTEstrutura.SaveValorInc  s*    l 	3 	3F$*NF!!	3 	3r    c                     | j         D ]=}|j        |_        |j        dk    r|j        |_        &|j        dk     r|j        |_        >dS )u   
        Restaura o ValorIn com base no TransacaoValue e ajusta Bid/Ask
        para refletir o preço de transação.
        r   N)r  r9   r3   r)   r7   r6   r  s     r!   RestoreValorInzTEstrutura.RestoreValorInh  s\    
 l 	1 	1F#2FN |a"(. !!"(.	1 	1r    rD   )r&   NTTTTT)NTTTTTrZ   rZ   )rp  r  )rJ   r  )r@  r&   )Or   r   r   rA   rf   r3  rG  rO  r   rT  r-   r   rV   r  rg  classmethodr   rt  r  r   rp   boolr  r  r  r#   r  r	   r  r/  r;  rG  rS  rL  rW  rY  r\  r]  rb  rd  rf  ro  rK  ru  rU   r  r  r2  rJ  r  r  r  r  r  r  r  r  r   r  rC  r  r  r%  r  r   r  r(  r,  r0  r3  r@  rN  rX  r   rq  rt  r  r  r  r   r    r!   r  r    sa       & & &>  H H H  B1 1 1:!S ! ! ! !p#65 #6e #6RW #6,8#6SV#63H#6 #6 #6 #6T 2# 2%S%8L2M 2 2 2 [2 |s || | | | [|@#5 # #X[ #bg #,8#SV#_ghn_o#:>#LP#^b# 04# AE# RW# di# ns# # # #L	 5J 	 W\ 	 in 	 v{ 	   AF 	  	  	  	 P& PG\ P/4PAFPQUP04PJNP P P P&q qU qX[ qbg qlq q q q q(00 0 	0
 0 0 0 
0 0 0 0d=.=. =. 	=.
 =. =. =. 
=. =. =. =.J.. . 	.
 . . . . . .P[ [e [5 [u [ei [ [ [ [,-  - u - E - PU - fj -  -  -  - x
U 
 
 
 
.s .# .S .5 .VY . . . .!# !S ! !UZ !cf !qv ! ! ! !&  Xe_ X]    6u s Y^ ch    0 VYbfim9=z zE z zU z.6v.>z[_z37zLPzbfz 37z CHz z z z He H5 HW\ Hemnteu HEIHW[HimH:>HKOH\aHnsHx}H H H H aegkgih h% hu h_b hin h,4V,<hY]h15hJNh`dh 15h INh `eh oth h h h (E ( (5 (U5RW<EX ( ( ( (<1 1 1 1B   <U # e X]    &5 U u 3 SX    $C $ $ $ $<C < < < <bc3h b b b b5 E eE5L>Q    0?s ? ? ? ?3 5 3  3 # 3 `c 3 7:3 AF3 RW3 `hio`p3 uz3  3  3  3 n U  |        ( 5  \        &! ! ! ! !H[    61 1 1; ; ;6.E . .U .r| . . . .dz zUY zmq z  BF z z z zzDG# DGd DG^b DGrv DG DG DG DGp	;DI 	;tCy 	; 	; 	; 	;7%t 7% 7% 7% 7% 7%t   Q]        "& & & &*!e !5 !S !UZ !gl !qv ! ! ! ! -H% -Hu -HZ] -Hcf -H:?-HHPQWHX-H]b-H -H -H -Hd[% [% [%|$ $e $ $SV $in $y{  zF $ $ $ $N .T#s(^ .P\ . . . [.d &
L &
TRUWZRZ^ &
 &
 &
 [&
RCD CDU CD CD3 CD CD CD CDH3 3 3
1 1 1 1 1r    r  r"  r$  rw  r'  c                 Z    |dk    rd}|t          j        |          z  }|| z  }| ||z  z   S )Nr   rO   )r   r   )r"  r$  rw  r'  r  volatilidades         r!   rl  rl  ~  s=    qyy!DIdOO3(<7L&<///r    )7r   r  r  r  r  r  r  r   typingr   r   r   r   r	   r
   r   r   enumr   r   r   r  r  Oplabr   r   jsonrP   r   r#   r  rX   rp   ry   r   r   r   r[  rZ  r-   r   r   rQ   r   r   r   rV   r   r   r   r  r  r  r  rl  r   r    r!   <module>r     s  H                  N N N N N N N N N N N N N N N N N N N N       # # # # # # # #     ) ) ) ) ) ) ) )      D   A< A< A< A< A< A< A< A<H    $   (       & & & & & & & &,% % % % % % % %@       $    $   P   #  	5 	U 	 	 	 	C E e  % TY ^c    &H5 H Hu H H H H H/5 / / /% / / / //% /u /u / / / / /E c    
*5 *C *E * * * *    4          ) ) ) ) ) ) ) )        &1 &1 &1 &1 &1 &1 &1 &1JN0E 0% 0s 0C 0E 0 0 0 0 0 0r    