ó
îiVc           @   sQ   d  d l  Z d  d l m Z d  d l Td  d l Td  d l Td d d „  ƒ  YZ d S(   iÿÿÿÿN(   t   Set(   t   *t   StrategyCalculatorProcessorc           B   sD   e  Z e d  „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z RS(   c      
   C   s¹  t  ƒ  } |  j } |  j } |  j } | j } | j } | j } | j } xj| D]b}	 |	 j t	 j
 k rm d n d }
 |	 j t	 j k r¨ |
 |	 j | |	 _ |	 j |	 _ nù|	 j d } | d k r| |
 |	 j t j |	 j | |	 j ƒ |	 _ d |	 _ d |	 _ d |	 _ d |	 _ d |	 _ nƒ| |
 |	 j | j |	 j | |	 j |	 j | | | ƒ |	 _ | |
 |	 j | j |	 j | |	 j |	 j | | | ƒ |	 _ |	 j | 9_ | |
 |	 j | j | |	 j |	 j | | | ƒ |	 _ |	 j d | | |	 _ | |
 |	 j | j |	 j | |	 j |	 j | | | ƒ |	 _ | |
 |	 j | j | |	 j |	 j | | | ƒ |	 _ | |
 |	 j | j |	 j | |	 j |	 j | | | ƒ |	 _ d |	 j |	 _ qO Wd  S(   Ng      ð?g      ð¿g     Ðv@i    g      à?(    t   BlackScholesCalculatort
   marketInfot   scenariot	   portfoliot
   stockPricet   dividendYieldt   riskfreeRatet   optionMultipliert	   buyOrSellt   ConstantValuet   BUYt   callOrPutOrStockt   STOCKt   quantityt   valuet   deltat
   expiryDaysR   t   getProfitValuet   striket   gammat   thetat   vegat   rhot   getValuet
   volatilityt   getDeltat   getGammat   getThetat   getVegat   getRhot   cost(   t   strategyCalculatorDataBeant   bst   marketR   R   t   priceR   R	   R
   t   posit   tradeDirectiont   expiry(    (    sT   /var/www/OptionsCentralService/app/processor/strategy/StrategyCalculatorProcessor.pyt   calculateOptions
   s>    												<<6<6<c      
   C   s4  t  ƒ  } |  j } |  j } |  j } | j } | d k rQ | j | _ | j } n  | j } | j } | j } | j }	 d }
 xM | D]E } | j	 t
 j k r  q‚ n  |
 d k  s» |
 | j k r‚ | j }
 q‚ q‚ Wt | |
 ƒ } | j } d }
 xM | D]E } | j	 t
 j k rqð n  |
 d k  s)|
 | j k rð | j }
 qð qð Wxô| D]ì} | j t
 j k r^d n d } | j	 t
 j k r| | j | j | _ nU | | | j | j | j	 | j | j | j t | j d ƒ d | j | j ƒ | _ | j d 9_ | j	 t
 j k r)| | j | | _ | j | _ q@| d k rA| j } n  | j | d } | d k r»| | | j t j | j	 | | j ƒ | _ d | _ d | _ d | _ d | _ d | _ q@| | | j | j | j	 | | j | | |	 | ƒ | _ | | | j | j | j	 | | j | | |	 | ƒ | _ | j | 9_ | | | j | j  | | j | | |	 | ƒ | _ | j d | | | _ | | | j | j! | j	 | | j | | |	 | ƒ | _ | | | j | j" | | j | | |	 | ƒ | _ | | | j | j# | j	 | | j | | |	 | ƒ | _ q@Wd  S(   Ni    g      ð¿g      ð?g-Cëâ6?g     Ðv@g      à?($   R   R   R   t   scenarioResultsR   t   daysFromTodayR   R	   R   R   R   R   R   t   minR
   R   R   R   R!   R   R   t   maxR   R   t   volatileR   R   R   R   R   R   R   R   R   R   R    (   R"   R#   R$   R   R   R%   R+   R   R	   R   t   minExpiryDaysR&   R
   R'   R(   (    (    sT   /var/www/OptionsCentralService/app/processor/strategy/StrategyCalculatorProcessor.pyt   calculateOptionsByDaysElapsed5   sn    										G				99393c   "      C   s  t  ƒ  } |  j } |  j } |  j } | j } | j } | j } | j } | j }	 |	 d k ri | j }	 n  |  j	 d k r„ |  j	 }
 n
 |	 d }
 |  j
 d k r© |  j
 } n
 |	 d } t d t |
 d ƒ ƒ }
 t | ƒ t |
 ƒ d } t d t | d ƒ ƒ } t | |
 | d ƒ } |
 |  _	 | |  _
 d } xM | D]E } | j t j k rQq3n  | d k  sl| | j k r3| j } q3q3Wt | | ƒ } | d k r d } n d	 j | ƒ } d
 | d } d | d d g } t j g  d | ƒ} t g  ƒ } |
 } x' | | k r| j | ƒ | | 7} qùWx3 | D]+ } | j t j k r'| j | j ƒ q'q'Wt | ƒ } | j ƒ  |
 } xh| D]`} d } d } d } x
| D]} | j t j k r¶d n d } | j } | d k r×| n | j } t | d ƒ } | j | d } | j t j k r)| | j | j } nR | | | j | j | j | j | j | j t | j d ƒ d | j | j ƒ } | d 9} | | 7} | j t j k r°| } | } nÆ | d k rí| | j | j | | j | | | j | ƒ } n | t  j! | j | | j ƒ } | j | k rW| | j | j | | j | | j | d | j | ƒ } n | t  j! | j | | j ƒ } | | | | 7} | | | | 7} q˜Wt j | | | | | d g g d | ƒ}  | j" |  ƒ } qyW| | | d | d <i | d 6| d 6}! t# |!   S(   Ni    gš™™™™™¹?i   g{®Gáz„?g      B@g     €A@g      ð¿t   Todays   {0:.0f}s   In s   -dayss   Stock Prices	   At Expirys
   Time Valuet   columnsg        g      ð?g-Cëâ6?g     Ðv@t   chartTitlest   chartValues($   R   R   R   R   R
   R+   R   R	   R   t   axisMint   axisMaxR-   t   roundt   floatR   R   R   R   R,   t   formatt   pdt	   DataFrameR    t   addR   t   listt   sortR   R   R   R   R   R   R   t   appendt   ChartDataBean("   R"   R#   R$   R   R   R
   R+   t   plVolatilityt   plRiskfreeRateR   t   plMint   plMaxt	   priceStepR/   R&   t   currentLabelt   strLabelt	   dfcolumnst   resultst   xAxisSett	   plCurrentt	   xAxisListt
   todayValuet   expiryValuet   totalPremiumR'   R   R   t   expiryYearst   posCostt   theTodayValuet   theExpiryValuet	   theResultt   chartValueDict(    (    sT   /var/www/OptionsCentralService/app/processor/strategy/StrategyCalculatorProcessor.pyt   calculateChart   s¾    									

			
	D

		,c         C   sH   |  t  j k r | S|  t  j k r3 t | | d ƒ St | | d ƒ Sd  S(   Ng        (   R   R   t   CALLR-   (   t
   optionTypeR   R   (    (    sT   /var/www/OptionsCentralService/app/processor/strategy/StrategyCalculatorProcessor.pyR     s
    (   t   __name__t
   __module__t   staticmethodR)   R0   RV   R   (    (    (    sT   /var/www/OptionsCentralService/app/processor/strategy/StrategyCalculatorProcessor.pyR   	   s   +L(    (   t   pandasR:   t   setsR    t.   app.entity.strategy.StrategyCalculatorDataBeant    app.model.BlackScholesCalculatort   app.entity.ConstantValueR   (    (    (    sT   /var/www/OptionsCentralService/app/processor/strategy/StrategyCalculatorProcessor.pyt   <module>   s
   


