
    9j|                     x   d Z ddlZddlZddlmZ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mZmZmZmZmZmZmZ ddlmZmZ ddlmZmZmZ dd	lmZ  G d
 deej                        Z  G d deej                        Z! G d deej                        Z" G d deej                        Z# G d deej                        Z$ G d deej                        Z% G d deej                        Z& G d deej                        Z' G d deej                        Z( G d deej                        Z) G d deej                        Z* G d  d!eej                        Z+ G d" d#eej                        Z, G d$ d%eej                        Z- G d& d'eej                        Z. G d( d)e      Z/ G d* d+e      Z0 G d, d-e      Z1 G d. d/e      Z2 G d0 d1e      Z3 G d2 d3e      Z4 G d4 d5e      Z5 G d6 d7e      Z6 G d8 d9e      Z7 G d: d;e      Z8 G d< d=e      Z9 G d> d?e      Z: G d@ dAe      Z; G dB dCe      Z< G dD dEe      Z= G dF dGe      Z> G dH dIe      Z? G dJ dKe      Z@ G dL dMe      ZA G dN dOe      ZB G dP dQe      ZC G dR dSe      ZD G dT dUe      ZE G dV dWe      ZF G dX dYe      ZG G dZ d[e      ZHy)\zSQLAlchemy database models.    N)datedatetime)Decimal)Optional)BooleanDateDateTimeEnum
ForeignKeyIndexIntegerNumericStringTextUniqueConstraintfunc)JSONBUUID)Mappedmapped_columnrelationship)Basec                       e Zd ZdZdZdZy)UserRoleadminanalystviewerN)__name__
__module____qualname__ADMINANALYSTVIEWER     =C:\xampp\htdocs\tradingbinance\backend\app\models\__init__.pyr   r      s    EGFr%   r   c                       e Zd ZdZdZdZy)TradingModetestnetpaper
productionN)r   r   r    TESTNETPAPER
PRODUCTIONr$   r%   r&   r(   r(   #   s    GEJr%   r(   c                       e Zd ZdZdZdZy)SignalActionBUYSELLHOLDN)r   r   r    r1   r2   r3   r$   r%   r&   r0   r0   )   s    
CDDr%   r0   c                       e Zd ZdZdZdZy)	RiskLevellowmediumhighN)r   r   r    LOWMEDIUMHIGHr$   r%   r&   r5   r5   /   s    
CFDr%   r5   c                       e Zd ZdZdZy)	OrderSider1   r2   N)r   r   r    r1   r2   r$   r%   r&   r=   r=   5   s    
CDr%   r=   c                       e Zd ZdZdZdZdZy)	OrderTypeMARKETLIMIT	STOP_LOSSTAKE_PROFITN)r   r   r    r@   rA   rB   rC   r$   r%   r&   r?   r?   :   s    FEIKr%   r?   c                   0    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zy
)OrderStatusCREATED	SUBMITTEDPARTIALLY_FILLEDFILLED	CANCELLEDREJECTEDEXPIREDPENDINGOPENN)r   r   r    rF   rG   rH   rI   rJ   rK   rL   rM   rN   r$   r%   r&   rE   rE   A   s0    GI)FIHGGDr%   rE   c                        e Zd ZdZdZdZdZdZy)MarketRegimeTREND_UP
TREND_DOWNRANGEEXTREME_VOLNO_DATAN)r   r   r    rQ   rR   rS   rT   rU   r$   r%   r&   rP   rP   M   s    HJEKGr%   rP   c                   ,    e Zd ZdZdZdZdZdZdZdZ	dZ
y	)
CircuitBreakerReason
daily_lossconsecutive_lossesws_disconnectedreconciliation_failedorder_latencyflash_crashmanualapi_banN)r   r   r    
DAILY_LOSSCONSECUTIVE_LOSSESWS_DISCONNECTEDRECONCILIATION_FAILEDORDER_LATENCYFLASH_CRASHMANUALAPI_BANr$   r%   r&   rW   rW   U   s,    J-'O3#MKFGr%   rW   c                   $    e Zd ZdZdZdZdZdZdZy)DataQualityFlag	duplicatemissing_gapout_of_order
zero_pricenegative_pricevolume_anomalyN)	r   r   r    	DUPLICATEMISSING_GAPOUT_OF_ORDER
ZERO_PRICENEGATIVE_PRICEVOLUME_ANOMALYr$   r%   r&   ri   ri   `   s     IK!LJ%N%Nr%   ri   c                       e Zd ZdZdZy)PositionStatusrN   CLOSEDN)r   r   r    rN   rx   r$   r%   r&   rw   rw   i   s    DFr%   rw   c                   $    e Zd ZdZdZdZdZdZdZy)CandleInterval1m5m15m1h4h1dN)	r   r   r    M1M5M15H1H4D1r$   r%   r&   rz   rz   n   s     	B	B
C	B	B	Br%   rz   c                       e Zd ZdZdZdZy)NotificationChannelemailtelegramwhatsappN)r   r   r    EMAILTELEGRAMWHATSAPPr$   r%   r&   r   r   w   s    EHHr%   r   c                       e Zd ZdZdZdZdZy)BacktestStatuspendingrunning	completedfailedN)r   r   r    rM   RUNNING	COMPLETEDFAILEDr$   r%   r&   r   r   }   s    GGIFr%   r   c                        e Zd ZdZdZdZdZdZy)
LockReasonrX   rY   emergency_stopr^   
api_errorsN)r   r   r    r`   ra   EMERGENCY_STOPrf   
API_ERRORSr$   r%   r&   r   r      s    J-%NFJr%   r   c                   ^   e Zd ZU dZ e ed      dej                        Ze	ej
                     e
d<    e ed      ddd      Ze	e   e
d	<    e ed      d
      Ze	e   e
d<    e ee      ej"                        Ze	e   e
d<    eed      Ze	e   e
d<    e ed            Ze	ee      e
d<    eed      Ze	e   e
d<    e ed       ej6                               Ze	e   e
d<    e ed       ej6                               Ze	ee      e
d<    ed      Z e	e!d      e
d<   y)UserusersTas_uuidprimary_keydefaultid   Funiqueindexnullabler   r   password_hashr   role	is_active@   totp_secrettotp_enabledtimezoneserver_default
created_at)onupdate
updated_atuserback_populatesAuditLog
audit_logsN)"r   r   r    __tablename__r   r   uuiduuid4r   r   __annotations__r   r   strr   r
   r   r#   r   r   r   boolr   r   r   r	   r   nowr   r   r   r   r   listr$   r%   r&   r   r      s8   M)$t*<$X\XbXbcBtyyc&vc{4tV[\E6#;\!.vc{U!KM6#;K*4>8??SD&
S+GTBIvd|B)6vbz)BK&B!.w!FL&,F#041HYaY]YaYaYc#dJx d-:8T;R]e]a]e]e]g-hJx)*h+7v+NJtJ'(Nr%   r   c                   V   e Zd ZU dZ e ed      dej                        Ze	ej
                     e
d<    e ed      ddd      Ze	e   e
d	<    e ed
      d      Ze	e   e
d<    e ed
      d      Ze	e   e
d<    eed      Ze	e   e
d<    e edd       ed            Ze	e   e
d<    e edd       ed            Ze	e   e
d<    e edd       ed            Ze	e   e
d<    e edd       ed            Ze	e   e
d<    eed      Ze	e   e
d<    eee      Ze	e   e
d<    e ed       e jB                               Z"e	e#   e
d<    e$d	      Z%e	e&d      e
d <    e$d	      Z'e	e&d!      e
d"<    e$d	      Z(e	e&d#      e
d$<    e$d	      Z)e	e&d%      e
d&<   y')(SymbolsymbolsTr   r   r      Fr   symbol
   r   
base_assetquote_assetr   r      z0.00001min_qtyz0.01	tick_size	step_size10min_notional   max_num_ordersexchange_filtersr   r   r   r   CandlecandlesSignalsignalsOrderordersPosition	positionsN)*r   r   r    r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   intr   dictr   r	   r   r   r   r   r   r   r   r   r   r   r$   r%   r&   r   r      s   M)$t*<$X\XbXbcBtyyc'r
4tV[\FF3K\+F2JGJsG,VBZ%HKH+GTBIvd|B,WR^WYEWXGVG_X!.wr1~wv!WIvgW!.wr1~wyGY!ZIvgZ$1'"a.'RV-$XL&/X"/"ENF3KE%25$%GfTlG#041HYaY]YaYaYc#dJx d&2(&KGVDN#K&2(&KGVDN#K$0$IFF4=!I*6h*OIvd:&'Or%   r   c                      e Zd ZU dZ edddd       edddd      fZ e ed	      de	j                  
      Zee	j                     ed<    e ed	       ed      d      Zee	j                     ed<    e ee      d      Zee   ed<    e ed      d      Zee   ed<    e edd      d      Zee   ed<    e edd      d      Zee   ed<    e edd      d      Zee   ed<    e edd      d      Zee   ed<    e edd      d      Zee   ed<    e edd       ed            Zee   ed<    eed      Zee    ed<    e ed            Z!ee"e      ed<    ee#d      Z$ee%   ed<    ee#d      Z&ee%   ed<    ee'e(      Z)ee(   ed<    e ed       e*jV                                Z,ee   ed!<    e-d"      Z.ed#   ed$<   y%)&r   r   	symbol_idinterval	open_timeuq_candle_symbol_interval_timename idx_candles_symbol_interval_timeTr   r   r   
symbols.idFr   r   r   r   openr8   r6   closevolume0r   quote_volumer   trades_count
close_time	is_closedis_suspiciousquality_flagsr   r   r   r   r   N)/r   r   r    r   r   r   __table_args__r   r   r   r   r   r   r   r   r   r
   rz   r   r	   r   r   r   r   r   r8   r6   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r$   r%   r&   r   r      s   Mj+Dde0+z;WN
 *$t*<$X\XbXbcBtyyc#0d1CZP\E]hm#nIvdii n'4T.5ITY'ZHf^$Z"/$0GRW"XIvhX)'"a.5ID&/I)'"a.5ID&/I(Q%HCH*72q>EJE6'?J+GBNUKFF7OK$1'"a.'RU,$WL&/W -gq AL&+A-:8T;R-SJx)*S+GTBIvd|B"/"GM6$<G"/t"DM6$<D#041HYaY]YaYaYc#dJx d+9EFF8Er%   r   c                      e Zd ZU dZ e ed      dej                        Ze	ej
                     e
d<    e ed       ed      d      Ze	ej
                     e
d	<    e ed
d      d      Ze	e   e
d<    e ed
d      d      Ze	e   e
d<    e ed
d      d      Ze	e   e
d<    e ed
d      d      Ze	e   e
d<    e edd      d      Ze	e   e
d<    e ed
d       ed            Ze	e   e
d<    eee      Ze	e   e
d<    eee      Ze	e   e
d<    e ed       ej6                         d      Ze	e   e
d<   y)MarketSnapshotmarket_snapshotsTr   r   r   r   Fr   r   r   r   pricebidaskspreadr      
spread_pctr   r   
volume_24horderbook_bidsorderbook_asksr   r   r   recorded_atN)r   r   r    r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r	   r   r   r  r   r$   r%   r&   r   r      sS   &M)$t*<$X\XbXbcBtyyc#0d1CZP\E]hm#nIvdii n*72q>EJE6'?J(Q%HCH(Q%HCH+GBNUKFF7OK"/A"OJwO"/APS"UJwU#0#ENF4LE#0#ENF4LE$1(D2IZbZ^ZbZbZdlp$qK!qr%   r   c                      e Zd ZU dZ e ed      dej                        Ze	ej
                     e
d<    e ed       ed      d      Ze	ej
                     e
d	<    e ed
      d      Ze	e   e
d<    e edd      d      Ze	e   e
d<    e edd      d      Ze	e   e
d<    eed      Ze	e   e
d<    e ed      dd      Ze	e   e
d<   y)MarketTrademarket_tradesTr   r   r   r   Fr   r   2   trade_idr   r   r   quantityr   is_buyer_makerr   r   r   	traded_atN)r   r   r    r   r   r   r   r   r   r   r   r   r   r   r	  r   r   r   r   r
  r   r  r   r	   r  r   r$   r%   r&   r  r     s    #M)$t*<$X\XbXbcBtyyc#0d1CZP\E]hm#nIvdii n)&*uEHfSkE*72q>EJE6'?J -gb!nu MHfWoM#0%#HNF4LH"/$0GRW_c"dIvhdr%   r  c                   Z   e Zd ZU dZ e ed      dej                        Ze	ej
                     e
d<    e ed      dd      Ze	e   e
d	<    e ed
      d      Ze	e   e
d<    ee      Ze	ee      e
d<    eee      Ze	e   e
d<    eed      Ze	e   e
d<    e ed      d      Ze	e   e
d<    eed      Ze	e   e
d<    e ed       ej8                               Ze	e   e
d<    ed      Z e	e!d      e
d<    ed      Z"e	e!d      e
d<    ed      Z#e	e!d      e
d<   y )!Strategy
strategiesTr   r   r   d   Fr   r   r   r  r   strategy_typedescriptionr   
parameters
is_enabledr   z1.0.0current_versionfeature_flagr   r   r   strategyr   r   r   StrategyVersionversionsBacktestRunbacktest_runsN)$r   r   r    r   r   r   r   r   r   r   r   r   r   r   r  r   r  r   r   r   r  r   r  r   r  r  r	   r   r   r   r   r   r   r   r  r  r$   r%   r&   r  r     sF    M)$t*<$X\XbXbcBtyyc%fSk$OD&+O!.vbzE!JM6#;J)6t)<K&<,UDAJtA,WdCJtC#0W#MOVC[M!.w!EL&,E#041HYaY]YaYaYc#dJx d&2*&MGVDN#M0<J0WHfT+,-W1=Z1XM6$}-.Xr%   r  c                      e Zd ZU dZ eddd      fZ e ed      dej                        Z
eej                     ed<    e ed       ed	      d
      Zeej                     ed<    e ed       ed      d
      Zeej                     ed<    e ee      d
      Zee   ed<    eed
      Zee   ed<    e ee      d
      Zee   ed<    e edd       ed            Zee   ed<    e edd            Zeee      ed<    e edd            Zeee      ed<    eee      Z ee   ed<    eee      Z!ee   ed<    ee"d
      Z#ee$   ed<    ee      Z%eee      ed<    e e&d       e'jP                               Z)ee*   ed<    e+d      Z,ed   ed <    e+d      Z-ed!   ed"<    e+d#      Z.ee/d$      ed%<   y&)'r   r   idx_signals_symbol_createdr   r   Tr   r   r   r   Fr   strategies.idstrategy_idaction
confidence
risk_levelr   r   r   r   suggested_size	stop_losstake_profitsupporting_indicatorscontradicting_indicatorsmathematical_reasonensemble_scorer   r   r   r   r   r  r  signalr   r   N)0r   r   r    r   r   r   r   r   r   r   r   r   r   r   r   r!  r
   r0   r"  r   r#  r   r5   r$  r   r   r%  r&  r   r'  r   r   r(  r)  r   r*  r   r+  r	   r   r   r   r   r   r   r  r   r   r$   r%   r&   r   r      s   M8+|TVN)$t*<$X\XbXbcBtyyc#0d1CZP\E]hm#nIvdii n%243EzRaGbmr%sK		"s#0l1Ce#TFF< T+GeDJsD$1$y/E$RJy!R&3GBNGTWL&YNF7OY+8Q+HIvhw'(H-:72q>-JK)*J*7t*L6$<L-:5$-OfTlO'4TE'JJ,9',BNF8C=)B#041HYaY]YaYaYc#dJx d+9EFF8E#/y#IHfZ I$0$IFF4=!Ir%   r   c                   @   e Zd ZU dZ eddd      fZ e ed      dej                        Z
eej                     ed<    e ed       ed	      d
      Zeej                     ed<    e ed       ed            Zeeej                        ed<    e ee      d
      Zee   ed<    e ee      ej*                        Zee   ed<    e ee      ej0                        Zee   ed<    e ee      d
      Zee   ed<    e edd      d
      Zee   ed<    e edd            Zeee      ed<    e edd            Z eee      ed<    e edd            Z!eee      ed<    e edd            Z"eee      ed<    e edd            Z#eee      ed<    e edd       ed            Z$ee   ed<    e edd       ed            Z%ee   ed<    e e&d            Z'eee(      ed<    e e&d       dd!      Z)eee(      ed"<    e edd       ed            Z*ee   ed#<    e e&d            Z+eee(      ed$<    ee,e-      Z.ee-   ed%<    e e&d       d&      Z/eee(      ed'<    ee0      Z1eee(      ed(<    e e2d)       e3jh                         *      Z5ee6   ed<    e e2d)            Z7eee6      ed+<    e8d,      Z9ed-   ed.<    e8d,      Z:eed/      ed0<    e8d1,      Z;ee<d2      ed3<    e8d1,      Z=ee<d4      ed5<   y6)7r   r   idx_orders_status_createdstatusr   Tr   r   r   r   Fr   r   z
signals.id	signal_idsider   
order_typetrading_moder   r   r
  r   expected_pricefilled_pricer&  r'  r   
commissionslippager  exchange_order_idr   )r   r   client_order_idfilled_quantitystrategy_versionstrategy_params_snapshotr   correlation_idrejection_reasonr   r   	filled_atr   r   r   r   r,  order	OrderFillfills
OrderEventeventsN)>r   r   r    r   r   r   r   r   r   r   r   r   r   r   r   r0  r   r
   r=   r1  r?   r@   r2  rE   rM   r/  r(   r3  r   r
  r   r   r4  r5  r&  r'  r6  r7  r   r8  r   r9  r:  r;  r   r   r<  r>  r   r?  r	   r   r   r   r   r@  r   r   r,  rC  r   rE  r$   r%   r&   r   r     sl   M7<PRN)$t*<$X\XbXbcBtyyc#0d1CZP\E]hm#nIvdii n-:4;MzZfOg-hIvhtyy)*h+DOeLD&
L$1$y/9K[K[$\Jy!\"/[0A;K^K^"_FF;_(5d;6GRW(XL&%X -gb!nu MHfWoM'4WR^'DE6(7#$D0=gb!n0MNF8G,-M.;GBN.KL&'*+K+8Q+HIvhw'(H-:72q>-JK)*J"/APS"UJwU -gb!ngcl SHfWoS/<VC[/Ivhsm,I-:6":dZ^-_OVHSM*_'4WR^WUX\'ZOVG_Z.;F2J.GfXc]+G-:5$-OfTlO,9&*D,QNF8C=)Q.;D.AfXc]+A#041HYaY]YaYaYc#dJx d,9(D:Q,RIvhx()R+8DFF8D)5X)NFF8H%&N'37'KE6${#$K)5W)MFF4%&Mr%   r   c                      e Zd ZU dZ e ed      dej                        Ze	ej
                     e
d<    e ed       ed      d      Ze	ej
                     e
d	<    e ed
d      d      Ze	e   e
d<    e ed
d      d      Ze	e   e
d<    e ed
d       ed            Ze	e   e
d<    e ed       ej(                               Ze	e   e
d<    ed      Ze	d   e
d<   y)rB  order_fillsTr   r   r   	orders.idFr   order_idr   r   r   r
  r   r   r6  r   r   r@  rC  r   r   rA  N)r   r   r    r   r   r   r   r   r   r   r   r   rI  r   r   r   r
  r6  r	   r   r   r@  r   r   rA  r$   r%   r&   rB  rB  6  s    !M)$t*<$X\XbXbcBtyyc"/T0BJ{D[fk"lHfTYYl*72q>EJE6'?J -gb!nu MHfWoM"/APS"UJwU"/$0GX`X\X`X`Xb"cIvhc)AE6'?Ar%   rB  c                      e Zd ZU dZ e ed      dej                        Ze	ej
                     e
d<    e ed       ed      d      Ze	ej
                     e
d	<    e ed       ed
            Ze	eej
                        e
d<    e ee      ej"                        Ze	e   e
d<    e ee      d      Ze	e   e
d<    e edd      d      Ze	e   e
d<    e edd      d      Ze	e   e
d<    e edd      d      Ze	e   e
d<    e edd      d      Ze	e   e
d<    e edd            Ze	ee      e
d<    e edd       ed            Ze	e   e
d<    e edd       ed            Ze	e   e
d<    e ed       ej@                               Z!e	e"   e
d<    e ed            Z#e	ee"      e
d<    e$d      Z%e	d   e
d<   y )!r   r   Tr   r   r   r   Fr   r   rH  entry_order_idr   r/  r3  r   r   entry_pricer
  r&  r'  trailing_stopr   unrealized_pnlrealized_pnlr   r   	opened_at	closed_atr   r   r   N)&r   r   r    r   r   r   r   r   r   r   r   r   r   rK  r   r
   rw   rN   r/  r(   r3  r   rL  r   r
  r&  r'  rM  rN  rO  r	   r   r   rP  r   rQ  r   r   r$   r%   r&   r   r   C  s   M)$t*<$X\XbXbcBtyyc#0d1CZP\E]hm#nIvdii n2?T@RT^_jTk2lNF8DII./l%243GQ_QdQd%eFF>"e(5d;6GRW(XL&%X#0Q%#PKP -gb!nu MHfWoM!.wr1~!NIvgN#0Q%#PKP/<WR^/LM6(7+,L&3GBNGTWL&YNF7OY$1'"a.'RU,$WL&/W"/$0GX`X\X`X`Xb"cIvhc,9(D:Q,RIvhx()R+;GFF8Gr%   r   c                      e Zd ZU dZ e ed      dej                        Ze	ej
                     e
d<    e ed      dd      Ze	e   e
d	<    e ed
d       ed            Ze	e   e
d<    e ed
d       ed            Ze	e   e
d<    eed      Ze	e   e
d<    eed      Ze	e   e
d<    eed      Ze	e   e
d<    eed      Ze	e   e
d<    e ed
d       ed            Ze	e   e
d<    eed      Ze	e   e
d<    e edd       ed            Ze	e   e
d<    e edd       ed             Ze	e   e
d!<    e ed
d       ed"            Ze	e   e
d#<    eed      Ze	e   e
d$<    e ed
d       ed%            Z e	e   e
d&<    eed      Z!e	e   e
d'<    e e"d(       e#jH                         )      Z%e	e&   e
d*<   y+),RiskProfilerisk_profilesTr   r   r   r  Fr  r         z0.75r   max_risk_per_trade_pctz2.5max_daily_loss_pctr   max_trades_per_day   max_consecutive_lossesK   min_confidence_buy(   ensemble_sell_threshold   z0.25	kelly_captrailing_stop_enabledr   0.1max_spread_pctz0.5min_volume_ratioz3.0max_aggregate_risk_pctmax_open_positionsz0.8max_correlation
is_defaultr   r   r   N)'r   r   r    r   r   r   r   r   r   r   r   r   r   r   r   r   rW  rX  r   rY  r   r[  r]  r_  ra  r   rb  r   rd  re  rf  rg  rh  ri  r	   r   r   r   r   r$   r%   r&   rS  rS  X  s   #M)$t*<$X\XbXbcBtyyc%fSk$OD&+O.;GAqMSZ[aSb.cF7Oc*71wW\~*^w^&3GR&HsH*7*KF3KK&3GR&HsH+8"+MVC[M!.wq!}gfo!VIvgV*7*O6$<O&3GBNGTYN&[NF7O[(5gb!ngV[n(]fWo].;GAqMSZ[`Sa.bF7Ob&3GQ&GsG'4WQ]GTYN'[OVG_[,WeDJtD#041HYaY]YaYaYc#dJx dr%   rS  c                   (   e Zd ZU dZ edd      fZ e ed      dej                        Z
eej                     ed<    eed	d
      Zee   ed<    e edd      d	      Zee   ed<    e edd      d	      Zee   ed<    e edd       ed            Zee   ed<    e edd       ed            Zee   ed<    eed      Zee   ed<    eed      Zee   ed<    eed	      Zee   ed<    e ee            Zee e      ed<   y)DailyRiskStatedaily_risk_statetrading_dateuq_daily_risk_dater   Tr   r   r   Fr  r   r   r   starting_capitalcurrent_capitalr   r   	daily_pnlr   r`  daily_loss_pctr   r   rY   	is_lockedlock_reasonN)!r   r   r    r   r   r   r   r   r   r   r   r   r   r   rm  r   r   ro  r   rp  rq  rr  r   r   r   rY   r   rs  r   r
   r   rt  r   r$   r%   r&   rk  rk  n  s*   &M&~<PQSN)$t*<$X\XbXbcBtyyc!.te4!PL&,P(5gb!nu(UfWoU'4WR^e'TOVG_T!.wr1~ws|!TIvgT&3GBNGTWL&YNF7OY -gq AL&+A&3GQ&GsG+GUCIvd|C0=d:>N0OK,-Or%   rk  c                      e Zd ZU dZ e ed      dej                        Ze	ej
                     e
d<    e ed       ed      d      Ze	ej
                     e
d	<    e ed       ed
      d      Ze	ej
                     e
d<    e ee      d      Ze	e   e
d<    e ed      d      Ze	e   e
d<    e ed      d      Ze	e   e
d<    e edd      d      Ze	e   e
d<    e edd            Ze	ee      e
d<    e edd            Ze	ee      e
d<    e edd            Ze	ee      e
d<    e edd            Ze	ee      e
d<    e edd            Ze	ee      e
d<    e edd            Ze	ee      e
d<    e edd            Ze	ee      e
d<    e edd            Z e	ee      e
d<    e edd            Z!e	ee      e
d<    e edd       ed            Z"e	e   e
d <    e edd       ed!            Z#e	e   e
d"<    ee$e%      Z&e	e%   e
d#<    e ee'      e'jP                        Z)e	e'   e
d$<    ee*      Z+e	ee,      e
d%<    e ed       e-j\                         &      Z/e	e   e
d'<    e ed            Z0e	ee      e
d(<    e1d)      Z2e	d*   e
d+<    e1d,)      Z3e	e4d-      e
d.<   y/)0r  r  Tr   r   r   r   Fr   r!  r   r   r   r   
start_dateend_dater   r   initial_capitalfinal_capitalr   r`  total_return_pctmax_drawdownsharpe_ratiosortino_ratiowin_rateprofit_factorexpected_valuebuy_hold_returnrc  r   commission_pctz0.05slippage_pctmetricsr/  error_messager   r   completed_atr   r  r  backtest_runBacktestTradetradesN)5r   r   r    r   r   r   r   r   r   r   r   r   r!  r   r
   rz   r   r	   rv  r   rw  r   rx  r   ry  r   rz  r{  r|  r}  r~  r  r  r  r  r  r   r   r  r   rM   r/  r   r  r   r   r   r   r  r   r  r  r   r$   r%   r&   r  r  ~  s   #M)$t*<$X\XbXbcBtyyc%243EzRaGbmr%sK		"s#0d1CZP\E]hm#nIvdii n'4T.5ITY'ZHf^$Z#041HSX#YJx Y!.x/FQV!WHfXW'4WR^e'TOVG_T/<WR^/LM6(7+,L2?A2OfXg./O.;GBN.KL&'*+K.;GBN.KL&'*+K/<WR^/LM6(7+,L*7A*GHfXg&'G/<WR^/LM6(7+,L0=gb!n0MNF8G,-M1>wr1~1NOVHW-.N&3GBNGTYN&[NF7O[$1'"a.'RX/$ZL&/Z)%>GVD\>%243GQ_QgQg%hFF>"h+8+>M6(3-(>#041HYaY]YaYaYc#dJx d/<Xt=T/UL&(+,U#/#OHfZ O,8,WFF4()Wr%   r  c                      e Zd ZU dZ e ed      dej                        Ze	ej
                     e
d<    e ed       ed      d      Ze	ej
                     e
d	<    e ee      d      Ze	e   e
d
<    e edd      d      Ze	e   e
d<    e edd      d      Ze	e   e
d<    e edd      d      Ze	e   e
d<    e edd      d      Ze	e   e
d<    e edd      d      Ze	e   e
d<    e edd       ed            Ze	e   e
d<    e ed      d      Ze	e   e
d<    e ed      d      Ze	e   e
d<    e ed      d      Ze	e   e
d<    ed      Z e	d   e
d<   y )!r  backtest_tradesTr   r   r   zbacktest_runs.idFr   backtest_run_idr1  r   r   rL  
exit_pricer
  pnlr   r`  pnl_pctr   r   r6  r   
entry_time	exit_timer  exit_reasonr  r   r  r  N)!r   r   r    r   r   r   r   r   r   r   r   r   r  r
   r=   r1  r   rL  r   r  r
  r  r  r6  r	   r  r   r  r   r  r   r   r  r$   r%   r&   r  r    s}   %M)$t*<$X\XbXbcBtyyc)6tD7I:VhKity)zOVDII&z+DOeLD&
L#0Q%#PKP"/A"OJwO -gb!nu MHfWoM(Q%HCH,WR^eLGVG_L"/APS"UJwU#041HSX#YJx Y"/$0GRW"XIvhX,VBZ%HKH*6h*OL&'Or%   r  c                      e Zd ZU dZ e ed      dej                        Ze	ej
                     e
d<    e ee      ej                        Ze	e   e
d<    eed      Ze	e   e
d	<    eee      Ze	e   e
d
<    eee      Ze	e   e
d<    e ed       ed            Ze	eej
                        e
d<    e ed            Ze	ee      e
d<    eed      Ze	e   e
d<    e ed            Ze	ee      e
d<    eee      Ze	e   e
d<    eed      Z e	e   e
d<    e e!dd            Z"e	ee#      e
d<    e ed       e$jJ                          e$jJ                               Z&e	e   e
d<   y)	BotConfigbot_configsTr   r   r   r   r3  Fr   active_symbolsstrategy_weightszrisk_profiles.idrisk_profile_idr   paper_start_dateproduction_approvedproduction_approved_atstrategy_flagscircuit_breaker_activer   r   canary_capital)r   r   r   N)'r   r   r    r   r   r   r   r   r   r   r   r
   r(   r,   r3  r   r   r   r   r   r  r   r  r   r  r   r	   r  r   r  r  r  r  r   r  r   r   r   r   r$   r%   r&   r  r    s   !M)$t*<$X\XbXbcBtyyc(5d;6GQ\QdQd(eL&%e#0%#HNF4LH#0#ENF4LE%25$%GfTlG3@dASU_`rUs3tOVHTYY/0t3@SWAX3YfXh/0Y(5gu(MM9FxY]G^9_F8H#56_#0#ENF4LE+8%+PF4LP0=gb!n0MNF8G,-M#041HYaY]YaYaYcnvnrnvnvnx#yJx yr%   r  c                      e Zd ZU dZ edd      fZ e ed      dej                        Z
eej                     ed<    e ed       ed            Zeeej                        ed	<    e ed
      d      Zee   ed<    e ed      d      Zee   ed<    e ed            Zeeej                        ed<    ee      Zeee      ed<    ee      Zeee      ed<    e ed            Zeee      ed<    e ed            Zeee      ed<    e ed       ej:                               Zee   ed<    e d      Z!eed      ed<   y)r   r   idx_audit_logs_createdr   Tr   r   r   users.iduser_idr  Fr   r"  r  entity_type	entity_id	old_value	new_value-   
ip_addressr   
user_agentr   r   r   r   r   N)"r   r   r    r   r   r   r   r   r   r   r   r   r   r   r  r   r   r"  r   r  r  r   r  r   r  r  r  r	   r   r   r   r   r   r   r$   r%   r&   r   r     sf    M4lCEN)$t*<$X\XbXbcBtyyc+8d9KZXbMc+dGVHTYY'(d'seDFF3KD,VBZ%HKH-:4;M-NIvhtyy)*N(5e(<Ivhtn%<(5e(<Ivhtn%<(5fRj(AJx}%A(5fSk(BJx}%B#041HYaY]YaYaYc#dJx d%1%ND&&!
"Nr%   r   c                      e Zd ZU dZ edd      fZ e ed      dej                        Z
eej                     ed<    e ed      d	
      Zee   ed<    e ed      d	
      Zee   ed<    ee      Zeee      ed<    eed	
      Zee   ed<    eee      Zee   ed<    e ed       ej8                               Zee   ed<   y)ApiErrorr   idx_api_errors_createdr   Tr   r   r   r  Fr   servicer   endpointstatus_coder  r   request_contextr   r   N)r   r   r    r   r   r   r   r   r   r   r   r   r   r   r  r   r  r   r  r   r   r   r  r   r   r  r	   r   r   r   r   r$   r%   r&   r  r    s     M4lCEN)$t*<$X\XbXbcBtyyc(eDGVC[D)&+FHfSkF)6w)?K&?!.te!DM6#;D$1%$FOVD\F#041HYaY]YaYaYc#dJx dr%   r  c                      e Zd ZU dZ e ed      dej                        Ze	ej
                     e
d<    e ee      d      Ze	e   e
d<    e ed	      d      Ze	e   e
d
<    e ed      d      Ze	e   e
d<    eed      Ze	e   e
d<    eee      Ze	e   e
d<    eed      Ze	e   e
d<    e ed            Ze	ee      e
d<    e ed       ej>                               Z e	e   e
d<   y)NotificationnotificationsTr   r   r   Fr   channelr  
event_typer   titlemessager   payloadis_sentr   sent_atr   r   N)!r   r   r    r   r   r   r   r   r   r   r   r
   r   r  r   r  r   r  r   r  r   r   r  r   r  r   r	   r  r   r   r   r   r   r$   r%   r&   r  r    s   #M)$t*<$X\XbXbcBtyyc+8>Q9R]b+cGV'(c+F2JGJsG&vc{UCE6#;C(>GVC[>)%>GVD\>)'5AGVD\A*7$8O*PGVHX&'P#041HYaY]YaYaYc#dJx dr%   r  c                      e Zd ZU dZdZ e ed      dej                        Z	e
ej                     ed<    e ed      dd	      Ze
e   ed
<    e ee      d      Ze
e   ed<    eed      Ze
e   ed<    e ee      d      Ze
e   ed<    eed      Ze
e   ed<    ee      Ze
ee      ed<    eee      Ze
e   ed<    eee      Z e
e   ed<    eed      Z!e
e   ed<    eee      Z"e
e   ed<    e ee#            Z$e
ee#      ed<    e ed      d      Z%e
ee      ed<    e ed            Z&e
ee      ed<    e e'd       e(jR                         d      Z*e
e+   ed<   y)DecisionLogz<Immutable log of every trading decision with full reasoning.decision_logsTr   r   r   r   Fr  r   r   r"  r#  r$  r   was_executedblock_reasonr(  r)  r*  indicators_snapshotmarket_regimer   r=  r>  r;  r   r  r   N),r   r   r    __doc__r   r   r   r   r   r   r   r   r   r   r   r
   r0   r"  r   r#  r   r5   r$  r   r  r   r   r  r   r   r   r(  r)  r*  r  rP   r  r>  r;  r	   r   r   r   r   r$   r%   r&   r  r    s   F#M)$t*<$X\XbXbcBtyyc'r
U$OFF3KO#0l1Ce#TFF< T+GeDJsD$1$y/E$RJy!R!.w!FL&,F*7*=L&#'=*7t*L6$<L-:5$-OfTlO'4TE'JJ(5eT(JJ4A$|BT4UM6(<01U,9&*D,QNF8C=)Q.;F2J.GfXc]+G#041HYaY]YaYaYcko#pJx pr%   r  c                      e Zd ZU dZdZ eddd      fZ e ed      de	j                        Zee	j                     ed	<    e ed       ed
      d      Zee	j                     ed<    e ed            Zeee      ed<    e ed      d      Zee   ed<    e ed      d      Zee   ed<    eee      Zee   ed<    e ed       ej6                               Zee   ed<    ed      Zed   ed<   y)rD  z%Immutable order state transition log.order_eventsidx_order_events_order_createdrI  r   Tr   r   r   rH  Fr      from_status	to_statusr   causer   contextr   r   rE  r   r   rA  N) r   r   r    r  r   r   r   r   r   r   r   r   r   r   r   rI  r   r  r   r   r  r  r   r   r  r	   r   r   r   r   r   rA  r$   r%   r&   rD  rD    s	   /"M<j,WYN)$t*<$X\XbXbcBtyyc"/T0BJ{D[fk"lHfTYYl)6vbz)BK&B*6":FIvc{F&vc{UCE6#;C)%>GVD\>#041HYaY]YaYaYc#dJx d)BE6'?Br%   rD  c                   @   e Zd ZU dZ eddd      fZ e ed      dej                        Z
eej                     ed	<    e ed       ed
      d      Zeej                     ed<    e ed      d      Zee   ed<    eee      Zee   ed<    ee      Zeee      ed<    eed      Zee   ed<    e ed       ed            Zeeej                        ed<    e ed       ej<                               Zee    ed<    e!d      Z"ed   ed<   y)r  strategy_versionsr!  versionuq_strategy_versionr   Tr   r   r   r   Fr   r   r   r  	changelogr   r  
created_byr   r   r   r  r   r  r  N)#r   r   r    r   r   r   r   r   r   r   r   r   r   r   r!  r   r  r   r   r   r  r   r  r   r   r   r   r  r	   r   r   r   r   r   r  r$   r%   r&   r  r    s+   'M&}iF[\^N)$t*<$X\XbXbcBtyyc%243EzRaGbmr%sK		"s(eDGVC[D,UDAJtA'4T':Ivhsm$:+GTBIvd|B.;D<NPZ[ePf.gJx		*+g#041HYaY]YaYaYc#dJx d#/z#JHfZ Jr%   r  c                      e Zd ZU dZ edd      fZ e ed      dej                        Z
eej                     ed<    e ed      d	
      Zee   ed<    e ed      d	
      Zeej                     ed<    e ed      d	
      Zee   ed<    ee      Zeee      ed<    eed	
      Zee   ed<    e ed       ed            Zeeej                        ed<    e ed       ej4                               Zee   ed<   y)ConfigHistoryconfig_historyidx_config_history_createdr   Tr   r   r   r  Fr   r  r  r  
field_namer  r  r  
changed_byr   r   N)r   r   r    r   r   r   r   r   r   r   r   r   r   r   r  r   r  r  r   r  r   r  r   r  r	   r   r   r   r   r$   r%   r&   r  r  &  s   $M8,GIN)$t*<$X\XbXbcBtyyc,VBZ%HKH#0d1Ce#TIvdii T+F3K%HJsH'4T':Ivhsm$:*4%@Ivc{@.;D<NPZ[ePf.gJx		*+g#041HYaY]YaYaYc#dJx dr%   r  c                      e Zd ZU dZ e ed      dej                        Ze	ej
                     e
d<    e ed      d      Ze	e   e
d	<    e ed
      d      Ze	e   e
d<    eed      Ze	e   e
d<    eee      Ze	e   e
d<    eed      Ze	e   e
d<    e ed       ej2                         d      Ze	e   e
d<   y)	RiskEventrisk_eventsTr   r   r   r  Fr   r  r   severityr  r   r  resolvedr   r  r   N)r   r   r    r   r   r   r   r   r   r   r   r   r  r   r  r   r  r   r   r  r   r  r   r	   r   r   r   r   r$   r%   r&   r  r  4  s    !M)$t*<$X\XbXbcBtyyc+F2JGJsG)&*uEHfSkE(>GVC[>)%>GVD\>*7EBHfTlB#041HYaY]YaYaYcko#pJx pr%   r  c                      e Zd ZU dZ e ed      dej                        Ze	ej
                     e
d<    e ee      d      Ze	e   e
d<    eee	      Ze	e   e
d
<    eed	      Ze	e   e
d<    e ed            Ze	ee      e
d<    e ed       ed            Ze	eej
                        e
d<    e ed       ej6                               Ze	e   e
d<   y)CircuitBreakerEventcircuit_breaker_eventsTr   r   r   Fr   reasonr   r  r   r   reset_atr  reset_byr   r   N)r   r   r    r   r   r   r   r   r   r   r   r
   rW   r  r   r   r  r   r   r   r	   r  r   r   r   r  r   r   r   r$   r%   r&   r  r  @  s    ,M)$t*<$X\XbXbcBtyyc+8>R9S^c+dFF'(d)%>GVD\>+GTBIvd|B+849P+QHfXh'(Q,9$t:LjYcNd,eHfXdii()e#041HYaY]YaYaYc#dJx dr%   r  c                   |   e Zd ZU dZ eddd      fZ e ed      dej                        Z
eej                     ed<    e ed	      d
      Zee   ed<    e ee      d
      Zee   ed<    eee      Zee   ed<    eee      Zee   ed<    e ed       ej4                               Zee   ed<   y)MarketRegimeLogmarket_regime_logsidx_regime_symbol_createdr   r   Tr   r   r   r   Fr   regimer   
indicatorsactive_strategiesr   r   N)r   r   r    r   r   r   r   r   r   r   r   r   r   r   r   r   r
   rP   r  r   r   r  r   r  r	   r   r   r   r   r$   r%   r&   r  r  L  s    (M7<PRN)$t*<$X\XbXbcBtyyc'r
UCFF3KC#0l1Ce#TFF< T,UDAJtA&3E4&Hvd|H#041HYaY]YaYaYc#dJx dr%   r  c                       e Zd ZU dZ e ed      dej                        Ze	ej
                     e
d<    e ed      dd      Ze	e   e
d	<    e ed
      d      Ze	e   e
d<    edee      Ze	e   e
d<   y)BotHeartbeatbot_heartbeatsTr   r   r   r  F)r   r   worker_namer   r   	last_seenmetadatar   heartbeat_metadataN)r   r   r    r   r   r   r   r   r   r   r   r   r  r   r	   r  r   r   r   r  r$   r%   r&   r  r  X  s    $M)$t*<$X\XbXbcBtyyc,VBZ%PTUKU"/$0GRW"XIvhX'4ZPT'UtUr%   r  )Ir  enumr   r   r   decimalr   typingr   
sqlalchemyr   r   r	   r
   r   r   r   r   r   r   r   r   sqlalchemy.dialects.postgresqlr   r   sqlalchemy.ormr   r   r   app.core.databaser   r   r   r(   r0   r5   r=   r?   rE   rP   rW   ri   rw   rz   r   r   r   r   r   r   r   r  r  r   r   rB  r   rS  rk  r  r  r  r   r  r  r  rD  r  r  r  r  r  r  r$   r%   r&   <module>r     s   !   #      7 > > "sDII #tyy 3		 TYY TYY 
 TYY  	#tyy 	3		 3		 &c499 &S$)) 
S$)) #tyy S$)) dii O4 O PT P,FT F6rT r 	e$ 	eYt Y$JT J0 ND  NF
B 
BHt H*e$ e,PT P X$ X>PD P&z z$Ot O$
et 
ee4 eq$ q,C C"Kd K eD e	q 	q	e$ 	e	ed 	eV4 Vr%   