U
    ig                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlZd dlZd dl	Z	d dl
Z
d dl	mZ d dlmZ eeZG dd dZG dd dZG d	d
 d
ZG dd dZG dd dZG dd dZdd Zdd Zdd ZG dd deZdS )    N)Enum)sleep)datetimec                   @   sf   e Zd ZU eed< eed< eed< eed< eed< eed< eed< eed< eed	< eed
< dd ZdS )positionprdexchZinstnameZsymnameexdopttstrprcZbuyqtyZsellqtynetqtyc                 C   s   | j S N)__dict__self r   Q/home/worker/MarketYantra/Yantra/yantra/trading/NorenRestApiPy/NorenApiWrapper.pyencode   s    zposition.encodeN)__name__
__module____qualname__str__annotations__intfloatr   r   r   r   r   r      s   
r   c                   @   s   e Zd ZdZdZdZdZdS )ProductTypeCIMN)r   r   r   DeliveryZIntradayNormalCFr   r   r   r   r   !   s   r   c                   @   s   e Zd ZdZdZdS )FeedType      N)r   r   r   	TOUCHLINE	SNAPQUOTEr   r   r   r   r!   (   s   r!   c                   @   s   e Zd ZdZdZdZdZdS )	PriceTypeMKTLMTSL-LMTSL-MKTN)r   r   r   ZMarketZLimitZStopLossLimitZStopLossMarketr   r   r   r   r&   -   s   r&   c                   @   s   e Zd ZdZdZdS )	BuyorSellBSN)r   r   r   ZBuyZSellr   r   r   r   r+   4   s   r+   c                   @   s   e Zd ZdZdZdZdS )	AlertTypeLTP_A_OLTP_B_OZ	LMT_BOS_ON)r   r   r   Z	LTP_ABOVEZ	LTP_BELOWZLTP_OCOr   r   r   r   r.   8   s   r.   c                 C   s   t |  d S r   )loggerdebugmsgr   r   r   	reportmsg=   s    r5   c                 C   s   t |  d S r   )r1   errorr3   r   r   r   reporterrorB   s    r7   c                 C   s   t |  d S r   )r1   infor3   r   r   r   
reportinfoG   s    r9   c                "   @   s  e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZ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/d0 d1d2Zd3d4 Zd5d6 Zd7d8 Zd9d: Zdd<d=Zdd>d?Zdd@dAZddBdCZdDdE ZdFdG ZdHdI ZdJdK ZdLdM Zej fdNdOZ!ej fdPdQZ"dRdS Z#dTdU Z$dVdW Z%dXdY Z&dZd[ Z'dd_d`Z(ddadbZ)dcdd Z*dedf Z+dgdh Z,didj Z-dkdl Z.dmdn Z/dodp Z0ddqdrZ1dsdt Z2dudv Z3ddwdxZ4ddydzZ5dd{d|Z6dd}d~Z7dd Z8e9dddZ:dd Z;dd Z<dd Z=dddZ>dd Z?d;S )NorenApir-   r,   r   r   r   r'   r(   r)   r*   r/   r0   	LTP_BOS_Or"   r#   zhttp://wsapihost/z
/QuickAuthz/Logoutz/ForgotPasswordz
/Changepwdz/MWListz/MarketWatchz/AddMultiScripsToMWz/DeleteMultiMWScripsz/PlaceOrderz/ModifyOrderz/CancelOrderz/ExitSNOOrderz/ProductConversionz
/OrderBookz
/TradeBookz/SingleOrdHistz/SearchScripz	/TPSeriesz/GetOptionChainz	/Holdingsz/Limitsz/PositionBookz/GetSecurityInfoz
/GetQuotesz	/SpanCalcz/GetOptionGreekz/EODChartDataz/PlaceGTTOrderz/GetPendingGTTOrderz/GetEnabledGTTsz/CancelGTTOrderz/PlaceOCOOrder) 	authorizelogoutforgot_passwordZchange_passwordwatchlist_names	watchlistwatchlist_addwatchlist_delete
placeordermodifyordercancelorder	exitorderproduct_conversion	orderbook	tradebooksingleorderhistorysearchscripTPSeriesoptionchainholdingslimits	positions	scripinfo	getquotesspan_calculatoroption_greekget_daily_price_seriesplacegttgtt
enabledgtt	cancelgttZocogttzwss://wsendpoint/)hostrouteswebsocket_endpointc                 C   s^   || j d< || j d< d | _d| _t | _d | _d | _d | _d | _	d | _
i | _g | _g | _d S )NrZ   r\   F)_NorenApi__service_config_NorenApi__websocket_NorenApi__websocket_connected	threadingLock_NorenApi__ws_mutex_NorenApi__on_error_NorenApi__on_disconnect_NorenApi__on_open_NorenApi__subscribe_callback _NorenApi__order_update_callbackZ_NorenApi__subscribersZ!_NorenApi__market_status_messagesZ_NorenApi__exchange_messages)r   rZ   	websocketr   r   r   __init__   s    


zNorenApi.__init__c              
   C   sd   | j  dkr`z| jjddd W n2 tk
rT } ztd|  W 5 d }~X Y nX td q d S )NF   z	{"t":"h"})Zping_intervalZping_payloadz*websocket run forever ended in exception, g?)_NorenApi__stop_eventis_setr^   run_forever	Exceptionr1   warningr   )r   er   r   r   Z__ws_run_forever   s     
zNorenApi.__ws_run_foreverc              	   O   s8   | j dkrtd q | j | jj||}W 5 Q R X |S )NFg?)r_   r   rb   r^   send)r   argskwargsretr   r   r   Z	__ws_send   s
    

zNorenApi.__ws_sendc                 C   s(   t | t | d| _| jr$|   d S NF)r5   r_   rd   )r   ZwsappZclose_status_codeZ	close_msgr   r   r   Z__on_close_callback   s
    zNorenApi.__on_close_callbackNc                 C   sT   d| _ ddi}| j|d< | j|d< | j|d< d|d< t|}t| | | d S )	NTtcuidactid
susertokenAPIsource)r_   _NorenApi__username_NorenApi__susertokenjsondumpsr5   _NorenApi__ws_send)r   wsvaluespayloadr   r   r   Z__on_open_callback   s    



zNorenApi.__on_open_callbackc                 C   s&   t |tjk	r|}| jr"| | d S r   )typerh   WebSocketApprc   )r   r   r6   r   r   r   Z__on_error_callback   s    zNorenApi.__on_error_callbackc                 C   s   t |}| jd k	r`|d dks,|d dkr:| | d S |d dksR|d dkr`| | d S | jd k	r|d dkr|d dkr| | d S | jd k	r|d d	kr| | d S | jr|d dkr|d dkr|   d S d S )
Nrv   tktfZdkdfcksOKom)r   loadsrf   rc   rg   re   )r   r   message	data_typeZcontinue_flagresr   r   r   Z__on_data_callback   s(    







zNorenApi.__on_data_callbackc                 C   s   || _ || _|| _|| _|| _t | _| jd j	| j
d}td	| tj|| j| j| j| jd| _tj| jd| _d| j_| j  dS )z4 Start a websocket connection for getting live data r\   )Zaccess_tokenzconnecting to {})Zon_dataon_erroron_closeon_open)targetTN)re   rd   rc   rf   rg   r`   Eventrk   r]   formatr~   r5   rh   r   _NorenApi__on_data_callback_NorenApi__on_error_callback_NorenApi__on_close_callback_NorenApi__on_open_callbackr^   Thread_NorenApi__ws_run_forever_NorenApi__ws_threaddaemonstart)r   subscribe_callbackorder_update_callbacksocket_open_callbackZsocket_close_callbackZsocket_error_callbackurlr   r   r   start_websocket   s&    

	zNorenApi.start_websocketc                 C   s6   | j dkrd S | j  d| _ | j  | j  d S ru   )r_   rk   setr^   closer   joinr   r   r   r   close_websocket	  s    


zNorenApi.close_websocketc                 C   s  t j}|d  |d d  }t| t|d }	d||}
t|
d }ddd}||d	< |	|d
< ||d< ||d< ||d< ||d< dt	| }td|  t
j||d}td|j  t|j}|d dkrd S || _|| _|| _|d | _|S )NrZ   r[   r<   zutf-8z{0}|{1}r{   z1.0.0)r|   Z
apkversionrx   pwdfactor2vcZappkeyimeijData=Req:dataReply:statOkrz   )r:   r]   r5   hashlibsha256r   	hexdigestr   r   r   requestsposttextr   r}   _NorenApi__accountid_NorenApi__passwordr~   )r   useridpasswordtwoFAvendor_code
api_secretr   configr   r   Z	u_app_keyZapp_keyr   r   r   resDictr   r   r   login  s2    

zNorenApi.loginc                 C   s0   || _ || _|| _|| _t| d| j  dS )Nz session set to : T)r}   r   r   r~   r5   )r   r   r   	usertokenr   r   r   set_session7  s    zNorenApi.set_sessionc           
      C   s   t j}|d  |d d  }t| ddi}||d< ||d< ||d< d	t| }td
|  tj||d}td|j  t|j}	|	d dkrd S |	S )NrZ   r[   r>   r|   r{   rx   pandobr   r   r   r   r   r   )	r:   r]   r5   r   r   r   r   r   r   )
r   r   r   r   r   r   r   r   r   r   r   r   r   r>   B  s    zNorenApi.forgot_passwordc                 C   s   t j}|d  |d d  }t| ddi}| j|d< dt| d| j  }t| tj||d	}t|j	 t
|j	}|d
 dkrd S d | _d | _d | _d | _|S )NrZ   r[   r=   ordersourcer{   rx   r   &jKey=r   r   r   )r:   r]   r5   r}   r   r   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r=   \  s"    

zNorenApi.logoutc                 C   st   i }|t jkrd|d< n |t jkr,d|d< nt||d< t|tkrTd||d< n||d< t|}| 	| d S )Nrv   d#k)
r!   r$   r%   r   r   listr   r   r   r   r   
instrumentZ	feed_typer   r   r   r   r   	subscribex  s    




zNorenApi.subscribec                 C   sf   i }|t jkrd|d< n|t jkr*d|d< t|tkrFd||d< n||d< t|}| | d S )Nurv   udr   r   )	r!   r$   r%   r   r   r   r   r   r   r   r   r   r   unsubscribe  s    



zNorenApi.unsubscribec                 C   s2   ddi}| j |d< t|}t| | | d S )Nrv   ory   )r   r   r   r5   r   )r   r   r   r   r   r   subscribe_orders  s
    

zNorenApi.subscribe_ordersc                 C   s   t j}|d  |d d  }t| ddi}| j|d< dt| d| j  }t| tj||d	}t|j	 t
|j	}|d
 dkrd S |S )NrZ   r[   r?   r   r{   rx   r   r   r   r   r   r:   r]   r5   r}   r   r   r~   r   r   r   r   r   r   r   r   get_watch_list_names  s    

zNorenApi.get_watch_list_namesc                 C   s   t j}|d  |d d  }t| ddi}| j|d< ||d< dt| d	| j  }t| tj||d
}t|j	 t
|j	}|d dkrd S |S )NrZ   r[   r@   r   r{   rx   wlnamer   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   get_watch_list  s    

zNorenApi.get_watch_listc           	      C   s   t j}|d  |d d  }t| ddi}| j|d< ||d< t|tkr\d||d	< n||d	< d
t| d| j	  }t| t
j||d}t|j t|j}|d dkrd S |S )NrZ   r[   rA   r   r{   rx   r   r   scripsr   r   r   r   r   r:   r]   r5   r}   r   r   r   r   r   r~   r   r   r   r   	r   r   r   r   r   r   r   r   r   r   r   r   add_watch_list_scrip  s"    

zNorenApi.add_watch_list_scripc           	      C   s   t j}|d  |d d  }t| ddi}| j|d< ||d< t|tkr\d||d	< n||d	< d
t| d| j	  }t| t
j||d}t|j t|j}|d dkrd S |S )NrZ   r[   rB   r   r{   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   delete_watch_list_scrip  s"    

z NorenApi.delete_watch_list_scrip        DAYNOc                 C   sv  t j}|d  |d d  }t| ddi}| j|d< | j|d< ||d< ||d	< ||d
< tj||d< t||d< t||d< ||d< t||d< t|	|d< |
|d< ||d< ||d< |dkrt||d< |dkrt||d< |dkrt||d< t||d< |dkrt||d< dt	
| d| j  }t| tj||d}t|j t	|j}|d dkrrd S |S )NrZ   r[   rC   r   r{   rx   ry   trantyper   r   tsymqtydscqtyprctypprctrgprcrt   remarksamoHblprcr   trailprcr,   bpprcr   r   r   r   r   r:   r]   r5   r}   r   urllibparse
quote_plusr   r   r   r~   r   r   r   r   )r   buy_or_sellproduct_typeexchangetradingsymbolquantitydiscloseqty
price_typepricetrigger_price	retentionr   r   bookloss_pricebookprofit_pricetrail_pricer   r   r   r   r   r   r   r   r   place_order  sF    




zNorenApi.place_orderc                 C   sP  t j}|d  |d d  }t| ddi}| j|d< | j|d< t||d< ||d	< tj||d
< t||d< ||d< t||d< |dks|dkr|d krt||d< nt	d d S |dkrt||d< |
dkrt|
|d< |	dkrt|	|d< dt
| d| j  }t| tj||d}t|j t
|j}|d dkrLd S |S )NrZ   r[   rD   r   r{   rx   ry   
norenordnor   r   r   r   r   r)   r*   r   ztrigger price is missingr   r   r   r   r   r   r   r   r   )r:   r]   printr}   r   r   r   r   r   r7   r   r   r~   r5   r   r   r   r   )r   ordernor   r   newquantitynewprice_typenewpriceZnewtrigger_pricer   r   r  r   r   r   r   r   r   r   r   r   modify_orderD  s>    


zNorenApi.modify_orderc                 C   s   t j}|d  |d d  }t| ddi}| j|d< t||d< dt| d	| j  }t| t	j
||d
}t|j t|j}|d dkrd S |S )NrZ   r[   rE   r   r{   rx   r  r   r   r   r   r   r:   r]   r  r}   r   r   r   r~   r5   r   r   r   r   r   r  r   r   r   r   r   r   r   r   r   cancel_orderu  s    

zNorenApi.cancel_orderc           	      C   s   t j}|d  |d d  }t| ddi}| j|d< ||d< ||d< d	t| d
| j  }t| tj	||d}t|j
 t|j
}|d dkrd S |S )NrZ   r[   rF   r   r{   rx   r  r   r   r   r   r   r   )r:   r]   r  r}   r   r   r~   r5   r   r   r   r   )	r   r  r   r   r   r   r   r   r   r   r   r   
exit_order  s    

zNorenApi.exit_orderc                 C   s   t j}|d  |d d  }	t|	 ddi}
| j|
d< | j|
d< ||
d< tj||
d	< t||
d
< ||
d< ||
d< ||
d< ||
d< dt	
|
 d| j  }t| tj|	|d}t|j t	|j}|d dkrdS |S )zV
        Coverts a day or carryforward position from one product to another. 
        rZ   r[   rG   r   r{   rx   ry   r   r   r   r   Zprevprdr   Zpostyper   r   r   r   r   N)r:   r]   r  r}   r   r   r   r   r   r   r   r~   r5   r   r   r   r   )r   r   r   r   Znew_product_typeZprevious_product_typer   Z	day_or_cfr   r   r   r   r   r   r   r   r   position_product_conversion  s*    


z$NorenApi.position_product_conversionc                 C   s   t j}|d  |d d  }t| ddi}| j|d< ||d< dt| d	| j  }t| tj	||d
}t|j
 t|j
}t|tkrd S |S )NrZ   r[   rJ   r   r{   rx   r  r   r   r   )r:   r]   r  r}   r   r   r~   r5   r   r   r   r   r   r   r  r   r   r   single_order_history  s    

zNorenApi.single_order_historyc                 C   s   t j}|d  |d d  }t| ddi}| j|d< dt| d| j  }t| tj||d	}t	|j
}t|tkrd S |S )
NrZ   r[   rH   r   r{   rx   r   r   r   )r:   r]   r5   r}   r   r   r~   r   r   r   r   r   r   r   r   r   r   get_order_book  s    
zNorenApi.get_order_bookc                 C   s   t j}|d  |d d  }ddi}| j|d< | j|d< dt| d	| j  }t| tj	||d
}t|j
 t|j
}t|tkrd S |S )NrZ   r[   rI   r   r{   rx   ry   r   r   r   )r:   r]   r}   r   r   r   r~   r5   r   r   r   r   r   r   r   r   r   r   get_trade_book   s    


zNorenApi.get_trade_bookc           	      C   s   t j}|d  |d d  }t| |d kr:td d S i }| j|d< ||d< tj||d< dt	| d	| j
  }t| tj||d
}t|j t|j}|d dkrd S |S )NrZ   r[   rK   zsearch text cannot be nullrx   r   Zstextr   r   r   r   r   )r:   r]   r5   r7   r}   r   r   r   r   r   r~   r   r   r   r   )	r   r   Z
searchtextr   r   r   r   r   r   r   r   r   rK     s$    

zNorenApi.searchscripc                 C   s   t j}|d  |d d  }t| i }| j|d< ||d< tj||d< t||d< t||d< d	t	| d
| j
  }t| tj||d}	t|	j t|	j}
|
d dkrd S |
S )NrZ   r[   rM   rx   r   r   r
   cntr   r   r   r   r   )r:   r]   r5   r}   r   r   r   r   r   r   r~   r   r   r   r   )r   r   r   strikepricecountr   r   r   r   r   r   r   r   r   get_option_chain9  s"    

zNorenApi.get_option_chainc           	      C   s   t j}|d  |d d  }t| i }| j|d< ||d< ||d< dt| d| j  }t| tj||d	}t|j	 t
|j	}|d
 dkrd S |S )NrZ   r[   rQ   rx   r   tokenr   r   r   r   r   r   	r   r   r  r   r   r   r   r   r   r   r   r   get_security_infoU  s    

zNorenApi.get_security_infoc           	      C   s   t j}|d  |d d  }t| i }| j|d< ||d< ||d< dt| d| j  }t| tj||d	}t|j	 t
|j	}|d
 dkrd S |S )NrZ   r[   rR   rx   r   r  r   r   r   r   r   r   r  r   r   r   
get_quoteso  s    

zNorenApi.get_quotesc                 C   s  t j}|d  |d d  }t| |dkrRtdd }t|d}	t|	}dd	i}
| j|
d
< ||
d< ||
d< t||
d< |dkrt||
d< |dkrt||
d< dt	
|
 d| j  }t| tj||d}t|j t	|j}t|tkrdS |S )zj
        gets the chart data 
        interval possible values 1, 3, 5 , 10, 15, 30, 60, 120, 240
        rZ   r[   rL   Nz%d-%m-%Yz	 00:00:00z%d-%m-%Y %H:%M:%Sr   r{   rx   r   r  stetZintrvr   r   r   )r:   r]   r5   timestrftimestrptimemktimer}   r   r   r   r~   r   r   r   r   r   r   )r   r   r  Z	starttimeendtimeintervalr   r   Z
timestringZtimeobjr   r   r   r   r   r   r   get_time_price_series  s0    


zNorenApi.get_time_price_seriesc                 C   s*  t j}|d  |d d  }t| |d krZtj tjdd }t|tj	
  }|d krnt  }i }| j|d< d|||d< t||d	< t||d
< dt| d| j  }	t|	 ddi}
tj||	|
d}t| |jdkrd S t|jdkrd S t|j}t|tkr&d S |S )NrZ   r[   rU      )daysrx   z{0}:{1}symfromtor   r   zContent-Typezapplication/json; charset=utf-8)r   headers   r   )r:   r]   r5   r   datetoday	timedeltadtcombineminr  	timestampnowr}   r   r   r   r   r~   r   r   status_codelenr   r   r   r   )r   r   r   Z	startdateZenddater   r   Zweek_agor   r   r(  r   r   r   r   r   rU     s4    

zNorenApi.get_daily_price_seriesc                 C   s   t j}|d  |d d  }t| |d kr4tj}i }| j|d< | j|d< ||d< dt| d| j	  }t| t
j||d	}t|j t|j}t|tkrd S |S )
NrZ   r[   rN   rx   ry   r   r   r   r   )r:   r]   r5   r   r   r}   r   r   r   r~   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   get_holdings  s"    


zNorenApi.get_holdingsc           
      C   s   t j}|d  |d d  }t| i }| j|d< | j|d< |d krN||d< |d kr^||d< |d krn||d< d	t| d
| j  }t| tj	||d}t|j
 t|j
}	|	S )NrZ   r[   rO   rx   ry   r   segr   r   r   r   )r:   r]   r5   r}   r   r   r   r~   r   r   r   r   )
r   r   segmentr   r   r   r   r   r   r   r   r   r   
get_limits  s$    


zNorenApi.get_limitsc                 C   s   t j}|d  |d d  }t| i }| j|d< | j|d< dt| d| j  }t| tj	||d}t|j
 t|j
}t|tkrd S |S )	NrZ   r[   rP   rx   ry   r   r   r   )r:   r]   r5   r}   r   r   r   r~   r   r   r   r   r   r   r   r   r   r   get_positions  s    


zNorenApi.get_positions)rP   c                 C   s   t j}|d  |d d  }t| i }| j|d< ||d< dtj|dd d	 d
| j  }t| tj||d}t|j	 t
|j	}|S )NrZ   r[   rS   ry   posr   c                 S   s   |   S r   )r   )r   r   r   r   <lambda>@      z*NorenApi.span_calculator.<locals>.<lambda>)defaultr   r   r:   r]   r5   r   r   r   r~   r   r   r   r   )r   rP   r   r   Zsenddatar   r   r   r   r   r   rS   6  s     


zNorenApi.span_calculatorc                 C   s   t j}|d  |d d  }t| ddi}	| j|	d< ||	d< ||	d< ||	d	< ||	d
< ||	d< ||	d< dt|	 d| j  }
t|
 tj||
d}t|j	 t
|j	}|S )NrZ   r[   rT   r|   r{   ry   r   r
   ZsptprcZint_rateZ
volatilityr	   r   r   r   r=  )r   Z
expiredateZStrikePriceZ	SpotPriceZInterestRateZ
VolatilityZ
OptionTyper   r   r   r   r   r   r   r   r   rT   K  s"    

zNorenApi.option_greekc                 C   s   t j}|d  |d d  }t| ddi}| j|d< dt| d| j  }t| tj||d	}t|j	 t
|j	}t|tkrd S |S )
NrZ   r[   rW   r   r{   rx   r   r   r   r:   r]   r5   r}   r   r   r~   r   r   r   r   r   r   r   r   r   r   get_pending_gtt_ordersg  s    

zNorenApi.get_pending_gtt_ordersc                 C   s   t j}|d  |d d  }t| ddi}| j|d< dt| d| j  }t| tj||d	}t|j	 t
|j	}t|tkrd S |S )
NrZ   r[   rX   r   r{   rx   r   r   r   r>  r   r   r   r   get_enabled_gtt_orders  s    

zNorenApi.get_enabled_gtt_ordersGTTr   c                 C   s"  t j}|d  |d d  }t| ddi}| j|d< | j|d< tj||d< ||d	< ||d
< ||d< t||d< |
|d< ||d< ||d< ||d< ||d< t||d< t|	|d< t||d< dt	
| d| j  }t| tj||d}t|j t	|j}|d dkrd S |d S )NrZ   r[   rV   r   r{   rx   ry   r   r   Zai_tvalidityr   r   r   r   r   rt   r   r   r   r   r   r   r   z
OI createdal_idr   )r   r   r   
alert_typealert_pricer   r   r   r   r   r   r   rB  r   r   r   r   r   r   r   r   r   r   place_gtt_order  s6    


zNorenApi.place_gtt_orderc                 C   s   t j}|d  |d d  }t| ddi}| j|d< t||d< dt| d	| j  }t| t	j
||d
}t|j t|j}|d dkrd S |S )NrZ   r[   rY   r   r{   rx   r  r   r   r   r   r   r
  r  r   r   r   cancel_gtt_order  s    

zNorenApi.cancel_gtt_order)N)NN)NNNN)NNNNN)r   Nr   r   Nr   r   r   )r   Nr   r   r   )r#   )NNN)NN)N)NNN)r'   r   Nr   rA  r   )@r   r   r   ZTRANSACTION_TYPE_SELLZTRANSACTION_TYPE_BUYZPRODUCT_TYPE_INTRADAYZPRODUCT_TYPE_DELIVERYZPRODUCT_TYPE_NORMALZPRICE_TYPE_MARKETZPRICE_TYPE_LIMITZPRICE_TYPE_STOPLOSS_LIMITZPRICE_TYPE_STOPLOSS_MARKETALERT_TYPE_ABOVEALERT_TYPE_BELOWALERT_TYPE_OCOZFEED_TYPE_TOUCHLINEZFEED_TYPE_SNAPSHOTr]   ri   r   r   r   r   r   r   r   r   r   r   r>   r=   r!   r$   r   r   r   r   r   r   r   r  r	  r  r  r  r  r  r  rK   r  r  r  r"  rU   r4  r7  r8  r   rS   rT   r?  r@  rF  rG  r   r   r   r   r:   L   s   "(


     
&	              
7         
1$

+
-

#      
3r:   )r   r   r`   rh   loggingenumr   r   r   r  r   r   r-  	getLoggerr   r1   r   r   r!   r&   r+   r.   r5   r7   r9   objectr:   r   r   r   r   <module>   s,   
