
    d                     \   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j        e          Z G d d          Z G d d          Z G d	 d
          Z G d d          Z G d d          Z G d d          Zd Zd Zd Z G d de          ZdS )    N)Enum)sleep)datetimec                   z    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 ZdS )positionprdexchinstnamesymnameexdopttstrprcbuyqtysellqtynetqtyc                     | j         S N)__dict__selfs    XC:\Janisar\Development\Python\Genie\StockGenie\trading\NorenRestApiPy\NorenApiWrapper.pyencodezposition.encode   s
    }    N)__name__
__module____qualname__str__annotations__intfloatr    r   r   r   r      s         	HHH
IIIMMMLLL	HHH
IIIMMMKKKLLLKKK    r   r   c                       e Zd ZdZdZdZdZdS )ProductTypeCIMN)r   r   r   DeliveryIntradayNormalCFr!   r   r   r#   r#   !   s"        HHF	BBBr   r#   c                       e Zd ZdZdZdS )FeedType      N)r   r   r   	TOUCHLINE	SNAPQUOTEr!   r   r   r,   r,   (   s        IIIIr   r,   c                       e Zd ZdZdZdZdZdS )	PriceTypeMKTLMTSL-LMTSL-MKTN)r   r   r   MarketLimitStopLossLimitStopLossMarketr!   r   r   r2   r2   -   s"        FEMNNNr   r2   c                       e Zd ZdZdZdS )	BuyorSellBSN)r   r   r   BuySellr!   r   r   r<   r<   4   s        
CDDDr   r<   c                       e Zd ZdZdZdZdS )	AlertTypeLTP_A_OLTP_B_O	LMT_BOS_ON)r   r   r   	LTP_ABOVE	LTP_BELOWLTP_OCOr!   r   r   rB   rB   8   s        IIGGGr   rB   c                 :    t                               |            d S r   )loggerdebugmsgs    r   	reportmsgrN   =       
LLr   c                 :    t                               |            d S r   )rJ   errorrL   s    r   reporterrorrR   B   rO   r   c                 :    t                               |            d S r   )rJ   inforL   s    r   
reportinforU   G   s    
KKr   c                   4   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i 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/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCZdD ZdE ZdF ZdG ZdvdIZdwdJZdxdKZ	 	 	 	 	 dydLZdM ZdN ZdO ZdP ZdQ Zej         fdRZ!ej         fdSZ"dT Z#dU Z$dV Z%dW Z&dX Z'	 	 dzd\Z(	 d{d]Z)d^ Z*d_ Z+d` Z,da Z-db Z.dc Z/dd Z0d|deZ1df Z2dg Z3d}dhZ4dwdiZ5dvdjZ6d}dkZ7dl Z8dme9fdnZ:do Z;dp Z<dq Z=	 	 	 	 	 	 d~dtZ>du Z?dHS )NorenApir>   r=   r%   r$   r&   r3   r4   r5   r6   rC   rD   	LTP_BOS_Or-   r.   zhttp://wsapihost/	authorizez
/QuickAuthlogoutz/Logoutforgot_passwordz/ForgotPasswordchange_passwordz
/Changepwdwatchlist_namesz/MWList	watchlistz/MarketWatchwatchlist_addz/AddMultiScripsToMWwatchlist_deletez/DeleteMultiMWScrips
placeorderz/PlaceOrdermodifyorderz/ModifyOrdercancelorderz/CancelOrder	exitorderz/ExitSNOOrderproduct_conversionz/ProductConversion	orderbookz
/OrderBook	tradebookz
/TradeBooksingleorderhistoryz/SingleOrdHistsearchscripz/SearchScripz	/TPSeriesz/GetOptionChainz	/Holdingsz/Limitsz/PositionBookz/GetSecurityInfoz
/GetQuotesz	/SpanCalcz/GetOptionGreekz/EODChartDataz/PlaceGTTOrderz/GetPendingGTTOrderz/GetEnabledGTTsz/CancelGTTOrderz/PlaceOCOOrder)TPSeriesoptionchainholdingslimits	positions	scripinfo	getquotesspan_calculatoroption_greekget_daily_price_seriesplacegttgtt
enabledgtt	cancelgttocogttzwss://wsendpoint/)hostrouteswebsocket_endpointc                     || j         d<   || j         d<   d | _        d| _        t          j                    | _        d | _        d | _        d | _        d | _	        d | _
        i | _        g | _        g | _        d S )Nry   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_callback_NorenApi__subscribers!_NorenApi__market_status_messages_NorenApi__exchange_messages)r   ry   	websockets      r   __init__zNorenApi.__init__   s    (,f%6?23  %*"#.**#$(!'+$(*%#%   r   c                 @   | j                                         dk    r	 | j                            dd           n4# t          $ r'}t
                              d|            Y d }~nd }~ww xY wt          d           | j                                         dk    ~d S d S )NF   z	{"t":"h"})ping_intervalping_payloadz*websocket run forever ended in exception, g?)_NorenApi__stop_eventis_setr~   run_forever	ExceptionrJ   warningr   )r   es     r   __ws_run_foreverzNorenApi.__ws_run_forever   s    &&((E11F ,,"#; - @ @ @ @ F F FDDDF F F F F F F FF #JJJ &&((E111111s   < 
A-A((A-c                     | j         dk    rt          d           | j         dk    | j        5   | j        j        |i |}d d d            n# 1 swxY w Y   |S )NFg?)r   r   r   r~   send)r   argskwargsrets       r   	__ws_sendzNorenApi.__ws_send   s    (E11$KKK (E11 _ 	9 	9'$"'888C	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9
s   AAAc                     t          |           t          |           d| _        | j        r|                                  d S d S NF)rN   r   r   )r   wsappclose_status_code	close_msgs       r   __on_close_callbackzNorenApi.__on_close_callback   sT    #$$$%%*" 	#  """""	# 	#r   Nc                     d| _         ddi}| j        |d<   | j        |d<   | j        |d<   d|d<   t          j        |          }t          |           |                     |           d S )	NTtcuidactid
susertokenAPIsource)r   _NorenApi__username_NorenApi__susertokenjsondumpsrN   _NorenApi__ws_send)r   wsvaluespayloads       r   __on_open_callbackzNorenApi.__on_open_callback   sw    %)" su/w#0| x*V$$'wr   c                 |    t          |          t          j        ur|}| j        r|                     |           d S d S r   )typer   WebSocketAppr   )r   r   rQ   s      r   __on_error_callbackzNorenApi.__on_error_callback   sG    HHI222E? 	#OOE"""""	# 	#r   c                 *   t          j        |          }| j        ^|d         dk    s|d         dk    r|                     |           d S |d         dk    s|d         dk    r|                     |           d S | j        /|d         dk    r#|d         dk    r|                     |           d S | j        #|d         d	k    r|                     |           d S | j        r.|d         dk    r$|d         dk    r|                                  d S d S d S d S )
Nr   tktfdkdfcksOKom)r   loadsr   r   r   r   )r   r   message	data_typecontinue_flagress         r   __on_data_callbackzNorenApi.__on_data_callback   sG    j!!%13x43s8t#3#3))#...3x43s8t#3#3))#...O'3x4CH$4$4$$$(43x4,,S111> 	3x4CH$4$4   	 	$4$4r   c                    || _         || _        || _        || _        || _        t          j                    | _        | j        d         	                    | j
                  }t          d	                    |                     t          j        || j        | j        | j        | j                  | _        t          j        | j                  | _        d| j        _        | j                                         dS )z4 Start a websocket connection for getting live data r{   )access_tokenzconnecting to {})on_dataon_erroron_closeon_open)targetTN)r   r   r   r   r   r   Eventr   r}   formatr   rN   r   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_callbacksocket_close_callbacksocket_error_callbackurls          r   start_websocketzNorenApi.start_websocket   s     .4/$6!'<$%O--#$89@@* A , ,$++C00111$1#:>:Q;?;S;?;S:>:Q	S S S %+43HIII"&     r   c                     | j         dk    rd S | j                                         d| _         | j                                         | j                                         d S r   )r   r   setr~   closer   joinr   s    r   close_websocketzNorenApi.close_websocket	  sb    %..F%*"   r   c                     t           j        }|d          |d         d          }t          |           t          j        |                    d                                                    }	d                    ||          }
t          j        |
                    d                                                    }ddd}||d	<   |	|d
<   ||d<   ||d<   ||d<   ||d<   dt          j	        |          z   }t          d|z              t          j        ||          }t          d|j        z              t          j        |j                  }|d         dk    rd S || _        || _        || _        |d         | _        |S )Nry   rz   rY   zutf-8z{0}|{1}r   z1.0.0)r   
apkversionr   pwdfactor2vcappkeyimeijData=Req:dataReply:statOkr   )rW   r}   rN   hashlibsha256r   	hexdigestr   r   r   requestsposttextr   r   _NorenApi__accountid_NorenApi__passwordr   )r   useridpasswordtwoFAvendor_code
api_secretr   configr   r   	u_app_keyapp_keyr   r   r   resDicts                   r   loginzNorenApi.login  s   * @!1+!>@@# nX__W5566@@BB$$VZ88	.!1!1'!:!:;;EEGG!99uu!y"t"xvTZ///&7"###mCg...(SX%&&&*SX&&6?d""4 !"#L1 r   c                 p    || _         || _        || _        || _        t	          | d| j                    dS )Nz session set to : T)r   r   r   r   rN   )r   r   r   	usertokens       r   set_sessionzNorenApi.set_session7  sD     !"%VBBt/@BBCCCtr   c                    t           j        }|d          |d         d          }t          |           ddi}||d<   ||d<   ||d<   d	t          j        |          z   }t          d
|z              t          j        ||          }t          d|j        z              t          j        |j                  }	|	d         dk    rd S |	S )Nry   rz   r[   r   r   r   pandobr   r   r   r   r   r   )	rW   r}   rN   r   r   r   r   r   r   )
r   r   r
  r  r  r   r   r   r   r  s
             r   r[   zNorenApi.forgot_passwordB  s    * F!12C!DFF# E"uuuTZ///&7"###mCg...(SX%&&&*SX&&6?d""4r   c                    t           j        }|d          |d         d          }t          |           ddi}| j        |d<   dt	          j        |          z   d| j         z   }t          |           t          j        ||	          }t          |j	                   t	          j
        |j	                  }|d
         dk    rd S d | _        d | _        d | _        d | _        |S )Nry   rz   rZ   ordersourcer   r   r   &jKey=r   r   r   )rW   r}   rN   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r  s          r   rZ   zNorenApi.logout\  s    * =!1(!;==#'uTZ///2N4;L2N2NN'mCg...#(*SX&&6?d""4 r   c                 D   i }|t           j        k    rd|d<   n(|t           j        k    rd|d<   nt          |          |d<   t	          |          t
          k    rd                    |          |d<   n||d<   t          j        |          }| 	                    |           d S )Nr   d#k)
r,   r/   r0   r   r   listr   r   r   r   r   
instrument	feed_typer   r   s        r   	subscribezNorenApi.subscribex  s    +++F3KK8---F3KKi..F3K
t##((:..F3KK$F3Kz&!! 	tr   c                    i }|t           j        k    rd|d<   n|t           j        k    rd|d<   t          |          t          k    rd                    |          |d<   n||d<   t          j        |          }|                     |           d S )Nur   udr  r  )	r,   r/   r0   r   r  r   r   r   r   r  s        r   unsubscribezNorenApi.unsubscribe  s    +++F3KK8---F3K
t##((:..F3KK$F3Kz&!! 	tr   c                     ddi}| j         |d<   t          j        |          }t          |           |                     |           d S )Nr   or   )r   r   r   rN   r   )r   r   r   s      r   subscribe_orderszNorenApi.subscribe_orders  sI    s*wz&!!$tr   c                    t           j        }|d          |d         d          }t          |           ddi}| j        |d<   dt	          j        |          z   d| j         z   }t          |           t          j        ||	          }t          |j	                   t	          j
        |j	                  }|d
         dk    rd S |S )Nry   rz   r]   r  r   r   r   r  r   r   r   rW   r}   rN   r   r   r   r   r   r   r   r   r  s          r   get_watch_list_nameszNorenApi.get_watch_list_names  s    * F!12C!DFF#'uTZ///2N4;L2N2NN'mCg...#(*SX&&6?d""4r   c                    t           j        }|d          |d         d          }t          |           ddi}| j        |d<   ||d<   dt	          j        |          z   d	| j         z   }t          |           t          j        ||
          }t          |j	                   t	          j
        |j	                  }|d         dk    rd S |S )Nry   rz   r^   r  r   r   wlnamer   r  r   r   r   r!  )r   r$  r  r   r   r   r   r  s           r   get_watch_listzNorenApi.get_watch_list  s    * @!1+!>@@#'u!xTZ///2N4;L2N2NN'mCg...#(*SX&&6?d""4r   c                    t           j        }|d          |d         d          }t          |           ddi}| j        |d<   ||d<   t	          |          t
          k    rd                    |          |d	<   n||d	<   d
t          j        |          z   d| j	         z   }t          |           t          j        ||          }t          |j                   t          j        |j                  }|d         dk    rd S |S )Nry   rz   r_   r  r   r   r$  r  scripsr   r  r   r   r   rW   r}   rN   r   r   r  r   r   r   r   r   r   r   r   	r   r$  r  r  r   r   r   r   r  s	            r   add_watch_list_scripzNorenApi.add_watch_list_scrip  s   * D!1/!BDD#'u!x
t##"xx
33F8)F8TZ///2N4;L2N2NN'mCg...#(*SX&&6?d""4r   c                    t           j        }|d          |d         d          }t          |           ddi}| j        |d<   ||d<   t	          |          t
          k    rd                    |          |d	<   n||d	<   d
t          j        |          z   d| j	         z   }t          |           t          j        ||          }t          |j                   t          j        |j                  }|d         dk    rd S |S )Nry   rz   r`   r  r   r   r$  r  r'  r   r  r   r   r   r(  r)  s	            r   delete_watch_list_scripz NorenApi.delete_watch_list_scrip  s   * G!12D!EGG#'u!x
t##"xx
33F8)F8TZ///2N4;L2N2NN'mCg...#(*SX&&6?d""4r           DAYNOc                    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    r*t          |          |d<   |dk    rt          |          |d<   |dk    r<t          |          |d<   t          |          |d<   |dk    rt          |          |d<   dt          j
        |          z   d| j         z   }t          |           t          j        ||          }t          |j                   t          j        |j                  }|d         dk    rd S |S )Nry   rz   ra   r  r   r   r   trantyper   r	   tsymqtydscqtyprctypprctrgprcr   remarksamoHblprcr-  trailprcr=   bpprcr   r  r   r   r   rW   r}   rN   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	retentionr9  r8  bookloss_pricebookprofit_pricetrail_pricer  r   r   r   r   r  s                         r   place_orderzNorenApi.place_order  s    * A!1,!?AA#'u*w(z$u!v00??vHu{++x%xE

u}--x!u#yu 3!.11F7Oc!!%(%5%5z" 3!.11F7O!"233F7Oc!!%(%5%5z"TZ///2N4;L2N2NN'mCg...#(*SX&&6?d""4r   c                 `   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    rt          |          |d<   nt          d           d S |dk    rt          |          |d<   |
dk    rt          |
          |d<   |	dk    rt          |	          |d<   dt          j        |          z   d| j         z   }t          |           t          j        ||          }t          |j                   t          j        |j                  }|d         dk    rd S |S )Nry   rz   rb   r  r   r   r   
norenordnor	   r2  r3  r5  r6  r5   r6   r7  ztrigger price is missingr-  r;  r<  r=  r   r  r   r   r   )rW   r}   printr   r   r   r?  r@  rA  rR   r   r   r   rN   r   r   r   r   )r   ordernorD  rE  newquantitynewprice_typenewpricenewtrigger_pricerL  rM  rN  r  r   r   r   r   r  s                    r   modify_orderzNorenApi.modify_orderD  s   * B!1-!@BBc


  'u*w"7|||!v00??vK((u(xHuX%%=H+D+D D((#&'7#8#8x  6777t S  !.11F7O#!$[!1!1F:s""!"233F7OTZ///2N4;L2N2NN'mCg...#(*SX&&6?d""4r   c                    t           j        }|d          |d         d          }t          |           ddi}| j        |d<   t	          |          |d<   dt          j        |          z   d	| j         z   }t          |           t          j
        ||
          }t          |j                   t          j        |j                  }|d         dk    rd S |S )Nry   rz   rc   r  r   r   rQ  r   r  r   r   r   rW   r}   rR  r   r   r   r   r   rN   r   r   r   r   r   rS  r  r   r   r   r   r  s           r   cancel_orderzNorenApi.cancel_orderu  s    * B!1-!@BBc


  'u"7|||TZ///2N4;L2N2NN'mCg...ch*SX&&6?d""4r   c                    t           j        }|d          |d         d          }t          |           ddi}| j        |d<   ||d<   ||d<   d	t	          j        |          z   d
| j         z   }t          |           t          j	        ||          }t          |j
                   t	          j        |j
                  }|d         dk    rd S |S )Nry   rz   rd   r  r   r   rQ  r   r   r  r   r   r   )rW   r}   rR  r   r   r   r   rN   r   r   r   r   )	r   rS  rC  r  r   r   r   r   r  s	            r   
exit_orderzNorenApi.exit_order  s    * @!1+!>@@c


  'u&|$uTZ///2N4;L2N2NN'mCg...#(*SX&&6?d""4r   c                 :   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          j
        |
          z   d| j         z   }t          |           t          j        |	|          }t          |j                   t          j        |j                  }|d         dk    rdS |S )zV
        Coverts a day or carryforward position from one product to another. 
        ry   rz   re   r  r   r   r   r	   r2  r3  r   prevprdr1  postyper   r  r   r   r   N)rW   r}   rR  r   r   r?  r@  rA  r   r   r   r   rN   r   r   r   r   )r   rD  rE  rF  new_product_typeprevious_product_typerB  	day_or_cfr  r   r   r   r   r  s                 r   position_product_conversionz$NorenApi.position_product_conversion  s4    * I!12F!GIIc


  'u*w!v00??vHu(u1y(z%yTZ///2N4;L2N2NN'mCg...#(*SX&&6?d""4r   c                    t           j        }|d          |d         d          }t          |           ddi}| j        |d<   ||d<   dt	          j        |          z   d	| j         z   }t          |           t          j	        ||
          }t          |j
                   t	          j        |j
                  }t          |          t          k    rd S |S )Nry   rz   rh   r  r   r   rQ  r   r  r   )rW   r}   rR  r   r   r   r   rN   r   r   r   r   r   r  r[  s           r   single_order_historyzNorenApi.single_order_history  s    * I!12F!GIIc


  'u&|TZ///2N4;L2N2NN'mCg...#(*SX&&==D  4r   c                    t           j        }|d          |d         d          }t          |           ddi}| j        |d<   dt	          j        |          z   d| j         z   }t          |           t          j        ||	          }t          |j	                   t	          j
        |j	                  }t          |          t          k    rd S |S )
Nry   rz   rf   r  r   r   r   r  r   rW   r}   rN   r   r   r   r   r   r   r   r   r   r  r  s          r   get_order_bookzNorenApi.get_order_book  s    * @!1+!>@@#  'uTZ///2N4;L2N2NN'mCg...#(*SX&& ==D  4r   c                    t           j        }|d          |d         d          }t          |           ddi}| j        |d<   | j        |d<   dt          j        |          z   d	| j         z   }t          |           t          j	        ||
          }t          |j
                   t          j        |j
                  }t          |          t          k    rd S |S )Nry   rz   rg   r  r   r   r   r   r  r   rW   r}   rN   r   r   r   r   r   r   r   r   r   r   r  r  s          r   get_trade_bookzNorenApi.get_trade_book   s    * @!1+!>@@#  'u*wTZ///2N4;L2N2NN'mCg...#(*SX&& ==D  4r   c                    t           j        }|d          |d         d          }t          |           |d k    rt          d           d S i }| j        |d<   ||d<   t
          j                            |          |d<   dt          j	        |          z   d	| j
         z   }t          |           t          j        ||
          }t          |j                   t          j        |j                  }|d         dk    rd S |S )Nry   rz   ri   zsearch text cannot be nullr   r	   stextr   r  r   r   r   )rW   r}   rN   rR   r   r?  r@  rA  r   r   r   r   r   r   r   )	r   rD  
searchtextr  r   r   r   r   r  s	            r   ri   zNorenApi.searchscrip  s   * B!1-!@BB#45554u!v ,11*==wTZ///2N4;L2N2NN'mCg...#(*SX&&6?d""4r   c                    t           j        }|d          |d         d          }t          |           i }| j        |d<   ||d<   t          j                            |          |d<   t          |          |d<   t          |          |d<   d	t          j	        |          z   d
| j
         z   }t          |           t          j        ||          }	t          |	j                   t          j        |	j                  }
|
d         dk    rd S |
S )Nry   rz   rk   r   r	   r2  r   cntr   r  r   r   r   )rW   r}   rN   r   r?  r@  rA  r   r   r   r   r   r   r   r   )r   rD  rE  strikepricecountr  r   r   r   r   r  s              r   get_option_chainzNorenApi.get_option_chain9  s	   * B!1-!@BB#u!v00??v{++xE

uTZ///2N4;L2N2NN'mCg...#(*SX&&6?d""4r   c                    t           j        }|d          |d         d          }t          |           i }| j        |d<   ||d<   ||d<   dt	          j        |          z   d| j         z   }t          |           t          j        ||	          }t          |j	                   t	          j
        |j	                  }|d
         dk    rd S |S )Nry   rz   ro   r   r	   tokenr   r  r   r   r   r!  	r   rD  rw  r  r   r   r   r   r  s	            r   get_security_infozNorenApi.get_security_infoU      * @!1+!>@@#u!vwTZ///2N4;L2N2NN'mCg...#(*SX&&6?d""4r   c                    t           j        }|d          |d         d          }t          |           i }| j        |d<   ||d<   ||d<   dt	          j        |          z   d| j         z   }t          |           t          j        ||	          }t          |j	                   t	          j
        |j	                  }|d
         dk    rd S |S )Nry   rz   rp   r   r	   rw  r   r  r   r   r   r!  rx  s	            r   
get_quoteszNorenApi.get_quoteso  rz  r   c                    t           j        }|d          |d         d          }t          |           |dk    r@t          j        d          dz   }t          j        |d          }	t          j        |	          }dd	i}
| j        |
d
<   ||
d<   ||
d<   t          |          |
d<   |dk    rt          |          |
d<   |dk    rt          |          |
d<   dt          j
        |
          z   d| j         z   }t          |           t          j        ||          }t          |j                   t          j        |j                  }t!          |          t"          k    rdS |S )zj
        gets the chart data 
        interval possible values 1, 3, 5 , 10, 15, 30, 60, 120, 240
        ry   rz   rj   Nz%d-%m-%Yz	 00:00:00z%d-%m-%Y %H:%M:%Sr  r   r   r	   rw  stetintrvr   r  r   )rW   r}   rN   timestrftimestrptimemktimer   r   r   r   r   r   r   r   r   r   r  )r   rD  rw  	starttimeendtimeintervalr  r   
timestringtimeobjr   r   r   r  s                 r   get_time_price_serieszNorenApi.get_time_price_series  sh   
 * ?!1*!=??# z22[@JmJ0CDDGG,,I  'u!vw9~~td??w<<F4Lt!(mmF7OTZ///2N4;L2N2NN'mCg...#(*SX&& ==D  4r   c                    t           j        }|d          |d         d          }t          |           |d k    rwt          j                                        t          j        d          z
  }t          j        |t          j	        
                                                                          }|d k    r%t          j                                                    }i }| j        |d<   d                    ||          |d<   t          |          |d	<   t          |          |d
<   dt!          j        |          z   d| j         z   }	t          |	           ddi}
t'          j        ||	|
          }t          |           |j        dk    rd S t-          |j                  dk    rd S t!          j        |j                  }t3          |          t4          k    rd S |S )Nry   rz   rs      )daysr   z{0}:{1}symfromtor   r  zContent-Typezapplication/json; charset=utf-8)r   headers   r   )rW   r}   rN   r   datetoday	timedeltadtcombineminr  	timestampnowr   r   r   r   r   r   r   r   status_codelenr   r   r   r  )r   rD  rE  	startdateenddater  r   week_agor   r   r  r   r  s                r   rs   zNorenApi.get_daily_price_series  s   * M!12J!KMM# }**,,x/Aq/I/I/IIH
8RV[[]];;EEGGId??fhh((**G u!((=AAuYv7||tTZ///2N4;L2N2NN'!#DEmCgw???#?c!!4sx==A4*SX&& ==D  4r   c                    t           j        }|d          |d         d          }t          |           |d k    rt          j        }i }| j        |d<   | j        |d<   ||d<   dt          j        |          z   d| j	         z   }t          |           t          j        ||	          }t          |j                   t          j        |j                  }t          |          t          k    rd S |S )
Nry   rz   rl   r   r   r   r   r  r   )rW   r}   rN   r#   r'   r   r   r   r   r   r   r   r   r   r   r  )r   rC  r  r   r   r   r   r  s           r   get_holdingszNorenApi.get_holdings  s    * ?!1*!=??#4&/Lu*w$uTZ///2N4;L2N2NN'mCg...#(*SX&&==D  4r   c                    t           j        }|d          |d         d          }t          |           i }| j        |d<   | j        |d<   |d k    r||d<   |d k    r||d<   |d k    r||d<   d	t          j        |          z   d
| j         z   }t          |           t          j	        ||          }t          |j
                   t          j        |j
                  }	|	S )Nry   rz   rm   r   r   r   segr	   r   r  r   )rW   r}   rN   r   r   r   r   r   r   r   r   r   )
r   rC  segmentrD  r  r   r   r   r   r  s
             r   
get_limitszNorenApi.get_limits  s    * =!1(!;==#u*w4(F5M4#F5Mt%F6NTZ///2N4;L2N2NN'mCg...#(*SX&&r   c                    t           j        }|d          |d         d          }t          |           i }| j        |d<   | j        |d<   dt          j        |          z   d| j         z   }t          |           t          j	        ||          }t          |j
                   t          j        |j
                  }t          |          t          k    rd S |S )	Nry   rz   rn   r   r   r   r  r   rl  r  s          r   get_positionszNorenApi.get_positions  s    * @!1+!>@@#u*wTZ///2N4;L2N2NN'mCg...#(*SX&&==D  4r   rn   c                 |   t           j        }|d          |d         d          }t          |           i }| j        |d<   ||d<   dt	          j        |d           z   d	| j         z   }t          |           t          j        ||
          }t          |j	                   t	          j
        |j	                  }|S )Nry   rz   rq   r   posr   c                 *    |                                  S r   )r   )r  s    r   <lambda>z*NorenApi.span_calculator.<locals>.<lambda>@  s    188:: r   )defaultr  r   rW   r}   rN   r   r   r   r   r   r   r   r   )r   rn   r  r   senddatar   r   r  s           r   rq   zNorenApi.span_calculator6  s    *F!12C!DFF# ,#Jx)=)=>>>?(T&(() 	'mCg...#(*SX&&r   c                    t           j        }|d          |d         d          }t          |           ddi}	| j        |	d<   ||	d<   ||	d<   ||	d	<   ||	d
<   ||	d<   ||	d<   dt	          j        |	          z   d| j         z   }
t          |
           t          j        ||
          }t          |j	                   t	          j
        |j	                  }|S )Nry   rz   rr   r   r   r   r   r   sptprcint_rate
volatilityr   r   r  r   r  )r   
expiredateStrikePrice	SpotPriceInterestRate
Volatility
OptionTyper  r   r   r   r   r  s                r   rr   zNorenApi.option_greekK  s    * C!1.!ACC# E"*w"u&x$x)z)|#vTZ///2N4;L2N2NN'mCg...#(*SX&&r   c                    t           j        }|d          |d         d          }t          |           ddi}| j        |d<   dt	          j        |          z   d| j         z   }t          |           t          j        ||	          }t          |j	                   t	          j
        |j	                  }t          |          t          k    rd S |S )
Nry   rz   ru   r  r   r   r   r  r   ri  r  s          r   get_pending_gtt_orderszNorenApi.get_pending_gtt_ordersg  s    * :!1%!8::#  'uTZ///2N4;L2N2NN'mCg...#(*SX&& ==D  4r   c                    t           j        }|d          |d         d          }t          |           ddi}| j        |d<   dt	          j        |          z   d| j         z   }t          |           t          j        ||	          }t          |j	                   t	          j
        |j	                  }t          |          t          k    rd S |S )
Nry   rz   rv   r  r   r   r   r  r   ri  r  s          r   get_enabled_gtt_orderszNorenApi.get_enabled_gtt_orders  s    * A!1,!?AA#  'uTZ///2N4;L2N2NN'mCg...#(*SX&& ==D  4r   GTTr   c                    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          j
        |          z   d| j         z   }t          |           t          j        ||          }t          |j                   t          j        |j                  }|d         dk    rd S |d         S )Nry   rz   rt   r  r   r   r   r2  r	   ai_tvalidityr  r8  r1  r5  r   r   r3  r6  r4  r   r  r   r   z
OI createdal_idr>  )r   rE  rD  
alert_typealert_pricerB  rC  rF  rH  rI  r8  rK  r  rG  r  r   r   r   r   r  s                       r   place_gtt_orderzNorenApi.place_gtt_order  s   " *?!1*!=??#  'u*w00??v!v#v%z+&&s#y(z%x$u!uHuE

u{++xTZ///2N4;L2N2NN'mCg...#(*SX&&6?l**4wr   c                    t           j        }|d          |d         d          }t          |           ddi}| j        |d<   t	          |          |d<   dt          j        |          z   d	| j         z   }t          |           t          j
        ||
          }t          |j                   t          j        |j                  }|d         dk    rd S |S )Nry   rz   rw   r  r   r   rQ  r   r  r   r   r   rZ  r[  s           r   cancel_gtt_orderzNorenApi.cancel_gtt_order  s    * @!1+!>@@c


  'u"7|||TZ///2N4;L2N2NN'mCg...ch*SX&&6?d""4r   r   )NN)NNNN)NNNNN)r-  Nr.  r/  Nr-  r-  r-  )r-  Nr-  r-  r-  )r.   )NNN)r3   r-  Nr.  r  r   )@r   r   r   TRANSACTION_TYPE_SELLTRANSACTION_TYPE_BUYPRODUCT_TYPE_INTRADAYPRODUCT_TYPE_DELIVERYPRODUCT_TYPE_NORMALPRICE_TYPE_MARKETPRICE_TYPE_LIMITPRICE_TYPE_STOPLOSS_LIMITPRICE_TYPE_STOPLOSS_MARKETALERT_TYPE_ABOVEALERT_TYPE_BELOWALERT_TYPE_OCOFEED_TYPE_TOUCHLINEFEED_TYPE_SNAPSHOTr}   r   r   r   r   r   r   r   r   r   r  r  r[   rZ   r,   r/   r  r  r  r"  r%  r*  r,  rO  rX  r\  r^  re  rg  rj  rm  ri   ru  ry  r|  r  rs   r  r  r  r  rq   rr   r  r  r  r  r!   r   r   rW   rW   L   s        (!)   N $!
!
i!
 0!
 |	!

 y!
 !
 2!
  6!
 -!
 >!
 >!
 !
 !"6!
 !
 !
  !"2!!
" >#!
$ $,#(+%*-&5((+*&A!
 !
 !
D 2I& &P& & &"
 
 
  # # #       "# # # #   > 26.2-1.2.2	! ! ! !:     $ $ $L	 	 	  4  8 /7.@    ( 190B    $    .  0  8  < :>sv4 4 4 4n @C/ / / /b  2  4" " "H  4  4  6  <   8  4  4) ) ) )V+ + + +Z   :   >  2    *  8  4  F 1  1  1  1 f    r   rW   )r   r   r   r   loggingenumr   r   r   r  r?  r   r  	getLoggerr   rJ   r   r#   r,   r2   r<   rB   rN   rR   rU   objectrW   r!   r   r   <module>r     s                              # # # # # #		8	$	$                      
                     
  
  
  
Y Y Y Y Yv Y Y Y Y Yr   