
    Se\T                     h   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 Z  G d de          Z! ed          d             Z"d Z# ed          	 	 	 dd            Z$dS )    )Strategy1SettingsStrategyStatus	StrategisStrategy1Log)Telegram)StrategyN)isBlankOrNone)shared_task)pdSeries)datetime)Thread)Broker)BrokerAccount)Decimal)MessageQueue)getStrategyQueueId)
CustomUser)BrokerAccountsc                       e Zd ZddZd ZddZd Zed             Zed             Z	d	 Z
d
 Zd Zd Zd Zd Zd ZddZ	 	 	 ddZdS )	Strategy1returnNc                    d| _         t          j                            | j                                                   }|st          d| j                    || _        || _        |j        | _        | 	                                 d| _
        d S )NJOBBING)codezNo strategy defined with code DUMMY)r   r   objectsfilterfirst	ExceptionUserStrategyMasterisActivegetActiveSetupMasterQueue)selfuserr!   s      TC:\Janisar\Development\Python\Genie\StockGenie\trading\views\Strategies\strategy1.py__init__zStrategy1.__init__   s    	"*111CCIIKK 	JHTYHHIII	,&/"    c                    g }g }t           j                                                            | j        dd                              dd          | _        t          d          }| j        D ]}|j        j	        |vr|
                    |j        j	                   | j        r1|                    | j        j        |j        j        |j        d          nd | j        r1|                    | j        j        |j        j        |j        d          nd | j        |j        j	        |j        j        |j        j        j        |j        |j        |j        d	}||vr|
                    |           || _        || _        | j        S )	NT)r&   r"   target__isActive	target_idexchSegr   OT)	OrderQIdTickQIdstrategyCode	accountIdclientIdbrokerIdexchangetokensymbol)r   r   select_relatedr   r    order_bySetupsr   targetidappendrequireOrderCallback
getQueueIdusernamer4   r-   requireTickCallbackr   brokerr5   r7   r8   ActiveAccountsActiveScripts)r%   lstActiveAccountslstActiveScriptsrC   setupactiveScripts         r'   r#   zStrategy1.getActiveSetup#   s   '/>>@@GGtyei  CG  D  D  M  M  NY  Zc  d  d [ 	6 	6E|&777!((999 tx  tM  #W&"3"3DI4Fu|G\]b]jkn"o"o"o  SWsw  tL  #V&"3"3DI4Fu|G\]b]jkn"o"o"o  RV"&)"',/"',"7"',"5">"'-"'+"',
 
L #333 ''555/-{r)   c                     | j         j        sdS |s| j        }|d k    rt          d| j                   |                                 }|d k    S )NFz"No user defined for strategy code )r!   r"   r    r   r   r#   )r%   r&   setupss      r'   r"   zStrategy1.isActive@   sa    "+ 	5 	9D4<<LLLMMM$$&&~r)   c                     g S N r%   s    r'   getScriptForTickCallbackz"Strategy1.getScriptForTickCallbackM   s    	r)   c                     dS NTrN   rO   s    r'   r?   zStrategy1.requireOrderCallbackQ   s    tr)   c                     dS )NFrN   rO   s    r'   rB   zStrategy1.requireTickCallbackU   s    ur)   c                     t           j                            | j        | j                                                  }|r|j        S d S )Nr&   strategy)r   r   r   r    r!   r   
currStatus)r%   statuss     r'   	getStatuszStrategy1.getStatusY   sD    '..diDL_.``ffhh 	$$4r)   c                     t           j                            | j        | j                                                  }|r||_        nt          | j        | j        |d          }|                                 d S )NrU    )r&   rV   rW   taskId)r   r   r   r    r!   r   rW   save)r%   rX   stats      r'   	setStatuszStrategy1.setStatus`   sw    %,,DI$J],^^ddff 	$DOO!"&)"&"5"("$	  D 			r)   c                     	 |                      d           | j        S # t          $ r}t          |           Y d }~dS d }~ww xY w)N	InitiatedF)r_   r"   r   print)r%   excs     r'   initiatezStrategy1.initiatem   sX    	NN;'''=  	 	 	#JJJ55555	s    
A=Ac                     |                      |           |                     |            |                                  d S rM   )createInitialOrderprocessOrderCallbackprocessTickCallback)r%   brokerAccounts     r'   startzStrategy1.startv   sB    ...!!$'''  """""r)   c                    d}| j         D ]@}||j        j        k    r|                    |j        j                  }|j        }d}|j        }|j        }|j        }	|j        }
t          j
                            | j        |j        |j                                      d                                           t          j
                            | j        |j        |j        ddg                              d                                          }|rM|j        dk    r|j        }t)          d	|            n|j        }t)          d
| d           |j        dk    rd}n,|j        dk    r|j        }n|j        }t)          d|            |                                 dk    r d S d}d}|j        |j        k    rd}|j        |j        k    rd}	 |                     | j        j        |j        |j        |j        |j        |||	||||
||d|j        |j        |j                    # tB          $ r}t)          |           Y d }~:d }~ww xY wt)          d           d S )Nr   F)r&   r-   r7   COMPLETErX   PARTIAL)r&   r-   r7   
status__in
-updatedOnzOverride PricezBase Price z as per last TransactionSELLTz!no prev record, setup base price 	TERMINATEzInitial Order placed)"r;   r<   r=   getBrokerObjectsimulatelotSizelotSizeSelltickSizetickSizeSellr   r   r   r    r-   r7   excludedeleter:   r   overridePricerb   price	orderType	basePricerY   currentStockmaximumStockminimumStockexecuteOrderPair	dayOrdersorderCatagorygttBuyBuffergttSellBufferr   )r%   ri   tmpAccountIDrH   	brokerObj
simulationflagReverseTickru   rv   rw   rx   logr~   buyOnlysellOnlyrc   s                   r'   rf   zStrategy1.createInitialOrder|   s   [ ;	 ;	Eu|..)99%,/JJ	J#O mG+K~H -L ''tyEM[`[f'ggoo  zDo  E  E  L  L  N  N  N&--TY%-afal  }G  HQ  |R-  S  S  \  \  ]i  j  j  p  p  r  rC G&** % 3I 69667777 #	IK	KKKLLL=F**&*O
 &** % 3II %IE)EEFFF ~~;.. GH!U%777!U%777
%%IL%,u{EOw'8ZQ]_j#T5+>@RTYTg       c


 	$%%%%%s   AH%%
I	/II	c                 (   | j         rt          j        | j                  | _        t          | j                  }|j        D ]P}t          | j        d|          }|j        D ]0}t          	                    |j
        t          |          |           1QdS )Nr3   T)r?   pd	DataFramerE   
setupFramer   r3   r6   workerS1OrderCallbackdelayr   str)r%   rV   	psAccountr3   
psExchanger6   s         r'   rg   zStrategy1.processOrderCallback   s    $ 	Y l4+=>>DO 11I&0 Y Y	%dok)LL
 * 3 Y YH)//s9~~xXXXXY tr)   c                     | j         r	 dS rR   )rB   rO   s    r'   rh   zStrategy1.processTickCallback   s    # 	tr)   r[   c                 \   t           j                            |||                                          }|rgt	          j        t          j        d                    |_        |d         |_	        |d         |_
        |dk    r||_        |                                 n|dk    rd}t          |||d         |d         |t	          j        t          j        d                    |d         |d         |d	         |d
         dk    rdndd||d                   }|                                 |S )N)user_idr,   orderIdAsia/Kolkataquantityr|   r[   OPENr-   r7   tranTypevarietyNORMALTFr   orderCategory)r   r,   r-   r7   r   	tradeDater   r|   r}   intraday	currStockrX   r   )r   r   r   r   r   nowpytztimezoner   r   r|   rX   r]   )r%   useridr   brokerAccountIdverboseOrderrX   r   s          r'   createOrderLogzStrategy1.createOrderLog   s+   "))Fcj)kkqqss 	&l4=+H+HIICM*:6CL*73CI||"(
HHJJJJ ||"("1".y"9".w"7")"*,t}^/L/L"M"M".z":".w"7".z":*6y*AX*M*M$$SX"#"("."?  C HHJJJ
r)   Fr   TNormalc                 r    t                               | j        ||j        |||||||	|
||||||||           d S rM   )workerOrderPairr   r   r=   )r%   r   r<   r-   r7   numberOfOrdersr~   
lotSizeBuytickSizeBuyr   r   r   rx   rv   r   	createLogr   r   r   s                      r'   r   zStrategy1.executeOrderPair   sU     	diFIw~
{WhkY<	
 	
 	
 	
 	
r)   )r   NrM   )r[   
FFFr   r   FTr   r   r   )__name__
__module____qualname__r(   r#   r"   rP   propertyr?   rB   rY   r_   rd   rj   rf   rg   rh   r   r   rN   r)   r'   r   r      s3       	# 	# 	# 	#  :        X   X      # # #@& @& @&D
 
 
     J \]-1DE
 
 
 
 
 
r)   r   T)bindc                 	   t          |          }t          j                            |                                          }|sd S t          j        |j        |          }t          |j        |          }|	                    |d           |
                    |          }|t          d           |j                            |                                          }	t          |j        d         j        j                  }
|
                    |j        j        |j        d         j        |d           d|j         }t+          |          }|
                    |          r|                                 |                                }|d k    rE	 t          d| d	|            |                    d
d          dk    r|                                 d S d}d}d}d}|d         dv r|d         dk    rd}n|j                            |d         |d         |                                          }	t6          j                            |j        |d         |d         d                              d                                          }|r|j        }n|	r|	j        }nd}t6          j                            ||d                                                   }|r|j        dv r|
                     |          r|j!        dk    r|	j"        }|	j#        }tI          |d                   }|d         dk    r ||j%        z  }|	xj&        |j%        z  c_&        n!d}||j%        z  }|	xj&        |j%        z  c_&        |                    d          |_        ||_        tO          j(        tS          j*        d                    |_+        |,                                 ||	_-        |	,                                 |d          d|	j.         d|d          d|j%         d | d!
}|r|	r|	j&        |	j/        k    rd}|	j&        |	j0        k    rd}tb          2                    |j        |j        j3        |	j4        j3        |	j.        |	j5        d"|||	j6        |||	j7        |	j8        |	j#        |           n&# tr          $ r}t          |           Y d }~nd }~ww xY w|
                    |          d S d S )#Nr=   Tzerror connection)r,   r   r.   :z
Read data z	 for QID typer[   rr   FrX   )rl   rn   rl   r-   r7   )r-   r7   r,   )r&   r-   r7   rX   rp   r   )r,   r   )rl   
limitPricer   BUYr   -r8   z	 - Qty ( z @ z )   ):intr   r   r   r   r   getStrategyInstancer&   r   Connectrs   rb   r;   r   rC   r5   r@   r    rA   r4   r   r   isMarketOpensetLastAccessbrpopget
clearQueuer   r:   r   initialStockrX   canPlaceOrderr"   ru   rv   r   r   r   r   r   r   r   	updatedOnr]   r{   r-   r   r   r   r   r=   r<   r7   rw   rt   rx   r   )r%   r2   accIdr6   r3   barV   ri   connObjrH   rC   PROCESS_QUEUEqueueordr   r   logTrader   logStockr   currLogr   rv   r~   messagerc   s                             r'   r   r   	  sk   E

I			&	&I	&	6	6	<	<	>	>B t+BGLAAH!"')44M)D)))++I66G !!!O""y"99??AAEM03:CDDF(();)D]EabcEdEmnvwz{{  N  N  G  L  N  NM''E


h
'
' Xkkmm$;;R	<s<<]<<===wwvb!![00  """GHH#O8} 666x=J..#HO**S^SQX\gp*rrxxzzE#+22(-SVW`Saknovkw  CM2  N  N  W  W  Xd  e  e  k  k  m  mH "$.		 " % 2II !I"*11yTWXaTb1cciikkG 3>\11''11 x7HE7Q7Q"]
#/#C$566	z?e++!11I&&'*::&&& '+O!11I&&'*::&& '*ggh&7&7&/!&.l4=3P3P&Q&Q!&/#

 _yyu}yys8}yyW^Wgyyluyyy   )U-???#')U-???"& $))(-9I5<?\a\ikpkvxy$-z%.$+Xu~uGY[`[ln}    	 	 	#JJJJJJJJ	o 

h
'
' X X X X Xs3   AR' !R' :C/R' + R' FR' '
S
1SS
c                      d S rM   rN   rN   r)   r'   thread1TickCallbackr   w  s    Dr)   Fr   c                 V	   t           j                            |                                          }t	          j        ||          }t          ||          }|                    |d           t          |j	        d         j
        j                  }|                    |          dk    rg S |                    |          }g }|dk    r|	}|dk    r|}d}t          j                            ||||                              d          }|                    d	
          }|                    d
          }t!          t#          |                    D ]R}t%          d           |rt'          t)          |          t)          |          t)          |dz             z  z
  d          }t'          t)          |          t)          |	          t)          |dz             z  z   d          } nt'          t)          |          t)          |	          t)          |dz             z  z
  d          }t'          t)          |          t)          |          t)          |dz             z  z   d          } |dk    rt+          |          }!||!k     rB||         }"|                    |"j        |          }#|#d         d         dv r
d}$|"j        }n	d}$d}nd}$d}t%          d           |                    |$|d||dd	dd||ddddd||          }%t3          |%d                   sy|%                    dd          }|                    |||          }&t+          |&          dk    r$|                    |j        j        |||%d           |                    |%           |
dk    rt+          |          }'||'k     rD||         }"|                    ||"j        d          }#|#d         d         dv r
d}$|"j        }n	d}$d}nd}$d}|                    |$|d||dddd| |ddddd||          }%t3          |%d                   sy|%                    dd          }|                    |||          }&t+          |&          dk    r$|                    |j        j        |||%d           |                    |%           Td S )Nr   Tr   Fr[   )r   r,   r7   r   rl   rm   r   )r}   rq   zconsecutive order loopr      rX   )r   UpdateCreatez	buy orderr   LIMITDELIVERYDAYr   r   All)	OrderType)r   r   r   r   r   r   r   r   r   r   rC   r5   r   rs   r   ry   ranger   rb   roundfloatlenreadOrderBookr   submitOrderr	   r   r   r    r=   r>   )(r%   r2   r   targetIdr-   r7   r   r~   r   r   r   r   r   rx   rv   r   r   r   r   r   r&   rV   ri   rC   r   lstOrdr   checkLogbuyLogsellLogibuyPrice	sellPriceiBuyLogr   lstOrderactionOrderlstOrderBookiSellLogs(                                           r'   r   r   z  s    $$&$117799D+D>>H!$11M(D)))M03:CDDFG$$--	 --h77IFq"a  G#**"("*"'$1	 +  
 gzg22  __5_11FooFo33G3~&&'' N% N%&''' 	ZU9--%2E2EaPQc

2RTVWXXHeI..53E3EaPQc

3RTVWXXIIU9--%2D2DuQqSzz2QSUVWWHeI..53F3FqQRs3SUWXYYIu&kkG7{{Qi$223;NNA;x(H44%F!kGG%FGG! + "--fh'SXZ\(-w
HjZ[]bdeghjklsuA AE !y!122 %))Ib11,::8G][[|$$q((++HM,<gxQVag+hhhe$$$ e7||H8||aj(66xZ_6``A;x(H44%F!kGG%FGG! "--fh'SXZ\(.YP[]^`eghjkmnov  yCD DE !y!122 %))Ib11,::8G][[|$$q((++HM,<gxQVag+hhhe$$$]N% N%r)   r   )%trading.modelsr   r   r   r   mainapp.views.socialconnectr   !trading.views.Strategies.strategyr   pandasr   mainapp.views.utilsr	   celeryr
   r   r   	threadingr   %trading.views.Entities.Brokers.brokerr   $trading.views.Entities.brokerAccountr   r   decimalr    trading.views.Redis.messageQueuer   r   mainapp.modelsr   r   jsonr   r   r   r   rN   r)   r'   <module>r     s   U U U U U U U U U U U U 0 0 0 0 0 0 6 6 6 6 6 6     - - - - - - 0 0 0 0 0 0       ( ( ( ( ( (             8 8 8 8 8 8 > > > > > >        9 9 9 9 9 9 @ @ @ @ @ @ % % % % % % ) ) ) ) ) ) q
 q
 q
 q
 q
 q
 q
 q
f $j j jZ	 	 	 $ XY)-@Au% u% u% u% u% u%r)   