
    'iw                         d dl mZmZmZmZ d dlZddlmZ ddlm	Z	 ddl
mZ  G d de      Z G d	 d
ej                        Z G d d e	ee            Zy)    )absolute_importdivisionprint_functionunicode_literalsN   )Observer)with_metaclass)Tradec                       e Zd ZdZdZdZ ed      Z edddddg      Z e ed	d
dddd       edd
dddd            Z	d Z
d Zy)Tradesa  This observer keeps track of full trades and plot the PnL level achieved
    when a trade is closed.

    A trade is open when a position goes from 0 (or crossing over 0) to X and
    is then closed when it goes back to 0 (or crosses over 0 in the opposite
    direction)

    Params:
      - ``pnlcomm`` (def: ``True``)

        Show net/profit and loss, i.e.: after commission. If set to ``False``
        if will show the result of trades before commission
    T)pnlpluspnlminus)pnlcommzTrades - Net Profit/Loss皙?        )plotsubplotplotnameplotymargin
plothlinesPositive oblue       @full)_namelsmarkercolor
markersize	fillstyleNegativeredc                     d| _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _	        d| _
        d| _        d| _        d| _        d| _        d| _        y )Nr   )tradestrades_longtrades_shorttrades_plustrades_minustrades_plus_grosstrades_minus_gross
trades_wintrades_win_maxtrades_win_mintrades_losstrades_loss_maxtrades_loss_mintrades_lengthtrades_length_maxtrades_length_min)selfs    Y/var/www/app/trading-bot/venv/lib/python3.12/site-packages/backtrader/observers/trades.py__init__zTrades.__init__B   s    !""#  !"!"    c                 R   | j                   j                  D ]  }|j                  | j                  vr|j                  s)| j
                  j                  r|j                  n|j                  }|dk\  r|| j                  j                  d<   v|| j                  j                  d<    y )Nr   r   )_owner_tradespendingdataddatasisclosedpr   pnllinesr   r   )r6   traderA   s      r7   nextzTrades.next[   s    [[// 	-Ezz,>>#'66>>%--uyyCcz(+

""1%),

##A&	-r9   N)__name__
__module____qualname____doc___stclockrB   dictparamsplotinfo	plotlinesr8   rD    r9   r7   r   r       sz     H#E$Ft7 $ #u&H
 :3f #v7 JCu!$8	I#2-r9   r   c                        e Zd Z fdZ xZS )MetaDataTradesc                    t        t        | 
  |i |\  }}}|j                  j                  rt        d |j                  D              }n.t        d t        t        |j                              D              }| j                  j                  t        j                         j                  |dd      } |       |_	        g d}g d}t        ddd	
      }t               }	t        |||      D ].  \  }
}}|j!                         x|	|
<   }|j#                  ||       0 | j$                  j                  t        j                         j                  |	g d      } |       |_        |||fS )Nc              3   4   K   | ]  }|j                     y w)N)r   .0xs     r7   	<genexpr>z'MetaDataTrades.donew.<locals>.<genexpr>q   s     7q1777s   c              3   >   K   | ]  }d j                  |        yw)zdata{}N)formatrS   s     r7   rV   z'MetaDataTrades.donew.<locals>.<genexpr>s   s     N!8??1-Ns   r   rN   )r   v^<>12348sr@   *hH+rU   Dd)bgrcmykri   rj   rk   rl   rm   rn   ro   ri   rj   rk   rl   rm   r   r   r   )r   r!   r"   )r   r    T)recurse)superrP   donewrK   usenamestupledatasrangelenrB   _deriveuuiduuid4hexrJ   zipcopyupdaterM   )clsargskwargs_objlnameslinesclsmarkerscolorsbasedictplineslnamer   r    rh   rM   	__class__s                  r7   rr   zMetaDataTrades.donewl   sA   ">3=tNvNdF ;;7DJJ77FNuS_7MNNF 99$$TZZ\%5%5vq"E Z
65 2#@$'$@ 	1 E65 (/F5MAHHF%H0	1 MM))JJLfb$ * 8	"T6!!r9   )rE   rF   rG   rr   __classcell__)r   s   @r7   rP   rP   k   s    !" !"r9   rP   c                   B    e Zd ZdZdZ edddgd      Z e       Zd Zy)
DataTradesT))rs   Tr   r   )r   r   r   r   c                     | j                   j                  D ][  }|j                  | j                  vr|j                  s)|j
                  | j                  |j                  j                  dz
     d<   ] y )N   r   )r;   r<   r=   r>   r?   rA   rB   _id)r6   rC   s     r7   rD   zDataTrades.next   s\    [[// 	:Ezz,>>05		DJJuzz~~)*1-	:r9   N)	rE   rF   rG   rI   rK   rJ   rL   rM   rD   rN   r9   r7   r   r      s/    H"Ft $&H I:r9   r   )
__future__r   r   r   r   ry   r   r   	utils.py3r	   rC   r
   r   r   rP   r   rN   r9   r7   <module>r      sR   ** *   & H-X H-V""X'' ""J:9 :r9   