
    bAjW
                         d 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mZmZmZ  ee      Z e
       Z G d	 d
      Z e       Zy)z@Paper trading service - simulates orders without real execution.    )datetimetimezone)Decimal)Optional)uuid4)get_settings)
get_logger)	OrderSideOrderStatusTradingModec                   N    e Zd ZdZd Zdedededededed	efd
Z	deded	efdZ
y)PaperTradingServicez1Simulates order execution with slippage modeling.c                 d    t         j                  dz  | _        t         j                  dz  | _        y )Nd   )settingsbacktest_slippage_pctslippage_pctbacktest_commission_pctcommission_pct)selfs    LC:\xampp\htdocs\tradingbinance\backend\app\services\paper_trading_service.py__init__zPaperTradingService.__init__   s(    $::S@&>>D    symbolsidequantityexpected_price	stop_losstake_profitreturnc                    |t        t        | j                              z  }|t        j                  k(  r||z   }n||z
  }||z  t        t        | j
                              z  }	||z  }
t        t                     ||j                  t        j                  j                  t        j                  j                  ||||||	|
dt               j                  d d  t        j                  t        j                         j#                         d}t$        j'                  d||j                  t        |      t        |      t        |
             |S )NzPAPER-   )idr   r   statustrading_moder   r   filled_pricer   r   
commissionslippageexchange_order_id	filled_atpaper_order_simulated)r   r   expectedfilledr(   )r   strr   r
   BUYr   r   valuer   FILLEDr   PAPERhexr   nowr   utc	isoformatloggerinfo)r   r   r   r   r   r   r   r(   r&   r'   slippage_amountorders               r   simulate_orderz"PaperTradingService.simulate_order   s%    "GC0A0A,B$CC9== )H4L)H4L!H,ws4;N;N7O/PP
"X- eg,JJ!((..'--33 ,("&$'#)%'++bq/):!;!hll3==?
" 	#(|$) 	 	
 r   r,   actualc                 p    ||z
  }|r||z  dz  n
t        d      }||||t        |      t        d      k  dS )Nr   0z0.5)r   actual_price
differencedifference_pct
acceptable)r   abs)r   r,   r<   diffdiff_pcts        r   compare_executionz%PaperTradingService.compare_executionD   sH     .6D8Oc)GCL&"&h-75>9
 	
r   N)__name__
__module____qualname____doc__r   r.   r
   r   dictr;   rF    r   r   r   r      so    ;E++ + 	+
  + + + 
+Z	
' 	
7 	
t 	
r   r   N)rJ   r   r   decimalr   typingr   uuidr   app.core.configr   app.core.loggingr	   
app.modelsr
   r   r   rG   r7   r   r   paper_trading_servicerL   r   r   <module>rT      sG    F '    ( ' : :	H	>=
 =
@ ,- r   