
    bAj`                        d Z ddlmZ ddl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 ddlmZmZmZmZmZ dd	l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   edg      Z!e!jE                  de#       ee      fdedede
fd       Z$e!jK                  de       ee      fde&dede
fd       Z'e!jK                  de      d de&dede&fd       Z(e!jK                  d      de&defd       Z)y)!z'Backtesting and market data API routes.    )uuid4)	APIRouterDependsHTTPException)select)AsyncSession)RequireAnalyst)get_db)BacktestRunBacktestStatusCandleIntervalStrategySymbol)BacktestRequestBacktestResultIndicatorSnapshot)backtesting_engine)binance_service)indicators_service)run_backtest_taskzBacktesting & Market)tagsz	/backtest)response_modeldatauserdbc           
        K   |j                  t        t              j                  t        j                  | j                  k(               d {   }|j                         }|st        dd| j                   d      |j                  t        t              j                  t        j                  | j                  k(               d {   }|j                         }|st        dd| j                   d      t        t               |j                  |j                  | j                  | j                  | j                  | j                  t         j"                        }|j%                  |       |j'                          d {    t)        j*                  t-        |j                        | j                  | j                  | j                  j.                         t-        |j                        ddd	S 7 7 /7 vw)
N  zSymbol z
 not foundstatus_codedetailz	Strategy )idstrategy_id	symbol_idinterval
start_dateend_dateinitial_capitalstatuspendingzBacktest queued)backtest_idr(   message)executer   r   wheresymbolscalar_one_or_noner   r   strategy_typer   r   r!   r$   r%   r&   r'   r   PENDINGaddflushr   delaystrvalue)r   r   r   
sym_resultr.   strat_resultstrategyruns           AC:\xampp\htdocs\tradingbinance\backend\app\api\routes\backtest.pystart_backtestr<      sy    zz&."6"6v}}7S"TUUJ**,Fgdkk]*4UVVF8$4$:$:8;Q;QUYUgUg;g$hiiL..0Hi@R@R?SS]4^__
7KK))??,,%%	C FF3K
((*CKd6H6H$--J]J]^svv;)HYZZ3 V
 j  s9   AG?G7A<G?G:B:G?G=A1G?:G?=G?z/backtest/{backtest_id}r*   c                 N  K   ddl m} |j                  t        t        t
        j                  t        j                        j                  t
        t        j                  t
        j                  k(        j                  t        t        j                  t        j                  k(        j                  t        j                   ||       k(               d {   }|j                         }|st        dd      |\  }}}t!        |j                  |||j"                  |j$                  |j&                  |j(                  |j*                  |j,                  |j.                  |j"                  xs d|j.                  xs dkD  |j0                  j2                  |j4                        S 7 έw)Nr   )UUIDr   zBacktest not foundr   )r!   strategy_namer.   total_return_pctmax_drawdownsharpe_ratiosortino_ratiowin_rateprofit_factorbuy_hold_returnbeats_buy_holdr(   
created_at)uuidr>   r,   r   r   r   namer   r.   joinr"   r!   r#   r-   one_or_noner   r   r@   rA   rB   rC   rD   rE   rF   r(   r6   rH   )	r*   r   r   r>   resultrowr:   
strat_namesyms	            r;   get_backtest_resultrQ   3   s9    ::{HMM6==9	h//8;;>	?	fk++vyy8	9	{~~k!22	3	 F 


C4HIICS66 --%%%%''''++,,1c6I6I6NQOzz>> s   CF%F#CF%z/market/{symbol}/indicatorsr.   r$   c                    K   t        j                  | |d       d {   }t        j                  |      }d|v rt	        d|d         t        | ||d   d   |d   d   |	      S 7 Iw)
N   )limiterrori  r   	open_timeclose)r.   r$   	timestampprice
indicators)r   
get_klinesr   calculate_allr   r   )r.   r   r$   candlesr[   s        r;   get_indicatorsr_   S   s{     #..vxsKKG#11':J*Jw4GHH"+k*bk'"  Ls   A*A(A
A*z/market/{symbol}/pricec                    K   t        j                  |        d {   }t        j                  |        d {   }| t        |      t        |d         t        |d         t        |d         dS 7 V7 ;w)Nbest_bidbest_ask
spread_pct)r.   rZ   bidaskrc   )r   get_ticker_priceget_orderbookr5   )r.   r   rZ   books       r;   	get_priceri   c   sp     !226::E ..v66DU4
#$4
#$$|,-  ;6s   A6A2A6A4:A64A6N)1h)*__doc__rI   r   fastapir   r   r   
sqlalchemyr   sqlalchemy.ext.asyncior   app.api.depsr	   app.core.databaser
   
app.modelsr   r   r   r   r   app.schemasr   r   r    app.services.backtesting_servicer   app.services.binance_servicer   app.services.indicators_servicer   app.workers.tasksr   routerpostdictr<   getr5   rQ   r_   ri        r;   <module>r}      s-   -  5 5  / ' $ T T J J ? 8 > /	/0	1 [.Y`agYh [ [n [, [ /[: %nEY`agYh 3 n ,  F> ):KL N c  M $%	C 	~ 	 &	r|   