B
    ҿatd                 @   s   d dl Z d dlZd dlZd dlmZ d dlmZ d dlT dd Zdd Z	dd	 Z
d
d Zdd ZdddZdddZdd Zdd Zdd Zdd ZdS )     N)NSELive)*c             C   s
   | d= | S )N_id )dictr   r   .\lib\common.py	remove_id
   s    r   c               C   s   t  dS )NZDDMMYYYYhhmmss)arrowgetformatr   r   r   r   get_timestamp   s    r   c             C   s2   d |  t|d dt|d d S )NzNFO:{}{}{}FUTz	DD-MMM-YYZYYZMMM)r   upperr	   r
   )
instrumentexpiryr   r   r   get_fut_instrument   s    r   c             C   s@   d}g }x2t |D ]&}|t| t j|dd qW |S )N   )monthsz	DD-MMM-YY)rangeappendr   r	   r
   shiftr   )r   ZmnthZfut_listZitrr   r   r   get_fut_instrument_all   s
    &r   c             C   s   t j| dd S )Nc             S   s   d|  S )NzNFO:r   )xr   r   r   <lambda>       z#kite_quote_format.<locals>.<lambda>)pydashZarraysZmapcat)instrumentsr   r   r   kite_quote_format   s    r    
           m  c          
   C   s  yt | t |t |d t |d t |d t || f\} }}}}}t| | || d|d   |  |t|  }||t|  }| | t| |  dt|  dtdtj   t||  d   || t| |  t|  |t| |  |  t|  | }	| | t| |  dt|  dtdtj   t||  d   || t| |  t|   |t| |  |  t|   | }
t| | |  t| |t| |  t||t|    }|t| |  t|  t| | |  t|   }t| | t| }t| | t|d  }t| | | | t|  dtdtj   t||  d  }d|  t| |  t| dtdtj  t||  d   }d| | t| |  t| }d| | t| |  t|  }t|dt|dt|	dt|
dt|dt|dt|dt|ddS  t	k
r } zt
d	| W d d }~X Y nX d S )
Nd   g      ?      g{Gz?g{Gz   )c_deltap_deltac_thetap_thetavegagamma	c_premium	p_premiumzError in black_scholes # {})floatmathlogsqrtexppinormcdfround	Exceptionprintr   )S0Xt   σrqtdd1d2
call_theta	put_thetaZcall_premiumZput_premium
call_delta	put_deltar*   r)   Zcall_rhoZput_rhoer   r   r   black_scholes_dexter    s0    D4J@JJ&(rF   c          
   C   s  yt | t |t |d t |d t |d t || f\} }}}}}t| | || d|d   |  |t|  }||t|  }| | t| |  dt|  dtdtj   t||  d   || t| |  t|  |t| |  |  t|  | }	| | t| |  dt|  dtdtj   t||  d   || t| |  t|   |t| |  |  t|   | }
t| | t| }t| | t|d  }t| | | | t|  dtdtj   t||  d  }d|  t| |  t| dtdtj  t||  d   }t|dt|dt|	dt|
dt|dt|ddS  t	k
r } zt
d| W d d }~X Y nX d S )	Nr!   g      ?r"   r#   g{Gz?r$   )r%   r&   r'   r(   r)   r*   zError in black_scholes # {})r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r   )r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   r*   r)   rE   r   r   r   black_scholes_basketI   s$    D4JJrG   c          
   C   s(  t d}dtd d }| }t|d }|}d}d}	d}
dd	 }d
d }|||||	|}|||	|}|tj| ||||   tj|  }||||   tj|  |tj|   }tj|}tj|d }tj|||	 t|  }d|tj| |	  dt|  || || |   tj|  d }d|tj| |	  dt|  || || |   tj|  d }|tj| t| d }|| | | }t	|| | d}|| }t	|dt	|dt	|dt	|dt	|dt	|dt	|dt	|t	|d	S )Nr#      r"   im  gWiZ?gvOjM?g        c             S   s0   t | | ||d d  |  |t |  S )Nr"   )r.   r/   r0   )SKr<   sr:   r   r   r   r?      s    zblack_scholes_nho.<locals>.d1c             S   s   | |t |  S )N)r.   r0   )r?   rK   r:   r   r   r   r@      s    zblack_scholes_nho.<locals>.d2r!   r$   )	r%   r)   r*   r'   	breakevenr+   r,   r(   r&   )
Znpr1   r.   r0   r-   statsr3   r4   Zpdfr5   )Zstock_pricer   strikerE   phirI   r:   rJ   r<   rK   r=   r?   r@   ZD1ZD2ZC_Fair_ValueZP_Fair_ValueZC_Deltar&   GammaZC_ThetaZp_ThetaZVegaZBreakeven_percentZBreakeven_dollarsZBreakeven_pricer   r   r   black_scholes_nhoq   sD    
,0>>rR   c             C   sB   t t| ddt t d }|dk r6d}n|d7 }|S )Nz	DD-MMM-YYZDDr#   )intr	   r
   r   now)r   no_days_to_expiryr   r   r   rU      s
    (rU   c           
   C   s^   y.t  } tj|  d dd }t|d dS  tk
rX } ztd dS d }~X Y nX d S )Ndatac             S   s   | d dkS )Nindexz	INDIA VIXr   )r   r   r   r   r      r   zindiavix.<locals>.<lambda>lastr"   zindiavix failedr   )r   r   collectionsfindZall_indicesr5   r6   r7   )nvixrE   r   r   r   indiavix   s    r]   c          )   C   s  y|}t |}g }	|dkr6d}
xtj| dd  D ]\}}|dkr`t||||
d}ndddddddddd	}t|dkr<d	|d d
  }d	|d d
  }|| }|| }|d |d |d |d |d |d |d |d |d ||d |d d
 |d d
 |d |d |d |d d |d d |d d |d d |d d d d |d d d d |d d d d |d d d d |d |d t||d |d |d d |d d |d d |d d |d d d d |d d d d |d d d d |d d d d |d |d d'}|	| q<W |dkr^d}
xtj| d d  D ]\}}|dkrt||||
d}ndddddddddd	}t|dkr^d	|d d
  }d	|d d
  }|| }|| }|d |d |d |d |d |d |d |d |d ||d |d d
 |d d
 |d |d |d |d d |d d |d d |d d |d d d d |d d d d |d d d d |d d d d |d |d t||d |d |d d |d d |d d |d d |d d d d |d d d d |d d d d |d d d d |d |d d'}|	| q^W |d!krxVtj| d"d  D ]:\}}t|dkrd	|d d
  }d	|d d
  }|| }|| }y:|dkrt	d#|||d$ d%d&}t	d'|||d$ d%d&}W n, t
k
r0 } zd(}d(}W d d }~X Y nX |d |d) d$ |d |d |d* |d+ d, |d) d$ |d |d ||d |d d
 |d d
 |d |d |d |d d |d d |d d |d d |d d d d |d d d d |d d d d |d d d d |d |d t||d |d |d d |d d |d d |d d |d d d d |d d d d |d d d d |d d d d |d |d d'}|	| qW W n, t
k
r } zt| W d d }~X Y nX |	S )-N1g0@c             S   s   | d S )NrO   r   )r   r   r   r   r      r   z option_builder.<locals>.<lambda>)r;   r   )	r%   r)   r*   r'   rM   r+   r,   r(   r&   r#   zNFO:tradingsymbolinstrument_tokenr'   r+   r%   r*   r)   r(   r,   r&   	timestampoidepthbuysellquantityprice
last_pricevolume)'Zc_tokenr'   r+   r%   r*   r)   r(   r,   r&   r   ra   Zc_symbolZp_symbolZc_idZp_idZc_oiZc_bid_qty_aZc_bid_price_aZc_ask_qty_aZc_ask_price_aZ	c_bid_qtyZc_bid_priceZ	c_ask_qtyZc_ask_priceZc_ltpZc_volumerO   Zp_volumeZp_ltpZp_bid_qty_aZp_bid_price_aZp_ask_qty_aZp_ask_price_aZ	p_bid_qtyZp_bid_priceZ	p_ask_qtyZp_ask_priceZp_oiZp_token2g     0@c             S   s   | d S )NrO   r   )r   r   r   r   r   "  r   3c             S   s   | d S )NrO   r   )r   r   r   r   r   c  r   cim  g͍	K<?gS?p)r   r   r   r   r   r   r"   r$   r!   )rU   r   rY   Zgroup_byitemsrF   lenrS   r   Zblack_76r6   r7   )ZstrikesrV   Z
spot_pricer   r   Zblack_scholesZ
bs_formulaZinstrument_datatimeZstrike_data_listr\   rO   valuebscepeZce_dataZpe_dataZstrike_dataZc_price_modalZp_price_modalrE   r   r   r   option_builder   sj   
$










$











$














Tru   )r   r   r   r    )r   r   r   r    )r	   r   requestsZscipy.statsrN   Zjugaad_data.nser   Zlib.option_pricing_modalr   r   r   r   r   rF   rG   rR   rU   r]   ru   r   r   r   r   <module>   s    
)
(Q	
