a
    Ä�jA  ã                   @   s¾   d Z ddlZddlZddlZddlZej dd¡ ej dd¡ ddlZddl	m
Z
mZmZ dd„ Zdd
d„Ze
ƒ ZeeƒZedƒZe eedd�¡Zdd„ Zedd„ dƒ edd„ dƒ dS )a[  Does the volatility->fills effect survive at the TOUCH?

mm_vol_vs_volume.py priced legs at our_ask -- the paper maker's 0-5c ladder
ABOVE the touch. The live maker rests AT the touch. If volatility only helps
when you are asking above the market (because only a price move can reach you),
then the +13pp says nothing about how we actually trade.
é    NzE:\soccer\mainzE:\soccer\research)Ú	load_legsÚload_movementÚCACHEc              	   C   s(   z
t | ƒW S  ttfy"   Y d S 0 d S ©N)ÚfloatÚ	TypeErrorÚ
ValueError)Úx© r
   ú%E:\soccer\research\mm_vol_at_touch.pyÚ_f   s    
r   ç        ç      ð?c                 C   s¦   i }t dddd��€}t |¡D ]d}| d¡}|r||v s| d¡pDd ¡ sLqt| | ¡ƒ}|d ur||  k rv|k rn q|||< qW d   ƒ n1 s˜0    Y  |S )Nz&E:\soccer\research\mm_paper_quotes.csvúutf-8Úreplace)ÚencodingÚerrorsZ
leg_tickerZask_sizeÚ )ÚopenÚcsvZ
DictReaderÚgetÚstripr   )ÚcolÚloÚhiÚoutZfhÚrÚtÚvr
   r
   r   Úload_col   s    ÿ
 (r   Zk_askr   )r   c                    s’  g }t  ¡ D �]\}}|tvr q| ||ƒ}|d u r4q|› d|d  ¡ › �}|tvrTqd\}}t| D ]ˆ\}	}
}t |	¡}|s€ qî|d }|jd u |jd u kr¸|jrª| ¡ n|j	|jd�}||krÄ qî|
|d krd||7 }||d krdd} qîqd| 
t| d	 t|ƒ|t |¡�p| d
œ¡ qt|ƒdk �rHt|› dt|ƒ› d�ƒ d S dtdd„ |D ƒƒ t|ƒ }t dd„ |D ƒ¡d }td|› d�ƒ tdt|ƒ› d|d›d|d›d�ƒ tdd„ |D ƒƒ}|t|ƒd  }g }d|df|dd ffD ]‚\‰‰ }‡ ‡fd!d"„|D ƒ}td#d„ |D ƒƒ}| 
d| t|ƒ ¡ td$|d%›d&t|ƒd'›d(|d'›d)d| t|ƒ d*›d+�	ƒ �qìtd,|d- |d.  d/›d0�ƒ d S )1Nú|Úts)r   FÚko)Útzinfog•Ö&è.>ZqueueTÚsd)r$   ÚfilledÚaboveé<   z: only z legsg      Y@c                 s   s   | ]}|d  V  qdS ©r%   Nr
   ©Ú.0r   r
   r
   r   Ú	<genexpr>I   ó    zrun.<locals>.<genexpr>c                 s   s   | ]}|d  V  qdS )r&   Nr
   r)   r
   r
   r   r+   J   r,   éd   z
=== z ===z  z legs, base fill z.1fz
%, median z+.2fz
c vs touchc                 s   s   | ]}|d  V  qdS )r$   Nr
   r)   r
   r
   r   r+   N   r,   é   éÿÿÿÿz	calm halfé	   zvolatile halfc                    s,   g | ]$}ˆ|d    kr ˆ k rn q|‘qS )r$   r
   r)   ©r   r   r
   r   Ú
<listcomp>R   r,   zrun.<locals>.<listcomp>c                 s   s   | ]}|d  V  qdS r(   r
   r)   r
   r
   r   r+   S   r,   z    z>14ú z>4z legs  z	 filled  z>6.1fú%z    -> volatility effect: é   r   z+.1fZpp)ÚlegsÚitemsÚmvZ	isoformatÚtradesÚSZ_ptr#   Z
astimezoner   ÚappendÚintÚtouchr   ÚlenÚprintÚsumÚ
statisticsZmedianÚsorted)Zprice_ofZlabelZrowsr   r   ZpxÚkeyZcumr%   Zts_sÚpÚcr!   r"   ÚbaseZ	med_aboveZsdsÚqZgotÚnameZselÚfr
   r1   r   Úrun*   s`    

ÿ
ÿ
 ÿrJ   c                 C   s   |d S )NZour_askr
   ©r   r   r
   r
   r   Ú<lambda>Z   r,   rL   z2priced at our_ask (paper ladder, 0-5c ABOVE touch)c                 C   s
   t  | ¡S r   )r=   r   rK   r
   r
   r   rL   [   r,   z.priced AT the touch (what the live maker does))r   r   )Ú__doc__r   ZjsonrA   ÚsysÚpathÚinsertZ	mm_settler:   Zmm_volatility_cleanr   r   r   r   r   r6   r8   r=   Úloadr   r9   rJ   r
   r
   r
   r   Ú<module>   s    
0