U
    Qf֏                     @   s  d dl mZmZmZmZ d dlmZ d dlm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 d d
lmZ d dlmZ d dlZd dlmZ d dlmZ d dl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l&Z&d dlm'Z' d dl(m)Z) dZ*G dd deZ+eddd(ddZ,eddd)ddZ-dd  Z.eddd*d$d%Z/d&d' Z0dS )+    )Strategy1SettingsStrategyStatus	StrategisStrategy1Log)Telegram)StrategyN)isBlankOrNone)shared_task)pdSeries)datetime)Thread)Broker)BrokerAccount)Decimal)PubSub)
CustomUserUserSocialProfile)BrokerAccounts)sleep)Q)BytesIO)convertUTCtoIST)EMailZJOBBINGc                   @   s   e Zd Zd-ddddZd.ddZd/ddZd	d
 Zedd Zedd Z	dd Z
dd Zd0ddZd1ddZdd Zd2ddZd3ddZeedeedddddddfdd Zd4d"d#Zd5d)d*Zd6d+d,ZdS )7	Strategy1N)returnc                 C   s   t | _|| _tjj| jd }|| _t| jj	| _
|s\| j
d| j  td| j || _|j| _| | d| _t | _d S )N)codez#Err: No strategy defined with code zNo strategy defined with code ZDUMMY)STRATEGY_CODEr   exchanger   objectsfilterfirstUserr   idtelegramsendMessage	ExceptionStrategyMasterisActivegetActiveSetupZMasterQueuer   )selfuserr   r&    r+   @/home/worker/Genie/myGenie/trading/views/Strategies/strategy1.py__init__#   s    
zStrategy1.__init__c              
   C   s  g }g }t j j| jddddd| _|s4| j}|rH| jj|d| _td}| jD ]}|j	j
|krt||j	j
 | jr|| jj|j	j|jdnd | jr|| jj|j	j|jdnd |j	j
|j	j|j	jj|j|j|jd	}||krV|| qV|| _|| _| jS )
NT)r*   r'   Ztarget__isActive	target_idexchSegr/   r   OT)OrderQIdZTickQId	accountIdclientIdbrokerIdr   tokensymbol)r   r   select_relatedr   r!   order_bySetupsr   r   targetr"   appendrequireOrderCallback
getQueueIdusernamer5   r/   requireTickCallbackbrokerr6   r7   r8   ActiveAccountsActiveScripts)r)   r   ZlstActiveAccountslstActiveScriptsrB   setupZactiveScriptr+   r+   r,   r(   3   s2    "
""zStrategy1.getActiveSetupc                 C   sR   | j jsdS |s| j}|d krB| jd| j  td| j |  }|d kS )NFz"No user defined for strategy code )r&   r'   r!   r#   r$   r   r%   r(   )r)   r*   setupsr+   r+   r,   r'   W   s    zStrategy1.isActivec                 C   s   g S Nr+   r)   r+   r+   r,   getScriptForTickCallbacke   s    z"Strategy1.getScriptForTickCallbackc                 C   s   dS NTr+   rI   r+   r+   r,   r>   i   s    zStrategy1.requireOrderCallbackc                 C   s   dS )NFr+   rI   r+   r+   r,   rA   m   s    zStrategy1.requireTickCallbackc                 C   s*   t jj| j| jd }|r"|jS d S d S )Nr*   strategy)r   r   r   r!   r&   r    
currStatus)r)   statusr+   r+   r,   	getStatusq   s    zStrategy1.getStatusc                 C   sD   t jj| j| jd }|r$||_nt | j| j|dd}|  d S )NrL    )r*   rM   rN   taskId)r   r   r   r!   r&   r    rN   save)r)   rO   statr+   r+   r,   	setStatusx   s    zStrategy1.setStatusc              
   C   s^   z(|  d | jd| j d | jW S  tk
rX } zt| W Y dS d }~X Y nX d S )NZ	Initiatedz	Strategy z
 InitiatedF)rU   r#   r$   r   r'   r%   print)r)   r   excr+   r+   r,   initiate   s    
zStrategy1.initiatec                 C   s^   | j | j d | | | j | j d | | | | | j | j d d S )Nz : execution startedz : Order tracking startedz : Initial Order Placed)r#   r$   r   processOrderCallbackprocessTickCallbackcreateInitialOrder)r)   brokerAccountr   r+   r+   r,   start   s    


zStrategy1.startc                 C   s  d}| j D ]}||jjkr*||jj}|j}d}|j}|j}|j}	|j}
t	j
j| j|j|jdjdd  t	j
j| j|j|jddgdd }|r|jdkr|j}| j| j d	|  n |j}| j| j d
| d |jdkrd}n2|jdkr
|j}n|j}| j| j d|  |  dkr< d S d}d}|j|jkrVd}|j|jkrhd}zJ| | jj|j|j|j|j|||	||||
||d|j |j!|j"|j#|j$ W q
 t%k
r } zt&| W Y q
W 5 d }~X Y q
X q
d S )Nr   F)r*   r/   r7   COMPLETErO   PARTIAL)r*   r/   r7   Z
status__in
-updatedOnz : Override Price z : Base Price z as per last TransactionSELLTz$ : no prev record, setup base price 	TERMINATE)'r;   r<   r"   getBrokerObjectsimulatebuyLotsellLotbuyTicksellTickr   r   r   r!   r/   r7   excludedeleter:   r    priceCurrentr#   r$   r   price	orderType	priceBaserP   stockCurrentstockMaxstockMinexecuteOrderPair	dayOrdersorderCatagorygttBuyBuffergttSellBufferwaitcountr%   rV   )r)   r\   ZtmpAccountIDrF   	brokerObj
simulationflagReverseTicklotSizelotSizeSelltickSizetickSizeSelllog	basePricebuyOnlysellOnlyrW   r+   r+   r,   r[      st    $(

                zStrategy1.createInitialOrderc              	   C   s   |s
| j }g }| jr| jD ]H}|r2|d|kr2q|d|d|dd}||kr|| q|D ],}t| jt|d|d|d qhdS )Nr   r4   r3   )r4   r   r3   T)	r   r>   rD   getr=   workerS1OrderCallbackdelayr   str)r)   r   	lstUniquescriptdictitemr+   r+   r,   rY     s     
*zStrategy1.processOrderCallbackc                 C   s
   | j rdS rK   )rA   )r)   r   r+   r+   r,   rZ   *  s    zStrategy1.processTickCallbackAsia/Kolkatar^   c	                 C   s   t | j||f|d}	|r&|	t |dM }	|r8|	t |dM }	|rJ|	t |dM }	|r\|	t |dM }	|rn|	t |dM }	tj|	d}
|
S )N)r*   ZtradeDate__rangerO   r0   )orderIdr.   )r7   )r8   	updatedOn)r   r!   r   r   r   r:   )r)   Z	startDateZendDater   r7   r8   r   brokerAccountIdrO   qFilterlogsr+   r+   r,   getOrderLog0  s    zStrategy1.getOrderLogrQ   c                 C   s   t jj|||d }|rXttd|_|d |_	|d |_
|dkrN||_|  nt|dkrdd}t |||d |d |d	d|ttd|d |d |d
 |d dkrdndd||d d}|  |S )N)user_idr.   r   r   quantityrm   rQ   OPENr/   r7   r8   tranTypevarietyNORMALTFr   orderCategory)r   r.   r/   r7   r8   r   	tradeDater   rm   rn   intraday	currStockrO   r   )r   r   r   r    r   nowpytztimezoner   r   rm   rO   rS   r   )r)   useridr   r   ZverboseOrderrO   r   r+   r+   r,   createOrderLogI  s8    



zStrategy1.createOrderLogFr   TNormal   c                 C   s:   t | j||j|||||||	|
|||||||||| d S rH   )workerOrderPairr   r   r"   )r)   r   r<   r/   r7   numberOfOrdersr   
lotSizeBuytickSizeBuyr   r   r{   r   r~   r|   	createLogru   rv   rw   rx   ry   r+   r+   r,   rs   l  s,                   zStrategy1.executeOrderPairc                 C   sz  |  | | jD ]b}||}| }| }| }| jj|d}|D ]}	|	d}
|
D ]}|j|d|dd	 }|r\t
|d|_|D ]H}|d|dkr|d|dkrt|d|_|   q\qq\qJ|D ]}|j|d|dd	 }|rt
|d	|_|D ]N}|d|dkr"|d|dkr"t|d|_|   qq"qqd S )
Nr   Z	exch_tsymexchr7   )r/   r7   ppr   Z	fillpricenetqty)r(   rC   rd   ZgetHoldingsZgetPositionsZreadTradeBookr;   r   r   r    intrp   r   rl   rS   )r)   r\   r   r4   rz   holdings	positionsZ	tradeBookrG   ZholdingZtsymstsymrF   tradepositionr+   r+   r,   resyncStrategyValues  s6    


(
,zStrategy1.resyncStrategyValues)N)N)N)N)N)N)N)rQ   )FFFr   r   FTr   r   r   r   r   )N)__name__
__module____qualname__r-   r(   r'   rJ   propertyr>   rA   rP   rU   rX   r]   r[   rY   rZ   r   r   r   r   r   r   rs   r   r+   r+   r+   r,   r   "   sN   
$



,
R

      

&                     
r   T)bindc                 C   s  t |}tjj|d }|s"d S t|jj}t	|j||}	t
|j|}
|
|d |
|}|d krr|d |	jj|d }t|
jd jj}t }|| |r|g | ||r|| | }|d krtd qz~|ddd	kr@|d
d|kr@|dd|kr@|d| d |  W qd}d}d}d}|d dkrr|d dkrvd}nW q|	jj|d |d |d }tjj|	j|d |d ddd }|r|j}n|r|j}nd}tjj||d d }|rd|j dkr
W q|!|r&|	j"dkr&W q|j#}|j$}t%|d }|d dkrh||j&7 }| j'|j&7  _'nd}||j&8 }| j'|j&8  _'|d|_ ||_t()t*+d|_,|-  ||_.|-  |d  d|j/ d|d   d!|j& d"| d#
}|| |rd|rd|j'|j0krd}|j'|j1kr(d}t23|	j4|	jj|j5j|j/|j6d$|||j7|||j8|j9|j$| W q t:k
r } zt;| W 5 d }~X Y qX q|d| d% t<3|	jj| |d&| d' d S )(Nr"   Tz%Error while connecting broker accountr   r      typerQ   rc   r   rM   zProcess for Exchange z is terminatedFrO   r^   r`   r^   r/   r7   r/   r7   r.   r*   r/   r7   rO   ra   r   r.   r   r^   
limitPricer   BUYr   -:r8   	 - Qty (  @  )r   z is completedz#Email with trade list for Exchange z is sent)=r   r   r   r   r    r   r*   r"   r   getStrategyInstancer   Connectrd   r$   r;   r   rB   r6   r   	subscribeZcancelOrdersisMarketOpenZsetLastAccessZget_messager   r   Zclear_messager   r!   r:   r   stockInitialrO   canPlaceOrderr'   rf   rg   r   r   rp   r   r   r   r   r   rS   rl   r/   rq   rr   r   r   r   r<   r7   rh   re   ri   r%   rV   sendTradesbyEmail)r)   strategyCodeZaccIdr   r3   Z	cancelOldr4   bar#   rM   r\   connObjrF   rB   Zpubsubordr   r   logTrader|   logStockr   currLogr   r~   r   messagerW   r+   r+   r,   r     s    



6(

.
	       r   rQ   c              
   C   s\  t ||d}|dkrt }nt|d}|t | dM }tj|ddd}t	jj|d
 }tjj|jd	
 }|rXt }	tj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|jd! ||d|j ||d|j ||d|j ||d|j ||d|j ||d|j ||d|j ||d|j ||d|jd krdnt|jd! |d7 }q.|
|	 t }d"|d# }d$|j  d%}|j!g}|"||||	d&|d' d(d) d S )*N)r   r/   rQ   z%Y%m%d)ZtradeDate__dater/   r7   r   )r   r   zutf-8)encodingZTradeLogr   z
Trade Dater   zExch/Segr   Token   Name   zOrder Id   z
Trade Type   ZQty   ZPrice   Status	   zExecuted onz%d-%m-%Y %H:%M:%SzDhananjay: Trade Log z%d/%m/%Yz
                Dear  a#  ,
                Enclosed the trade log for the subject date. 
                Trade log is for reference and do not claim to be absolutely true.
                In case you find any issue please reply to this mail.

                Thanks, 
                Team Dhananjay'
                ZtradeLogz%d%m%Yz.xlszapplication/ms-excel)#r   r   r   strptimedater   r   r   r:   r   r    r   r"   r   xlwtWorkbook	add_sheetwriter   r   strftimer/   r7   r8   r   rn   r   rm   rO   r   rS   r   
first_nameemailsend)r)   r   r   ZlogDater   Z
objLogDater   Zsocialr*   Z	excelfilewbwsZcurrRowr   r   subjectbodyZemailtor+   r+   r,   r   +  sV    

*
	r   c                   C   s   d S rH   r+   r+   r+   r+   r,   thread1TickCallbackk  s    r   Fr   r   c           +      C   sT  t |}tjj|d }t|||}t||}||d t	|j
d jj}||||dkrfg S ||}g }|dkr|	}|dkr|}d}tjj||||djdd}|jd	d
}|jdd
} tt|D ]|}!td |r*tt|t|t|!d   d}"tt|t|	t|!d   d}#nDtt|t|	t|!d   d}"tt|t|t|!d   d}#|dkrbt|}$|!|$k r||! }%||%j|}&|&d d dkrd}'|%j}nd}'d}nd}'d}td |j|'|d||dd	dd|"|ddddd||||d}(t|(d sb|(dd}||||})t|)dkrX|j|jj|||(dd}%||( |
dkrt| }*|!|*k r| |! }%|j||%jdd}&|&d d dkrd}'|%j}nd}'d}nd}'d}|j|'|d||dddd|#|ddddd||||d}(t|(d s|(dd}||||})t|)dkrD|j|jj|||(dd}%||( qd S )Nr   Tr   FrQ   )r   r.   r7   r   r^   r_   r   )rn   rb   zconsecutive order loopr   r   rO   )r   ZUpdateCreatez	buy orderr   LIMITDELIVERYDAY)rx   ry   r   r   All)Z	OrderType) r   r   r   r   r    r   r   r   r   r   r   rB   r6   r   rd   r   rj   ranger   rV   roundfloatlenZreadOrderBookr   ZsubmitOrderr   r   r   r!   r"   r=   )+r)   r   r   ZtargetIdr/   r7   r   r   r   r   r   r   r{   r   r~   r|   r   ru   rv   rw   rx   ry   r#   r*   rM   r\   rB   rz   ZlstOrdr   ZcheckLogZbuyLogZsellLogiZbuyPriceZ	sellPriceZiBuyLogr   ZlstOrderactionOrderZlstOrderBookZiSellLogr+   r+   r,   r   n  s    

"$""

	             

             r   c                 C   s  t jj| jd }t|jt}t	|j|j
}||j
d ||j
}|d krZtd |jj|j
d }t|j d jj}z^tdt d| j  | dd	d
krW dS d}d}d}	d}
td dkrtd dkrd}	nW dS |jjtd td |j
d }tjj|jtd td ddd }|r:|j}n|rH|j}nd}tjj|j
td d }|r|jdkr~W dS || jr|jdkrW dS |j}|j}t td }td dkr||j!7 }| j"|j!7  _"nd}
||j!8 }| j"|j!8  _"td|_||_t#$t%&d|_'|(  ||_)|(  td  d|j dtd  d|j! d| d 
} |j*+|  |	r|r|j"|j,krd}|j"|j-krd}t./|j0|jj
|j1j
|j|j2d!|||j3|||j4|j5|j|
 W n, t6k
r } zt| W 5 d }~X Y nX d S )"Nr   Tzerror connectionr   r   z
Read data z	 for QID r   rQ   rc   FrO   r   r^   r/   r7   r   r   ra   r   r   r   r   r   r   r   r   r   r8   r   r   r   r   )7r   r   r   r4   r    r   r   r*   r   r   r"   r   rd   rV   r;   r   rB   r6   r   QueueIdr   r   r!   r:   r   ZinitialStockrO   r   r/   r'   rf   rg   r   r   rp   r   r   r   r   r   rS   rl   r#   r$   ZmaximumStockZminimumStockr   r   r   r<   r7   r   re   ri   r%   )r   r   rM   r\   r   rF   rB   r   r   r   r|   r   r   r   r   r~   r   rW   r+   r+   r,   OrderCallback  s     (

.       r   )T)rQ   )FFFr   r   FTr   r   r   r   r   )1trading.modelsr   r   r   r   Zmainapp.views.socialconnectr   !trading.views.Strategies.strategyr   pandaspdmainapp.views.utilsr   celeryr	   r
   r   	threadingr   %trading.views.Entities.Brokers.brokerr   $trading.views.Entities.brokerAccountr   r   decimalr   Ztrading.views.Redis.redisPubSubr   Zmainapp.modelsr   r   r   timer   django.db.modelsr   ior   r   r   Z-mainapp.views.interaction.Notifications.emailr   r   r   r   r   r   r   r   r+   r+   r+   r,   <module>   s`      w?                     |