
    'i?
                     b    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	m
Z
 d dlmZ  G d de      Zy)    )absolute_importdivisionprint_functionunicode_literalsN)Analyzer)averagestandarddev)AutoOrderedDictc                   8     e Zd ZdZdZd Z fdZd Zd Z xZ	S )SQNa6  SQN or SystemQualityNumber. Defined by Van K. Tharp to categorize trading
    systems.

      - 1.6 - 1.9 Below average
      - 2.0 - 2.4 Average
      - 2.5 - 2.9 Good
      - 3.0 - 5.0 Excellent
      - 5.1 - 6.9 Superb
      - 7.0 -     Holy Grail?

    The formula:

      - SquareRoot(NumberTrades) * Average(TradesProfit) / StdDev(TradesProfit)

    The sqn value should be deemed reliable when the number of trades >= 30

    Methods:

      - get_analysis

        Returns a dictionary with keys "sqn" and "trades" (number of
        considered trades)

    )SystemQualityNumberc                 "    t               | _        y)zbReplace default implementation to instantiate an AutoOrdereDict
        rather than an OrderedDictN)r
   rets)selfs    V/var/www/app/trading-bot/venv/lib/python3.12/site-packages/backtrader/analyzers/sqn.pycreate_analysiszSQN.create_analysis:   s     $%	    c                 V    t         t        |           t               | _        d| _        y )Nr   )superr   startlistpnlcount)r   	__class__s    r   r   z	SQN.start?   s     c4 6
r   c                     |j                   |j                  k(  r;| j                  j                  |j                         | xj
                  dz  c_        y y )N   )statusClosedr   appendpnlcommr   )r   trades     r   notify_tradezSQN.notify_tradeD   s8    <<5<<'HHOOEMM*JJ!OJ (r   c                 T   | j                   dkD  rZt        | j                        }t        | j                        }	 t	        j
                  t        | j                              |z  |z  }nd}|| j                  _	        | j                   | j                  _
        y # t        $ r d }Y :w xY w)Nr   r   )r   r   r   r	   mathsqrtlenZeroDivisionErrorr   sqntrades)r   pnl_av
pnl_stddevr(   s       r   stopzSQN.stopI   s    ::>TXX&F$TXX.JiiDHH.7*D C		::		 % s   .B B'&B')
__name__
__module____qualname____doc__aliasr   r   r"   r,   __classcell__)r   s   @r   r   r      s#    0 %E&


&r   r   )
__future__r   r   r   r   r$   
backtraderr   backtrader.mathsupportr   r	   backtrader.utilsr
   r    r   r   <module>r8      s)   ** *   7 ,6&( 6&r   