
    pWi                     b   d dl mZ d dlmZmZmZ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 d dlmZ d d	lmZ  ed
dg          Ze                    d           edd           edd           ed           edd           ed d            ee          fdee         dee         dee         dedede
fd            Ze                    d           ee          fdede
fd            Ze                    d            ee          fdede
fd!            ZdS )"    )Optional)	APIRouterDependsHTTPExceptionQuery)select)AsyncSession)get_db)TradeTradeStatus	TradeModeTradeResult)trade_monitor)get_current_price)datetimez/api/v1/tradestrades)prefixtags NzOPEN or CLOSED)descriptionzREAL or SIMULATION2   i  )le)gestatusmodepairlimitoffsetdbc                   K   t          t                    }| rB|                    t          j        t	          |                                           k              }|rB|                    t          j        t          |                                          k              }|r5|                    t          j        |                                k              }|	                    t          j
                                                                      |                              |          }|                    |           d{V }|                                                                }d |D             t#          |          dS )z"List trades with optional filters.Nc                 6    g | ]}|                                 S  )to_dict).0ts     9/var/www/html/crypto-bot/backend/app/api/routes/trades.py
<listcomp>zlist_trades.<locals>.<listcomp>$   s     333qqyy{{333    )r   count)r   r   wherer   r   upperr   r   r   order_by	opened_atdescr   r   executescalarsalllen)	r   r   r   r   r   r   stmtresultr   s	            r&   list_tradesr5      s8      %==D Gzz%,+fllnn*E*EEFF Azz%*	$**,,(?(??@@ 6zz%*

455==--//0077??EEeLLD::d########F^^!!##F33F333c&kkJJJr(   z/{trade_id}trade_idc                   K   |                     t          t                                        t          j        | k                         d{V }|                                }|t          dd          |                                S )zFetch a single trade by ID.N  Trade not foundstatus_codedetail)r/   r   r   r*   idscalar_one_or_noner   r#   )r6   r   r4   trades       r&   	get_trader@   '   s~       ::fUmm11%(h2FGGHHHHHHHHF%%''E}4EFFFF==??r(   z/{trade_id}/closec                   K   |                     t          t                                        t          j        | k                         d{V }|                                }|t          dd          |j        t          j	        k    rt          dd          t          |j                  }|st          dd          |j        d	k    r||j        z
  |j        z  d
z  }n|j        |z
  |j        z  d
z  }|dk    rt          j        }n|dk     rt          j        }nt          j        }t          j        |_        t'          j                    |_        ||_        ||_        t1          |d          |_        |j        r(t1          |d
z  |j        z  |j        z  d          |_        |                                 d{V  |                    |           d{V  d|                                dS )z9Manually close an open trade at the current market price.Nr8   r9   r:   i  zTrade is not openi  zCould not fetch current priceBUYd   r         zTrade closed)messager?   )r/   r   r   r*   r=   r>   r   r   r   OPENr   r   signalentry_pricer   WINLOSS	BREAKEVENCLOSEDr   utcnow	closed_atr4   current_priceroundpnl_percentagequantity
pnl_amountcommitrefreshr#   )r6   r   r4   r?   rP   pnl_pcttrade_results          r&   close_trade_manuallyrY   1   s      ::fUmm11%(h2FGGHHHHHHHHF%%''E}4EFFFF|{'''4GHHHH%ej11M U4STTTT |u 5#448IICO$}48IICO{{"	1"'",%ELo''EOEL'E !,,E~ X 31B!BU^!SUVWW
))++
**U

%@@@r(   )typingr   fastapir   r   r   r   
sqlalchemyr   sqlalchemy.ext.asyncior	   app.databaser
   app.models.trader   r   r   r   app.engines.trade_monitorr   app.data_layer.market_datar   r   routergetstrintr5   r@   postrY   r"   r(   r&   <module>rg      sg         < < < < < < < < < < < <       / / / / / /       G G G G G G G G G G G G 3 3 3 3 3 3 8 8 8 8 8 8      	*(	<	<	< B!E$4DEEE%2FGGG%++rc"""%a...wvK KSMK
3-K 3-K 	K
 K 	K K K K. M6=gfoo  c |      !!AH $A $A $A, $A $A $A "!$A $A $Ar(   