o
    hf[s                     @   s2  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 d dl mZ d dlm Z  d dlmZ dZ!G dd deZ"dd Z#dd Z$edd	 		d!ddZ%dd  Z&dS )"    )Strategy1SettingsStrategyStatus	StrategisStrategy1Log)Telegram)StrategyN)isBlankOrNone)shared_task)pdSeries)datetime)Thread)Broker)BrokerAccount)Decimal)PubSub)
CustomUser)BrokerAccounts)sleepZJOBBINGc                   @   s   e Zd Z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dd Zd'ddZdd Zd'ddZd'ddZd)ddZ	!	"	$d*d%d&ZdS )+	Strategy1Nreturnc                 C   sr   t | _|| _tjj| jd }|std| j || _|| _	|j
| _
| | d| _t | _t| jj| _d S )N)codezNo strategy defined with code ZDUMMY)STRATEGY_CODEr   exchanger   objectsfilterfirst	ExceptionUserStrategyMasterisActivegetActiveSetupZMasterQueuer   r   idtelegram)selfuserr   r    r%   Nd:\Janisar\Projects\Python\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| _|s| j}|r$| jj|d| _td}| jD ]M}|j	j
|vr:||j	j
 | jrJ|| 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	}||vrx|| q+|| _|| _| 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usernamer.   r)   requireTickCallbackbrokerr/   r0   r1   ActiveAccountsActiveScripts)r#   r   ZlstActiveAccountslstActiveScriptsr;   setupZactiveScriptr%   r%   r&   r    ,   s4   "
""
zStrategy1.getActiveSetupc                 C   sR   | j jsdS |s| j}|d kr!| jd| j  td| j |  }|d kS )NFz"No user defined for strategy code )r   r   r   r"   sendMessager   r   r    )r#   r$   setupsr%   r%   r&   r   N   s   zStrategy1.isActivec                 C   s   g S Nr%   r#   r%   r%   r&   getScriptForTickCallback\      z"Strategy1.getScriptForTickCallbackc                 C      dS NTr%   rC   r%   r%   r&   r7   `   rE   zStrategy1.requireOrderCallbackc                 C   rF   )NFr%   rC   r%   r%   r&   r:   d   rE   zStrategy1.requireTickCallbackc                 C   s&   t jj| j| jd }|r|jS d S )Nr$   strategy)r   r   r   r   r   r   
currStatus)r#   statusr%   r%   r&   	getStatush   s   zStrategy1.getStatusc                 C   sD   t jj| j| jd }|r||_n
t | j| j|dd}|  d S )NrH    )r$   rI   rJ   taskId)r   r   r   r   r   r   rJ   save)r#   rK   statr%   r%   r&   	setStatuso   s   zStrategy1.setStatusc              
   C   sX   z|  d | jd| j d | jW S  ty+ } zt| W Y d }~dS d }~ww )NZ	Initiatedz	Strategy z
 InitiatedF)rQ   r"   r@   r   r   r   print)r#   excr%   r%   r&   initiate|   s   
zStrategy1.initiatec                 C   sr   | j | j d | | | j | j d | | | j | j d | | | j | j d d S )Nz : execution startedz : Order tracking startedz' : price tracking Started if applicablez : 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 }|rz|jdkrb|j}| j| j d	|  n|j}| j| j d
| d |jdkryd}n|jdkr|j}n|j}| j| j d|  |  dkr d S d}d}|j|jkrd}|j|jkrd}z%| | jj|j|j|j|j|||	||||
||d|j |j!|j"|j#|j$ W q t%y } z
t&| W Y d }~qd }~ww | jd d S )Nr   F)r$   r)   r0   COMPLETErK   PARTIAL)r$   r)   r0   Z
status__in
-updatedOnz : Override Price z : Base Price z as per last TransactionSELLTz$ : no prev record, setup base price 	TERMINATEz'Initial order placed function completed)'r4   r5   r!   getBrokerObjectsimulatebuyLotsellLotbuyTicksellTickr   r   r   r   r)   r0   excludedeleter3   r   priceCurrentr"   r@   r   price	orderType	priceBaserL   stockCurrentstockMaxstockMinexecuteOrderPair	dayOrdersorderCatagorygttBuyBuffergttSellBufferwaitcountr   rR   )r#   rX   ZtmpAccountIDr?   	brokerObj
simulationflagReverseTicklotSizelotSizeSelltickSizetickSizeSelllog	basePricebuyOnlysellOnlyrS   r%   r%   r&   rW      s\   
$(


zStrategy1.createInitialOrderc              	   C   s   |s| j }g }| jr]| jD ]$}|r|d|krq|d|d|dd}||vr1|| qg }|D ]}tt| jt|d|d|dfd}|| q6|D ]}|	  qVdS )Nr   r-   r,   )r-   r   r,   r5   argsT)
r   r7   r=   getr6   r   workerS1OrderCallbackr   strrY   )r#   r   	lstUniquescriptdictZ
lstThreadsitemt1r%   r%   r&   rU      s*   

,
zStrategy1.processOrderCallbackc                 C   s   | j r	 dS rG   )r:   )r#   r   r%   r%   r&   rV     s   zStrategy1.processTickCallbackrM   c                 C   s   t jj|||d }|r-ttd|_|d |_	|d |_
|dkr'||_|  |S |dkr3d}t |||d |d |ttd|d |d |d	 |d
 dkrUdndd||d d}|  |S )N)user_idr(   orderIdAsia/Kolkataquantityri   rM   OPENr)   r0   tranTypevarietyNORMALTFr   orderCategory)r   r(   r)   r0   r   	tradeDater   ri   rj   intraday	currStockrK   r   )r   r   r   r   r   nowpytztimezoner   r   ri   rK   rO   )r#   useridr   ZbrokerAccountIdZverboseOrderrK   r}   r%   r%   r&   createOrderLog  s8   

zStrategy1.createOrderLogFr   TNormal   c                 C   sF   t t| j||j|||||||	|
||||||||||fd}|  d S )Nr   )r   workerOrderPairr   r!   rY   )r#   r   r5   r)   r0   numberOfOrdersr~   
lotSizeBuytickSizeBuyr   r   rw   r|   rz   rx   	createLogrq   rr   rs   rt   ru   r   r%   r%   r&   ro   -  s   

zStrategy1.executeOrderPairrB   )r   N)rM   FFFr   r   FTr   r   r   r   r   )__name__
__module____qualname__r'   r    r   rD   propertyr7   r:   rL   rQ   rT   rY   rW   rU   rV   r   ro   r%   r%   r%   r&   r      s*    

"




R
!
%r   c                 C   s  t |}tjj|d }|sd S t|jj}|d| d t	
|j| |}t|j|}||d ||}	|	d u rB|d |jj|d }
t|jd jj}t }|| ||r|| | }|d krttd q\z1|d	d
dkr|dd
|kr|dd
| kr|d| d |  W qd}d}d}d}|d dv r|d dkrd}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 }|r|jdv rW q\| |r|j!dkrW q\|
j"}|
j#}t$|d }|d dkr-||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%
}|r|
r|
j&|
j/krd}|
j&|
j0krd}t1|j2|jj|
j3j|
j.|
j4d&|||
j5|||
j6|
j7|
j#| W n t8y } z
t9| W Y d }~nd }~ww ||sbt9d| d' d S )(Nr!   zOrder processing for z startedTz%Error while connecting broker accountr(   r      typerM   r_   r   rI   zProcess for Exchange z is terminatedFrK   rZ   r\   rZ   r)   r0   r)   r0   r(   r$   r)   r0   rK   r]   r   r(   r   rZ   
limitPricer   BUYr   -:r1   	 - Qty (  @  )r   z is completed):intr   r   r   r   r   r$   r!   r@   r   getStrategyInstancer   Connectr`   r4   r   r;   r/   r   	subscribeisMarketOpenZsetLastAccessZget_messager   r   Zclear_messager   r   r3   r   stockInitialrK   canPlaceOrderr   rb   rc   r   r   rl   r   r   r   r   	updatedOnrO   rh   r)   rm   rn   r   r   r5   r0   rd   ra   re   r   rR   )strategyCodeZaccIdr   r,   r-   bar"   rI   rX   connObjr?   r;   Zpubsubordr   r   logTraderx   logStockr   currLogr   rz   r~   messagerS   r%   r%   r&   r   L  s   



0(


.		
ar   c                   C   s   d S rB   r%   r%   r%   r%   r&   thread1TickCallback  s   r   T)bindFr   r   c           *      C   sL  t jj|d }t|||}t||}||d t|j	d j
j}||||dkr/g S ||}g }|dkr<|	}|dkrB|}d}tjj||||djdd}|jd	d
}|jdd
}tt|D ]>} td |rtt|t|t| d   d}!tt|t|	t| d   d}"n"tt|t|	t| d   d}!tt|t|t| d   d}"|dkr*t|}#| |#k r||  }$||$j|}%|%d d dv rd}&|$j}qd}&d}nd}&d}td |j|&|d||dd	dd|!|ddddd||||d}'t|'d s*|'dd}||||}(t|(dkr%|j|jj|||'dd ||' |
dkrt|})| |)k rZ||  }$|j||$jdd}%|%d d dv rUd}&|$j}q^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r|j|jj|||'dd ||' qdd S )Nr   Tr   FrM   )r   r(   r0   r   rZ   r[   r   )rj   r^   zconsecutive order loopr   r   rK   )r   ZUpdateZCreatez	buy orderr   LIMITDELIVERYDAY)rt   ru   r   r   All)Z	OrderType)r   r   r   r   r   r   r   r   r   r   r;   r/   r   r`   r   rf   ranger   rR   roundfloatlenZreadOrderBookr   ZsubmitOrderr   r   r   r   r!   r6   )*r#   r   r   targetIdr)   r0   r   r~   r   r   r   r   rw   r|   rz   rx   r   rq   rr   rs   rt   ru   r$   rI   rX   r;   rv   ZlstOrdr   ZcheckLogZbuyLogZsellLogiZbuyPriceZ	sellPriceZiBuyLogr}   ZlstOrderactionOrderZlstOrderBookZiSellLogr%   r%   r&   r     s   	

"$""
	




r   c                 C   s  t jj| jd }t|jt}t	|j|j
}||j
d ||j
}|d u r-td |jj|j
d }t|j d jj}z,tdt d| j  | dd	d
krXW dS d}d}d}	d}
td dv rotd dkrnd}	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|r|j}nd}tjj|j
td d }|re|jdv rW 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 
} |	rh|rk|j"|j*kr<d}|j"|j+krEd}t,|j-|jj
|j.j
|j|j/d!|||j0|||j1|j2|j|
 W d S W d S W d S W d S  t3y } zt| W Y d }~d S d }~ww )"Nr   Tzerror connectionr   r   z
Read data z	 for QID r   rM   r_   FrK   r   rZ   r)   r0   r   r   r]   r   r   r   r   r   r   r   r   r   r1   r   r   r   r   )4r   r   r   r-   r   r   r   r$   r   r   r!   r   r`   rR   r4   r   r;   r/   r   QueueIdr   r   r   r3   r   ZinitialStockrK   r   r)   r   rb   rc   r   r   rl   r   r   r   r   r   rO   rh   ZmaximumStockZminimumStockr   r   r5   r0   r{   ra   re   r   )r   r   rI   rX   r   r?   r;   r   r   r   rx   r   r   r   r   rz   r~   rS   r%   r%   r&   OrderCallback@  s    (


.	
&r   r   )'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   mainapp.modelsr   r   timer   r   r   r   r   r   r   r%   r%   r%   r&   <module>   s>      3vz