
    kWi                         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
mZmZ d dlmZ  e j        e          Z G d d	          Z e            ZdS )
    N)datetime)Optional)AsyncSession)get_current_price)Trade	TradeModeTradeSignalTradeStatus)settingsc                   X    e Zd ZdZddefdZdedededed	ed
edede	de
e         fdZdS )SimulationEnginez
    Same interface as ExecutionEngine but records simulated trades only.
    Applies optional slippage to simulate realistic fill prices.
    Nslippage_pctc                 0    ||nt           j        | _        d S N)r   SLIPPAGE_PCTr   )selfr   s     A/var/www/html/crypto-bot/backend/app/engines/simulation_engine.py__init__zSimulationEngine.__init__   s    ,8,DLL(J_    dbpairsignalentry_price	stop_losstake_profit_levelsquantitystrategy_snapshotreturnc	                 R  K   t          |          p|}	|	| j        dz  z  }
|dk    r|	|
z   }n|	|
z
  }t          |t          j        t          |          t          |d          t          |d          ||dgt          |          z  |t          j	                    t          j        |          }|                    |           |                                 d{V  |                    |           d{V  t                              d| d| d	|d
d|
d
d|j         d           |S )zCRecord a simulated trade at the current market price with slippage.d   BUY   F)r   moder   r   current_pricer   r   tp_hitsr   	opened_atstatusr   NzSIMULATION trade opened:  z @ z.8fz (slippage=z, id=))r   r   r   r   
SIMULATIONr	   roundlenr   utcnowr
   OPENaddcommitrefreshloggerinfoid)r   r   r   r   r   r   r   r   r   
live_priceslippage
fill_pricetrades                r   
open_tradezSimulationEngine.open_trade   s      't,,;
 !2S!89U??#h.JJ#h.J%v&&j!,,
A..1Gc"4555o''#/
 
 
 	uiikkjj8 8 8v 8 8*K 8 8!78 8,1H8 8 8	
 	
 	
 r   r   )__name__
__module____qualname____doc__floatr   r   strlistdictr   r   r9    r   r   r   r      s         
` `U ` ` ` `++ + 	+
 + + !+ +  + 
%+ + + + + +r   r   )loggingr   typingr   sqlalchemy.ext.asyncior   app.data_layer.market_datar   app.models.trader   r   r	   r
   
app.configr   	getLoggerr:   r2   r   simulation_enginerB   r   r   <module>rK      s                 / / / / / / 8 8 8 8 8 8 G G G G G G G G G G G G      		8	$	$4 4 4 4 4 4 4 4n %$&&   r   