U
    !g$%                     @   sD  d dl Zd dlmZ d dlmZ 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mZ d dlmZ d dlmZ d d	lmZmZmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ ddddddZedddd Z eddd$ddZ!eddd%ddZ"dd Z#edddd Z$G d d! d!Z%d&d"d#Z&dS )'    N)Broker)Q)HttpResponse)isnan)shared_task)StrategyManager)User)BrokerAccounts	StrategisScripts)Strategy)Exchange)Telegram)PubSubz+https://api.shoonya.com/NSE_symbols.txt.zipz+https://api.shoonya.com/BSE_symbols.txt.zipz+https://api.shoonya.com/NFO_symbols.txt.zipz+https://api.shoonya.com/CDS_symbols.txt.zipz+https://api.shoonya.com/MCX_symbols.txt.zip)NSEBSENFOCDSMCXT)bindc              
   C   sb   z.t j }|D ]}t|j t|j qW n. tk
r\ } ztt	| W 5 d }~X Y nX d S N)
r   objectsallprintusernamestartStrategyManagerdelayid	Exceptionstr)selfusersusere r$   C/home/worker/MarketYantra/Yantra/yantra/trading/views/masterdata.pystartStrategyManagerForAll   s    

r&   c              
   C   s   z^t jj|d }t|}|d|j  t|}|| |	| |d|j  W n" t
k
r } zW 5 d }~X Y nX d S )Nr   z$Strategy Manager initiated for User z"Strategy Manager Started for User )r   r   filterfirstr   sendMessager   r   initiatestartr   )r    useridexchanger"   telegrammanagerr#   r$   r$   r%   r   &   s    

r   c              
   C   s  zt jj|d }td}tjj|d}t|}tj }t	|}|D ]}t
||j|}	|	rH|	jrH|D ]d}
| D ]V}|	jrv||j|
j|jd}t|}d|j|	jd}||| |d|j  qvqjqHW n6 tk
r
 } z|d|j  W 5 d }~X Y nX d S )	Nr'   r   )r"   O	TERMINATE)typer.   strategyz(Strategy Termination initiated for User z+Error : Strategy Termination init for User )r   r   r(   r)   r   r	   r   r
   r   r   r   getStrategyInstancecodeisActivegetExchangesrequireOrderCallback
getQueueIdr   clientIdr   publishr*   r   )r    r-   r.   r"   brokerZ
brokerAccs
strategiesr/   stratr4   ZaccsexchZQueueIDpubsubmessager#   r$   r$   r%   stopStrategyManager6   s*    
rC   c                 C   s   t   td d S )Nzsymbol sync completed)syncSymbolsr   )requestr$   r$   r%   syncSymbolsReqP   s    rF   c                 C   s   t d}|  d S )N   )MasterDataManagerrD   )r    r0   r$   r$   r%   rD   T   s    rD   c                   @   sB   e Zd Zdd ZdddZdd Zdd	d
ZdddZdd ZdS )rH   c                 C   s
   || _ d S r   )BrokerId)r    brokerIdr$   r$   r%   __init__Z   s    zMasterDataManager.__init__r   c                 C   s$   d}|dkr| j }|tjkr d}|S )NsymbolFinvasiar   )rI   r   FINVASIA)r    rJ   	fieldNamer$   r$   r%   getSymbolField]   s    
z MasterDataManager.getSymbolFieldc                 C   s4   |  d |  d | d | d |   d S )Nr   r   r   r   )syncNSEBSESymbolssyncNFOMCXSymbolssyncCDSSymbols)r    r$   r$   r%   rD   g   s
    



zMasterDataManager.syncSymbolsr   c           
      C   s  zg }|   }tjj|d}| jtjkr8tt	
|}| D ]r\}}|j|d d s@t|d |d |d d d|d |d |d	 |d	 |d
 d
}t|||d  || q@t|dkrtj| W n. tk
r }	 ztt|	 W 5 d }	~	X Y nX d S )NexchSegTokentokenTradingSymbolSymbolr   LotSize
Instrumentr   TickSize)
rW   symbolnameexpirystrikelotSizeinstrumentTyperT   segmenttickSize)rO   r   r   r(   rI   r   rM   pdread_csvFINVASIA_SYMBOLS_NSE_PATHgetiterrowsexistssetattrappendlenbulk_creater   r   r   
r    r.   ZlstNewrN   scriptsdfindexrownewexr$   r$   r%   rP   o   s4    z#MasterDataManager.syncNSEBSESymbolsr   c           
      C   s$  zg }|   }tjj|d}| jtjkr8tt	
|}| D ]\}}|j|d d s@t|d |d |d |d |d |d |d	 |d
 |d
 |d |d d}|dkr|d |_t|||d  || q@t|dkrtj| W n0 tk
r }	 ztt|	 W 5 d }	~	X Y nX d S )NrS   rU   rV   rX   rY   ExpiryStrikePricerZ   r[   r   r\   
OptionType)rW   r]   r^   r_   r`   ra   rb   rT   rc   rd   
optionTyper   GNGDr   )rO   r   r   r(   rI   r   rM   re   rf   rg   rh   ri   rj   rz   rk   rl   rm   rn   r   r   r   ro   r$   r$   r%   rQ      s:    
z#MasterDataManager.syncNFOMCXSymbolsc           
      C   sJ  zd}g }|   }tjj|d}| jtjkr>tt	
|}| D ]\}}|j|d d sFt|d |d |d t|d tdt|d	 tjd
|d |d |d |d t|d tjd
t|d td|d |d d}t|||d  || qFt|d
krtj| W n0 tk
rD }	 ztt|	 W 5 d }	~	X Y nX d S )Nr   rS   rU   rV   rX   rY   rv   z01-JAN-1900rw   r   rZ   r[   r   r\   rx    Z	PrecisionZ
Multiplier)rW   r]   r^   r_   r`   ra   rb   rT   rc   rd   ry   	precision
multiplier)rO   r   r   r(   rI   r   rM   re   rf   rg   rh   ri   rj   nvlr   numbersNumberrk   rl   rm   rn   r   r   ro   r$   r$   r%   rR      s<    z MasterDataManager.syncCDSSymbolsN)r   )r   )r   )	__name__
__module____qualname__rK   rO   rD   rP   rQ   rR   r$   r$   r$   r%   rH   Y   s   



#rH   c              
   C   sv   zB|t jtjtfkr*t| r"|W S | W S nt| |r:| W S |W S W n. tk
rp } ztt	| W 5 d }~X Y nX d S r   )
r   r   decimalDecimalfloatr   
isinstancer   r   r   )valuedatatypedefaultru   r$   r$   r%   r~      s    

r~   )N)N)r   )'pandasre   trading.Entities.Brokers.brokerr   django.db.modelsr   r   datetimer   django.httpr   numpyr   celeryr   "trading.Strategies.strategyManagerr   django.contrib.auth.modelsr   Ztrading.modelsr	   r
   r   trading.Strategies.strategyr    trading.Entities.Exchanges.indiar   social.views.telegramr   trading.Redis.pubsubr   rg   r&   r   rC   rF   rD   rH   r~   r$   r$   r$   r%   <module>   s>   

}