
    ϡgY                        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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 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/Z/ e/j`                  e1      Z2dZ3 G d de      Z4 ed      d#d       Z5 ed      d$d       Z6d Z7de8de9fd Z: ed      	 	 	 d%d!       Z;d" Z<y)&    )JobbingSettingsStrategyStatus	Strategis
JobbingLog)Telegram)StrategyN)isBlankOrNoneconvertUTCtoIST)shared_task)datetime)Thread)Broker)BrokerAccount)Decimal)PubSub)UserSocialProfile)User)BrokerAccounts	Exchanges)sleep)Q)BytesIO)	MSGATTRIB)EMail)transactionJOBBINGc                   F   e Zd ZdddZddZddZd ZddZed        Z	ed        Z
d	 Zd
 ZddZ	 ddZd ZddZddZ ej&                   ej*                  d             ej&                   ej*                  d            ddddddfdZddZ	 	 	 ddZddZddZy)JobbingNc                    t         | _        || _        t        j                  j                  | j                        j                         }|| _        t        | j                  j                        | _
        |s@| j                  j                  d| j                          t        d| j                         || _        |j                  | _        | j                  |       d| _        t#               | _        y )Ncodez#Err: No strategy defined with code zNo strategy defined with code DUMMY)STRATEGY_CODEr!   exchanger   objectsfilterfirstr   r   idtelegramsendMessage	ExceptionStrategyMasterisActivegetActiveSetupMasterQueuer   )selfuserr$   r,   s       KC:\Janisar\Projects\MarketYanta\Yantra\yantra\trading\Strategies\jobbing.py__init__zJobbing.__init__,   s    !	 "**111CIIK	 .MM%%(KDII;&WX<TYYKHII,&//H%"h    c                    g }g }t         j                  j                         j                  | j                  dd      j                  dd      | _        |s| j                  }|r!| j                  j                  |      | _        | j                  D ]  }|j                  j                  |vr%|j                  |j                  j                         |j                  j                  |j                  j                  |j                  j                  j                  |j                  |j                  |j                  d}||vs|j                  |        || _        || _        | j                  S )NT)r1   r-   target__isActive	target_idr$   )exchange__code)	accountIdclientIdbrokerIdr$   tokensymbol)r   r%   select_relatedr&   r   order_bySetupsr$   targetr(   appendr:   brokerr;   r<   r=   ActiveAccountsActiveScripts)r0   r$   lstActiveAccountslstActiveScriptssetupactiveScripts         r2   r.   zJobbing.getActiveSetup<   s@   %--<<>EETYYcg  }AE  B  K  K  LW  Xb  c}}H++,,H,EDK [[E||&77!((9 #(,,//"',,"7"7"',,"5"5">">"'.."'++"',,L #33 ''5% !( 0-{{r4   c                     | j                   j                  sy|s| j                  }|d k(  r@| j                  j	                  d| j
                          t        d| j
                         | j                         }|d k7  S )NFz"No user defined for strategy code )r,   r-   r   r)   r*   r!   r+   r.   )r0   r1   setupss      r2   r-   zJobbing.isActive`   st    ""++99D4<MM%%(J499+&VW@LMM$$&~r4   c                     g S N r0   s    r2   getScriptForTickCallbackz Jobbing.getScriptForTickCallbackn   s    	r4   c                 B    t         j                  j                  |      S )Nstatus)r   r%   r&   r0   rS   s     r2   	getOrderszJobbing.getOrdersr   s    !!((&(99r4   c                      yNTrN   rO   s    r2   requireOrderCallbackzJobbing.requireOrderCallbackv   s    r4   c                      y)NFrN   rO   s    r2   requireTickCallbackzJobbing.requireTickCallbackz   s    r4   c                     t         j                  j                  | j                  | j                        j                         }|r|j                  S y )Nr1   strategy)r   r%   r&   r   r,   r'   
currStatusrT   s     r2   	getStatuszJobbing.getStatus~   sB    ''..diiDL_L_.`ffh$$$r4   c                    t         j                  j                  | j                  | j                        j                         }|r||_        n#t        | j                  | j                  |d      }|j                          y )Nr\    )r1   r]   r^   taskId)r   r%   r&   r   r,   r'   r^   save)r0   rS   stats      r2   	setStatuszJobbing.setStatus   se    %%,,DII$J]J],^ddf$DO!"&))"&"5"5"("$	D 			r4   c                     	 | j                  d       | j                  j                  d| j                   d       | j                  S # t
        $ r}t        |       Y d }~yd }~ww xY w)N	Initiatedz	Strategy z
 InitiatedF)re   r)   r*   r!   r-   r+   print)r0   r$   excs      r2   initiatezJobbing.initiate   sV    	NN;'MM%%	$))J&GH==  	#J	s   AA 	A&A!!A&c                 p   | j                   j                  | j                   d       | j                  |       | j                   j                  | j                   d       | j	                  |       t        d       | j                  |       | j                   j                  | j                   d       y )Nz : execution startedz : Order tracking started   z : Initial Order Placed)r)   r*   r!   processOrderCallbackprocessTickCallbackr   createInitialOrder)r0   brokerAccountr$   s      r2   startzJobbing.start   s    !!TYYK/C"DE 	!!(+!!TYYK/H"IJ  *a.!!TYYK/F"GHr4   c                 N   d}| j                   D ]l  }||j                  j                  k7  rg }|j                  j                  }|j                  |j                  j                        }| j	                  d      }|r5|D cg c]  }|j
                   }}|j                  |       t        d       |j                  }d}	|j                  }
|j                  }|j                  }|j                  }t        j                  j                  | j                   |j"                  |j$                        j'                  d      j)                          t        j                  j                  | j                   |j"                  |j$                  ddg	      j+                  d
      j-                         }|r|j.                  dkD  r7|j.                  }| j0                  j3                  | j4                   d|        n7|j6                  }| j0                  j3                  | j4                   d| d       |j8                  dk(  rUd}	nR|j.                  dkD  r|j.                  }n|j:                  }| j0                  j3                  | j4                   d|        | j=                         dk(  r y d}d}|j>                  |j@                  k\  rd}|j>                  |jB                  k  rd}	 | jE                  | j                   j                  |j                  |j"                  j4                  |j$                  |jF                  ||
|||||||	d|jH                  |jJ                  |jL                  |jN                  |jP                         o y c c}w # tR        $ r}tU        |       Y d }~d }~ww xY w)Nr   OPENrl   F)r1   r$   r<   COMPLETErR   PARTIAL)r1   r$   r<   
status__in
-updatedOnz : Override Price z : Base Price z as per last TransactionSELLTz$ : no prev record, setup base price 	TERMINATE)+r@   rA   r(   getBrokerObjectrU   orderIdcancelOrdersr   simulatebuyLotsellLotbuyTicksellTickr   r%   r&   r   r$   r<   excludedeleter?   r'   priceCurrentr)   r*   r!   price	orderType	priceBaser_   stockCurrentstockMaxstockMinexecuteOrderPair	dayOrdersorderCatagorygttBuyBuffergttSellBufferwaitcountr+   rh   )r0   rp   tmpAccountIDrH   lstOrd	brokerObjordersord
simulationflagReverseTicklotSizelotSizeSelltickSizetickSizeSelllog	basePricebuyOnlysellOnlyri   s                      r2   ro   zJobbing.createInitialOrder   s6   [[Eu||.$||)99%,,//J	/5;<VcckkVF<**62!HJ#O llG--K}}H >>L%%TYY5>>[`[f[f%goo  zDo  E  L  L  N$$++499afalal  }G  HQ  |R+  S  \  \  ]i  j  p  p  rC%%) % 2 2I MM--;Mi[.YZ #		IMM-->)Tl.mn==F*&*O
 %%) % 2 2I %I))TYYK7[\e[f*gh ~~;. GH!!U^^3!!U^^3%%IILL%,,0C0CU[[RWRaRaw'8ZQ]_j#T5+>+>@R@RTYTgTgJJ	w ! =v  c
s    N  BN	N$NN$c           	         |s| j                   }| j                  g k(  r| j                  |       g }| j                  r| j                  D ]R  }|r|j	                  d      |k7  r|j	                  d      |j	                  d      d}||vsB|j                  |       T |D ]T  }t        j                  | j                  t        |j	                  d            |j	                  d      j                         V y)Nr$   r9   )r9   r$   T)
r$   rE   r.   rX   getrB   workerS1OrderCallbackdelayr!   str)r0   r$   	lstUniquescriptdictitems         r2   rm   zJobbing.processOrderCallback$  s    }}H#)	$$,,

: 6( B #)**["9"(**Z"8 y($$T* - " &++DIIs488K;P7QSWS[S[\fSgSlSlm	 " r4   c                     | j                   r	 yrW   )rZ   )r0   r$   s     r2   rn   zJobbing.processTickCallbackF  s    ##r4   Asia/Kolkatart   c	                 @   t        | j                  ||f|      }	|r|	t        |      z  }	|r|	t        |      z  }	|r|	t        |      z  }	|r|	t        |      z  }	|r|	t        |      z  }	t        j                  j	                  |	      j                  d      }
|
S )N)r1   tradeDate__rangerS   )r$   )r{   r7   )r<   )r=   	updatedOn)r   r   r   r%   r&   r?   )r0   	startDateendDater$   r<   r=   r{   brokerAccountIdrS   qFilterlogss              r2   getOrderLogzJobbing.getOrderLogL  s    
 499)W9MX^_a8,,Ga'**GaO44Ga&&Ga((G!!((1::;Gr4   c                 h   t         j                  j                  |||      j                         }|r_t	        j
                  t        j                  d            |_        |d   |_	        |d   |_
        |dk7  r||_        |j                          |S |dk(  rd}t        ||t        j                  j                  |d         |d	   |j                  d
d      |t	        j
                  t        j                  d            |d   |d   |d   |d   dk(  rdndd||d         }|j                          |S )N)user_idr7   r{   r   quantityr   ra   rs   exchSegr    r<   r=   tranTypevarietyNORMALTFr   orderCategory)r   r7   r$   r<   r=   r{   	tradeDater   r   r   intraday	currStockrS   r   )r   r%   r&   r'   r   nowpytztimezoner   r   r   rS   rc   r   r   )r0   useridr{   r   verboseOrderrS   r   s          r2   createOrderLogzJobbing.createOrderLoge  s-     ''&oah'iooq&ll4==+HICM*:6CL*73CI|"(
HHJ. 
) |"("1"+"3"3"7"7\)=T"7"U".w"7"."2"28B"?")"*,,t}}^/L"M".z":".w"7".z":*6y*AX*M$SX"#"("."?C  HHJ
r4   c                 d   t        |j                  j                        }|j                  |dd      r4t	        | j
                  ||j                  |||||||	|
||||||||||       y t        t        | j
                  ||j                  |||||||	|
||||||||||f      }|j                          y )N   rA   args)	r   rC   r;   canPlaceOrderworkerOrderPairr!   r(   r   rq   )r0   r   rA   r$   r<   numberOfOrdersr   
lotSizeBuytickSizeBuyr   r   r   r   r   r   	createLogr   r   r   r   r   rC   t1s                          r2   r   zJobbing.executeOrderPair  s     ../1-DII		8UNJ;(L+|]D% dii		8UNJ;(L+|]D%6 B HHJr4   c           
      z   	 d}t         j                  j                  | j                  j                  |||d      }|s	 |S |j                  |      }|D ]  }	|D ]  }
|
d   |	j                  k(  s|
j                  d      |	j                  k7  s6t        |
j                  d            rQ|
d   dv r^|
j                  d      |	_        |	j                          t        j                  d	|	j                   d
|
j                  d                |S |sddd|j                  t        j                  |j                   j                  i}i ddd|
j                  d      d|j                   j"                  dt%        |j                   j"                        d|
j                  d      d|
j                  d      d|
j                  d      dd dt%        |
j                  d            d|
j                  d      dd d!d"d#d$dd%d&d'd(d)d*d+d,|
j                  d      d-|
j                  d.      d/}|j'                  |       |j(                  j+                  |j                  |       d}   	 |S # t,        $ r.}t        j/                  d0t%        |              d}Y d }~|S d }~ww xY w# c cY S xY w)1NFrs   )r   r7   r8   r   rS   TOrderCatagoryr{   rS   )REJECTEDCANCELEDrt   order status for orderid  updated to MTYPEORDQIDtom
norenordnouidactidexchr$   tsymr=   trantyper   r   r   qtyr   prcaveragePricepcodeMremarksra   	rejreason PENDING
reporttypeModAckprctypLMTretDAY	exchordid0OrderedTime)dscqtyexch_tmz,failed to update missing order message sync )r   r%   r&   r   r(   readOrderBookr{   r   rS   r	   rc   loggerdebugOrderQr   	ACCOUNTIDAccountr:   r   updatepubsubpublishr+   error)r0   r   r   targetIdr$   r   	defStatuscheckLoglstOrderr   r   
identifierlordes                 r2   updateLogStatusFromOrderBookz$Jobbing.updateLogStatusFromOrderBook  sW   *	I!))00*.)),,*208,9.4 1 H @ = !..].KH#C9~49Jcjj9Xanorovovw  pA  bBx=,NN),):CJHHJ"LL+DS[[MQ]^a^e^efn^o]p)qr#', + # ' %y'7'7 ) 3 3Y5F5F5I5I*J
$" #T$"+79K$" %y'8'8'A'A$"CJCPYPaPaPjPjLk$"msuxu|u|  ~H  vI$" !'(9$" <FswwzGZ[\]^G_$" bghklolslst~l  iA$" CH  JM  JQ  JQ  R`  Ja$" cj  lo$" qz  |~$" !,S	$" 3;I	$" HTU]	$" `hin	$" qvw|	$"
 !,SWWY-?$"
 LO[^[b[bcp[q$"D !KK
3%,,44Y5E5EtL(,I/ $  : 	  	LLGAxPQI		 sO   <I9 0I9 2I9 I9 ,A#I9 I9 E"I9 9	J0#J+%J3 +J00J3 3J:c           	         | j                  |       | j                  D ]F  }|j                  |      }|j                         }|j	                         }|j                         }| j                  j                  |      }|D ]  }	|	j                  d      }
|
D ]  }|j                  |j                  d      |j                  d            j                         }|sEt        |j                  d            |_        |D ]z  }|j                  d      |j                  d      k(  s'|j                  d      |j                  d      k(  sKt        |j                  d            |_        |j                              |D ]  }|j                  |j                  d      |j                  d            j                         }|sEt        |j                  d	            |_        |D ]z  }|j                  d      |j                  d      k(  s'|j                  d      |j                  d      k(  sKt        |j                  d            |_        |j                             I y )
Nr   	exch_tsymr   r<   )r$   r<   ppr$   	fillpricenetqty)r.   rD   rz   getHoldingsgetPositionsreadTradeBookr@   r&   r   r'   intr   r   r   rc   )r0   rp   r$   r9   r   holdings	positions	tradeBookrK   holdingtsymsr   rH   tradepositions                  r2   resyncStrategyValueszJobbing.resyncStrategyValues  s   H%,,I%55i@I ,,.H!..0I!//1I[[''I'>F#K0!D"MMTXXf5EtxxX_O`MaggiE-0$-@*%.E$yy48HHUYYW^M_cgckcklsctMt5<UYY{=S5T 2 %

 %	 &/	 " $ &f1Ex||\cOdekkm),X\\(-C)DE&!* 99Z0HLL4HHUYYW^M_ckcocopwcxMx18;9O1PE.!JJL!	 "+	 &% -r4   rM   )returnNrs   ra   FFFr   r   FTNormalr   r   r   r   )F)__name__
__module____qualname__r3   r.   r-   rP   rU   propertyrX   rZ   r_   re   rj   rq   ro   rm   rn   r   r   r   r   r   r   r   r	  r  rN   r4   r2   r   r   +   s     "H:    	BIGr D +hll=4==+HIUaU]UaUabobfbobop~b  VATDD\`ku2!N \]-1WXH,\"r4   r   T)bindc                    t        |      }t        j                  j                  |      j	                         }|sy t        |j                  j                        }t        j                  |j                  ||      }t        |j                  |      }	|	j                  |d       |	j                  |      }
|
=|j                  d       t        j                  d|j                  j                           |j"                  j                  |      j	                         }t%        |	j                  d   j&                  j(                        }t+               }|j-                  |	j                  d   j&                  j(                  |	j                  d   j                        }|r|j/                  |j0                         n0t        j                  d|	j                  d   j2                          y|j5                  |      rL|j7                         }|d k(  rt9        d	       3	 t        j;                  |       |j=                  d
d      dk(  re|j=                  d|j>                        |j>                  k(  r<|j=                  d|      |k(  r'|j=                  d|      |k(  r|jA                          n|j=                  d      dk(  r|jC                  |      }tE        |j=                  d            rt        j                  d|        d}d}d}d}|d   dv r|d   dk(  rd}ntF        j                  j                  ||d         j	                         }|r|jH                  |j=                  d      k7  rtE        |j=                  d            s{|d   |_$        tK        jL                  tO        jP                  d            |_)        |jU                          t        jW                  d|j=                  d       d|jH                          |j"                  j                  |d   |d   |      j	                         }|r|jX                  }nBd}t        j                  d|d    d|d           |j                  d|d    d|d           tF        j                  j                  ||d         j	                         }|rt|jH                  dv r|jZ                  dk(  r|j\                  }|j^                  }ta        |d          }|d!   d"k(  r||jb                  z  }||_,        nd}||jb                  z  }||_,        |j=                  d      |_$        ||_2        tK        jL                  tO        jP                  d            |_)        |jU                          t        jg                  d#|jH                   d|jh                   d$|        ||_5        |jU                          d%|j                   d&|d!    d'|jl                  j>                   d(|d)    d*|jb                   d+| d,}|j                  |       |r|r|jX                  |jn                  k\  rd}|jX                  |jp                  k  rd}t        jg                  d-|jl                  j>                   d(|jr                   d|        |ju                  |      rtw        |j>                  |jx                  j                  |jz                  j                  |jl                  j>                  |jr                  d	|||j|                  |||j~                  |j                  |j^                  |       nt        tv        |j>                  |jx                  j                  |jz                  j                  |jl                  j>                  |jr                  d	|||j|                  |||j~                  |j                  |j^                  |f.      }|j                          t        jg                  d/|jl                  j>                   d(|jr                   d|        |j5                  |      rL|j                  d0| d1       t        j                  |jx                  j                  |       |j                  d2| d3       y # t        $ r}t        j                  |       Y d }~d }~ww xY w)4Nr(   Tz%Error while connecting broker accountz/Error while connecting broker account for user r   r   z"could not get broker instance for Fr   typera   ry   r]   r$   r9   r   r   r{   zinvalid order data rS   rt   rt   r7   r{   r   zOrder log status updated r   r   r<   )r8   r<   r7   zNo setup found for z : 
limitPricer   BUYzafter saving in db z Qty:zUser:z, -:r=   	 - Qty (  @  )zwork order pair initiating for r   zwork order pair completed for zProcess for Exchange z is completedz#Email with trade list for Exchange z is sent)Fr  r   r%   r&   r'   r   r1   r(   r   getStrategyInstancer   Connectrz   r*   r   r  usernamer@   r   rC   r;   r   getBrokerInstance	subscriber   nickNameisMarketOpenget_messager   warningr   r!   clear_messageformatOrderCallbackr	   r   rS   r   r   r   r   r   rc   infor   r-   r~   r   r   r   r   r   r{   r   r$   r   r   r<   r   r   r   rA   r   r}   r   r   rq   r+   sendTradesbyEmailr   )r0   strategyCodeaccIdr$   	cancelOldr9   bar)   r]   rp   connObjrH   rC   r   broker_instr   r   r   logTrader   currLogr   r   r   r   messager   ri   s                               r2   r   r     s   E
I				&	&I	&	6	<	<	>B

#H++BGGL(KH!"'')4M)D)++I6GDFFrwwGWGWFXYZOO""y"9??AEM003::CCDFXF**=+G+G+J+Q+Q+Z+Z\i\x\xyz\{\~\~K++,9-:V:VWX:Y:b:b9cde 

h
'   "$;!H |	 NN3wwvb![0GGJx}}5F377S]^fKgksKsy|  zA  zA  BM  NS  zT  X]  z]((* www5(!55c:SWWY/023%89GHH#O8},x=J.#H$,,33VYZcVd3ekkm~~)::=QTQXQXYaQbCc),X.6ll4==;X.Y)&?	@R?SSTU\UcUcTd$efOO**C	NTWX_T`nw*y  BE!..		23y>2B#c'l^TU$$':3y>:J#cRYl^%\] !((//YRUV_R`/aggiG>>\1$$-"\\
#mm#C$56	z?e+!1!11I)2E& '+O!1!11I)2E& '*ggh&7&/!&.ll4==3P&Q!27>>2B!GOOCTTYZcYdef%."

!"''"S_,=Qu~~?R?R>SSTUXYaUbTcclmtm}m}l~  B  CL  BM  MO  P$$W- ))U^^;#'))U^^;"&LL#B5>>CVCVBWWXY^YdYdXeefgpfq!rs++H5'x}}7G7GZ_ZhZhZmZmotozoz|}(1:emm(/5>>5>>[`[h[hjy{ $?(0x}}7G7GZ_ZhZhZmZmotozoz|}(1:emm(/5>>5>>[`[h[hjy**& 
LL#A%..BUBUAVVWX]XcXcWddefoep!qrE 

h
'\ 0
-HIHMM,,X6>xjQR  	LL	sB   !Bb  0Ab  	Db  Bb  Ab  b  %Mb   	c)ccc           
         t        ||      }|dk(  rt        j                         }nt        j                  |d      }|t        |j	                               z  }t
        j                  j                  |      j                  ddd      }t        j                  j                  |      j                         }t        j                  j                  |j                  	      j                         }|rt               }	t        j                  d
      }
|
j!                  d      }|j#                  ddd       |j#                  ddd       |j#                  ddd       |j#                  ddd       |j#                  ddd       |j#                  ddd       |j#                  ddd       |j#                  ddd       |j#                  ddd       |j#                  ddd        d}|D ]k  }|j#                  |dt%        |j&                        j)                  d!             |j#                  |d|j*                         |j#                  |d|j,                         |j#                  |d|j.                         |j#                  |d|j0                         |j#                  |d|j2                         |j#                  |d|j4                         |j#                  |d|j6                         |j#                  |d|j8                         |j#                  |d|j:                  d k(  rdn#t%        |j:                        j)                  d!             |dz  }n |
j=                  |	       t?               }d"|j)                  d#      z   }d$|j@                   d%}|jB                  g}|jE                  ||||	d&|j)                  d'       d(d)       y y )*N)r   r$   ra   z%Y%m%d)tradeDate__dater$   r<   r   )r   r&  zutf-8)encodingTradeLogr   z
Trade Dater   zExch/Segrl   Token   Name   zOrder Id   z
Trade Type   Qty   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'
                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$   r<   r=   r{   r   r   r   rS   r   rc   r   
first_nameemailsend)r0   r   r$   logDater   
objLogDater   socialr1   	excelfilewbwscurrRowr   r`  subjectbodyemailtos                     r2   r=  r=    s   &X6G"}\\^
&&w:
q:??#455G$$W-66z'+VD&&---?EEGF<<&)),224DI	]]G,\\*%
A|$
Az"
Aw
Av
Az"
A|$
Au
Aw
Ax 
A}%C HHWa!?!H!HI\!]^HHWa.HHWa+HHWa,HHWa-HHWa/HHWa.HHWa+HHWa,HHWas}}'</RUR_R_B`BiBij}B~qLG " 		)J,?,?
,KK' ( <<.

74hz?R?RS[?\>]]a4bdz{a r4   c                       y rM   rN   rN   r4   r2   thread1TickCallbackrm    s    r4   r  r{   c                 B    | D ]  }|j                  d      |k(  s|c S  y )Nr{   )r   )r  r{   r   s      r2   getOrderro     s'    779(J  r4   c                    t        |      }t        j                  j                  |      j	                         }t        j                  |||      }t        ||      }|j                  |d       t        j                  d|j                          t        |j                  d   j                  j                        }|j!                  |||      dk(  rt        j#                  d| d|        g S |j%                  |      }g }|dk(  r|	}|dk(  r|}d}t&        j                  j                  |||||d	
      }|j)                  |      }|D ]  } |D ]  }!|!d   | j*                  k(  s|!j-                  d      | j.                  k7  s5t1        |!j-                  d            rP|!j-                  d      | _        | j3                          t        j                  d| j*                   d|!j-                  d                t&        j                  j                  |||||d	
      j5                  dd      }|j                  d      j	                         }"|j                  d      j	                         }#|rCt7        t9        |      t9        |      z
  d      }$t7        t9        |      t9        |	      z   d      }%nBt7        t9        |      t9        |	      z
  d      }$t7        t9        |      t9        |      z   d      }%|dk(  rd|"} | rp|j)                  | j*                  |      }|d   }&|&r'|&j-                  d      dv rd}'| j*                  }n/d}'d}n*t        j;                  d| j*                   d|        nd}'d}t        j                  d'        |j=                  |'|d||dddd|$|ddddd||||       }(t1        |(d         s|(j-                  dd      }|j)                  |||      })t?        |)      dkD  r]t        j                  d!|        |jA                  |j                  jB                  |||(d	"      } t        j                  d#| d$|'        |jE                  |(       |
dk(  rh|#} | rr|j)                  || j*                  d%&      }|d   }!|!r'|!j-                  d      dv rd}'| j*                  }n/d}'d}n*t        j;                  d| j*                   d|        nd}'d}t        j                  d''        |j=                  |'|d||dddd|%|ddddd||||       }(t1        |(d         s|(j-                  dd      }|j)                  |||      })t?        |)      dkD  r]t        j                  d!|        |jA                  |j                  jB                  |||(d	"      } t        j                  d#| d$|'        |jE                  |(       y y y )(Nr&  TzBroker Account connected for r   FzOrder place timed out r-  ra   rs   )r   r7   r8   r<   r   rS   r   r{   rS   r   r   z
-tradeDaterw   r+  )r   rx   rl   r  UpdateCreatezorder not found in order book z token z)buy order processing started with action r   LIMITDELIVERYr   )r   r   zorder created with id rR   zorder updated in log for id z action All)	OrderTypez*sell order processing started with action )#r   r   r%   r&   r'   r   r1  r   r2  r   r   r3  r   r   rC   r;   r   r9  rz   r   r   r{   r   rS   r	   rc   r?   roundfloatr  submitOrderlenr   r(   rB   )*r0   r>  r   r  r$   r<   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r)   r1   r]   rp   rC   r   r   r{   r  r  r   r   buyLogsellLogbuyPrice	sellPriceorderactionOrderlstOrderBooks*                                             r2   r   r     s    H<<F+113D++DhGH!$1M(D)
LL0@AM003::CCDFHdE2e;/z5'BC	 --h7IFq"a  G!!(("("*(0"'$1&, ) H &&]&CHC9~,1Bcjj1PYfgjgngnowgxYy WWX.

8\RURYRYZbRcQdef	   !!(("("*(0"'$1&, )  h|L9  __5_1779FooFo399;G y)eL.ADaH%	*u[/ADaH	y)eK.@BQG%	*u\/BDqI	5 ..s{{MJHQKE99X&(2%F!kkG%FG=ckk]'RWQXYZFG 	@IJ ))&(HhPUWY$)7J*VWY^`acdfghoq{  CG  PU * V U9-.ii	"-G(66xWL< 1$5gY?@,,X]]-=-=wRWbh,i;G9HVHUV MM%  % $228S[[V[2\H1+C778$0%F!kkG%FG=ckk]'RWQXYZFGA&JK))&(HhPUWY$*GZKYZ\acdfgijkrt~  GK  UZ * [ U9-.ii	"-G(66xWL< 1$5gY?@--hmm.>.>SXci-j;G9HVHUV MM%  /7 r4   c                 	   t         j                  j                  | j                        j	                         }t        j                  |j                  t              }t        |j                  |j                        }|j                  |j                  d       |j                  |j                        }|t        d       |j                  j                  |j                        j	                         }t        |j                   d   j                   j"                        }	 t        dt$         d| j&                          | j)                  dd	      d
k(  ryd}d}d}	d}
t$        d   dv rt$        d   dk(  rd}	ny|j                  j                  t$        d   t$        d   |j                        j	                         }t*        j                  j                  |j,                  t$        d   t$        d   d      j/                  d      j	                         }|r|j0                  }n|r|j2                  }nd}t*        j                  j                  |j                  t$        d         j	                         }|r`|j4                  dv ry|j7                  | j8                        r|j:                  dk(  ry|j<                  }|j>                  }tA        t$        d         }t$        d   dk(  r/||jB                  z  }|xjD                  |jB                  z  c_"        n0d}
||jB                  z  }|xjD                  |jB                  z  c_"        t$        j)                  d      |_        ||_        tG        jH                  tK        jL                  d            |_'        |jQ                          ||_)        |jQ                          t$        d    d|j8                   dt$        d    d|jB                   d| d 
} |jT                  jW                  |        |	r|r|jD                  |jX                  k\  rd}|jD                  |jZ                  k  rd}t]        |j^                  |j,                  j                  |j`                  j                  |j8                  j^                  |jb                  d!|||jd                  |||jf                  |jh                  |j>                  |
       y y y y # tj        $ r}t        |       Y d }~y d }~ww xY w)"Nr&  Tzerror connectionr   r   z
Read data z	 for QID r'  ra   ry   FrS   )rt   ru   rt   r$   r<   )r$   r<   r7   )r1   r$   r<   rS   rw   r{   r)  r(  r*  r   r+  r   r,  r-  r=   r.  r/  r0  r   )6r   r%   r&   r9   r'   r   r1  r1   r#   r   r(   r2  rz   rh   r@   r   rC   r;   r   QueueIdr   r   r   r?   r   initialStockrS   r   r$   r-   r~   r   r   r   r   r   r   r   r   r   rc   r   r)   r*   maximumStockminimumStockr   r!   rA   r<   r   r}   r   r+   )rF  rA  r]   rp   rB  rH   rC   r   r   rD  r   logStockr   rE  r   r   r   ri   s                     r2   OrderCallbackr    sA   				&	&g.?.?	&	@	F	F	HB++BGGMBH!"''"%%0M"%%%++BEE2G !OO""ruu"5;;=EM003::CCDFN
3%y(9:;;;vb![0x=228}
*&&#j/3w<egejej&lrrt%%,,HMMcR\ogjkrgs  I,  J  S  S  T`  a  g  g  i **I!..		$$++#i.+Y__a~~-##G$4$458;L;LPU;UJ--KL 12I:%'W---	""g&6&66" #'W---	""g&6&66" #&''("3GN"+G"*,,t}}^/L"MGLLN!*EJJLZ)5>>*:!CM?)T[TdTdSeehirhssuvG))'2 E%%););;#H%%););;"G  x}}/?/?RWR`R`ReReglgrgrtu ):enn '5>>5>>SXS`S`bqs "xM b  c

s2   "4S "S :DS *S 3H#S 	S8#S33S8)Tr  r  )=trading.modelsr   r   r   r   social.views.telegramr   trading.Strategies.strategyr   pandaspdutils.viewsr	   r
   celeryr   r   	threadingr   trading.Entities.Brokers.brokerr   -trading.Entities.BrokerAccounts.brokerAccountr   r   decimalr   trading.Redis.pubsubr   social.modelsr   django.contrib.auth.modelsr   r   r   timer   django.db.modelsr   ior   rZ   trading.Entities.Brokers.bnrathir   social.views.emailr   	django.dbr   logging	getLoggerr   r   r#   r   r   r=  rm  listr   ro  r   r  rN   r4   r2   <module>r     s    Q Q * 0  6    2 G   ( + + 4     6 $ ! 			8	$M"h M"B $nS nS` $<| <|~	d 3  $ \]-1WX[! [!~Zr4   