Team Ai
Apppublic

Deepvest/ProfilingAI

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
realtime_monitor.cpython-310.pyc218 linesDownload Raw Back to __pycache__
1o

2�G�g��@s�ddlmZddlZddlZddlZddlZddlmZddlmZm	Z	ddl3mZmZm
Z
mZmZddlmZmZddlZddlZddlmZmZmZmZdd	lmZmZdd4lm Z ddl!m"Z"ddl#m$Z$d
dl%m&Z&m'Z'm(Z(m)Z)eGdd�d��Z*eGdd�d��Z+eGdd�d��Z,eGdd�d��Z-eGdd�d��Z.Gdd�de�Z/Gdd�de/�Z0Gdd�d�Z1			 	d)d!ed"e
ed#e2d$e3d%e
ee3e2fd&e1fd'd(�Z4dS)*�)�dequeN)�	dataclass)�datetime�	timedelta)�Dict�List�Optional�Set�Any)�ABC�abstractmethod�)�5MarketData�PortfolioOptimizer�MarketAnalyzerProtocol�BacktestEngine)�PortfolioOptimizerImpl�OptimizationConstraints)�MarketAnalyzerImpl)�PersonalProfile)�MLEnhancedAnalyzer�)�MarketUpdate�ExponentialMovingVolatility�
VolumeTracker�SpreadAnalyzerc@sZeZdZUdZeed<eed<eed<eed<eeed<eed<eed<d	Z	e6ed7<d	S)�PortfolioAlertzPortfolio alert information�	timestamp�8alert_type�severity�message�affected_assets�	threshold�
current_valueN�metadata)�__name__�9__module__�__qualname__�__doc__r�__annotations__�strr�floatr$r�r,r,�B/Users/sandrine/Deepvest_system/src/monitoring/realtime_monitor.pyr)s10rc@sbeZdZUdZeed<eed<eeefed<eed<eeefed<e	ed<eeefed<d	S)11�RebalanceSignalzRebalancing signal informationrZtrigger_typeZassets_to_tradeZurgencyZexpected_impact�validity_period�constraintsN)12r%r&r'r(rr)r*rr+rr,r,r,r-r.5s13r.c@sReZdZUdZeed<eed<eeefed<eed<eed<eeefed<dS)	�PortfolioAdjustmentz(Information d'ajustement de portefeuiller�adjustment_type�assets_affected�reason�priority�estimated_impactN)	r%r&r'r(rr)r*rr+r,r,r,r-r1@s14r1c@s:eZdZUdZeed<eed<eed<eed<eed<dS)�
ProfileChangez&Changement dans le profil investisseurr�change_type�	old_value�	new_valueZimpact_scoreN)	r%r&r'r(rr)r*r15r+r,r,r,r-r7Js16r7c@s:eZdZUdZeed<eed<eeed<eeed<dS)�DynamicMonitorStateuÉtat du moniteur dynamique�last_profile_check�last_market_check�pending_adjustments�adaptation_historyN)	r%r&r'r(rr)rr1rr,r,r,r-r;Ss17r;c@s^eZdZdZedd��Zedeefdd��Zedeefdd��Z	ed	ed18e19fdd��Zd
S)�DataStreamHandlerz,Abstract base class for data stream handlersc���dS�Nr,)�selfr,r,r-�connectb��zDataStreamHandler.connect�symbolsc�rArBr,�rCrFr,r,r-�	subscribefrEzDataStreamHandler.subscribec�rArBr,rGr,r,r-�unsubscribejrEzDataStreamHandler.unsubscriber �returnc�rArBr,)rCr r,r,r-�process_messagenrEz!DataStreamHandler.process_messageN)r%r&r'r(rrDrr*rHrIrrKr,r,r,r-r@_s20r@c@s\eZdZdZdefdd�Zdd�Zdeefdd	�Zdeefd21d�Z	ded
e22fdd�ZdS)�WebSocketDataHandlerz/WebSocket implementation of data stream handler�urlcCs||_d|_t�|_dSrB)rM�	websocket�set�subscribed_symbols)rCrMr,r,r-�__init__wszWebSocketDataHandler.__init__c23�sZ�zt�|j�IdH|_t�d|j���WdSty,}z	t�d|����d}~ww)zEstablish WebSocket connectionNzConnected to WebSocket at z Failed to connect to WebSocket: )�24websocketsrDrMrN�logging�info�	Exception�error�rC�er,r,r-rD|s���zWebSocketDataHandler.connectrFc�sH�|js|��IdHd|d�}|j�t�|��IdH|j�|�dS)z$Subscribe to market data for symbolsNrH��actionrF)rNrD�send�json�dumpsrP�update)rCrFZsubscribe_messager,r,r-rH�s��zWebSocketDataHandler.subscribec�s>�|jrd|d�}|j�t�|��IdH|j�|�dSdS)z(Unsubscribe from market data for symbolsrIrYN)rNr[r\r]rP�difference_update)rCrFZunsubscribe_messager,r,r-rI�s���z WebSocketDataHandler.unsubscriber rJc�sN�t�|�}tt�|d�|d|d|d|d|d|�d�|�d�d	�S)25z"Process incoming WebSocket messager�symbol�price�volume�bid�ask�26trade_size�trade_condition)r�asset_idrarbrcrdrerf)r\�loadsrr�
fromtimestamp�get)rCr �datar,r,r-rK�s�27�z$WebSocketDataHandler.process_messageN)r%r&r'r(r*rQrDrrHrIrrKr,r,r,r-rLts	
rLc
@sneZdZdZ					d|dededededee	e28ff29dd	�Z	d}d30ee	e31fdede
efd
d�Zdd�Zdedejfdd�Zdefdd�Zde	de32de33fdd�Zdd�Zdd�Zd d!�Zdeefd"d#�Zd$eefd%d&�Zdee	effd'd(�Zd)d*�Z d+e!de"fd,d-�Z#d.d/�Z$de	d0e34fd1d2�Z%de	d3e35fd4d5�Z&d6ee	e36fdee'fd7d8�Z(d9e)fd:d;�Z*dee	e37ffd<d=�Z+de38fd>d?�Z,d@e39de40fdAdB�Z-d@e41de42fdCdD�Z.de43fdEdF�Z/de44fdGdH�Z0de45fdIdJ�Z1de46fdKdL�Z2de3j4fdMdN�Z5de3j4fdOdP�Z6de3j4fdQdR�Z7dSee	efdee	effdTdU�Z8d$ee	effdVdW�Z9dXe	dYe47de
e!fdZd[�Z:dXe	dYe48fd\d]�Z;d^ed+e!fd_d`�Z<d+e!de"fdadb�Z=d+e!de"fdcdd�Z>d+e!de"fdedf�Z?d+e!fdgdh�Z@d+e!deefdidj�ZAdke	de49fdldm�ZBdke	d^e50de51fdndo�ZCdpeedeefdqdr�ZDdsede52fdtdu�ZEdsede53fdvdw�ZFd+e!fdxdy�ZGd+e!fdzd{�ZHdS)~�RealTimeMonitorz%Real-time portfolio monitoring systemN�portfolio_optimizer�market_analyzer�backtest_engine�data_handler�alert_thresholdscCs�t|t�s	td��||_|durt�}t|d�|_n||_||_||_|p&i|_	t�|_54||_tt
��t
��ggd�|_i|_tdd�|_tdd�|_i|_i|_d|_i|_td�|_tdd�|_td	d55�|_dS)Nz>portfolio_optimizer must be instance of PortfolioOptimizerImpl)�ml_analyzer)r<r=r>r?i�)�maxleng�G�z�?�)�lookback_periods�ffffff�?)�decay_factor)�56isinstancer�	TypeErrorrmrrrnrorprqrr�personal_profilerr;r�now�
dynamic_state�current_positionsr�position_history�alertsZmarket_impact_models�risk_metrics�last_rebalance_time�initial_positionsr�realized_volatilityr�volume_trackerr�spread_analyzer)rCrmrnrorprqrzrrr,r,r-rQ�s857	58�59zRealTimeMonitor.__init__�	portfolior0�personal_profilec60�s��|��|_|��|_||_||_t|���}z"|j�|�IdHt	�61|��|��|�
�|��|���IdHWdStyN}z	t�d|����d}~ww)z:Start real-time portfolio monitoring with personal profileNzError in monitoring: )�copyr}r��current_profiler0�list�keysrprH�asyncio�gather�_market_data_loop�_risk_monitoring_loop�_rebalancing_check_loop�_alert_generation_loop�_dynamic_monitoring_looprUrSrV)rCr�r0r�rFrXr,r,r-�start_monitoring�s(�6263���z RealTimeMonitor.start_monitoringc64�s��	zB|jj��IdH}|j�|�IdH}|�|�}|j�|�IdH}|j�|�|j	�|�|j65�|�|j|jvrC|�
|�IdHWn"tyf}zt�d|���t�d�IdHWYd}~nd}~wwq)zProcess incoming market dataTNzError in market data loop: r)rprN�recvrK�_prepare_market_datarn�analyze_market_conditionsr�r^r�r�rgr}�_update_position_metricsrUrSrVr��sleep)rCr r^�market_data�market_conditionsrXr,r,r-r��s&�66����z!RealTimeMonitor._market_data_loopr^rJc67Csnz|jg|jg|jg|jg|jgd�}t�|�WSty6}zt�	d|���t��WYd}~Sd}~ww)z Prepare market data for analysis)rrarbrcrdzError preparing market data: N)68rrarbrcrd�pd�	DataFramerUrSrV)rCr^rkrXr,r,r-r�s���z$RealTimeMonitor._prepare_market_datac69�s��z)|j|j}||j}|j�|j|j||j|d��|�|j||j�IdHWdStyE}zt�	d|���WYd}~dSd}~ww)z Update position tracking metrics)rr`�positionra�valueNz!Error updating position metrics: )70r}rgrar~�appendr�_check_position_riskrUrSrV)rCr^r�r#rXr,r,r-r�'s �71�	��z(RealTimeMonitor._update_position_metricsr`r#rac72�s��z@|j�|d�|}|dkrWdS|||}||j�dd�kr*|�||�IdH||j�dd�kr?|�||�IdHWdSWdSty\}zt�d|���WYd}~dSd}~ww)z'Check position-specific risk thresholdsrN�	stop_loss皙�������take_profit皙�����?zError checking position risk: )r�rjrq�_generate_stop_loss_alert�_generate_take_profit_alertrUrSrV)rCr`r#ra�
initial_value�loss_pctrXr,r,r-r�<s����z$RealTimeMonitor._check_position_riskc73�s��	z|��IdH}|�|�}||_|j�|�t�d�IdHWn"tyC}zt�	d|���t�d�IdHWYd}~nd}~wwq)zMonitor portfolio risk metricsTN�zError in risk monitoring: r)74�_calculate_risk_metrics�_check_risk_thresholdsr�r�extendr�r�rUrSrV)rCr�rrXr,r,r-r�Ps�75���z%RealTimeMonitor._risk_monitoring_loopc76�s��	z|��IdH}|r|�|�IdHt�d�IdHWn"ty?}zt�d|���t�d�IdHWYd}~nd}~wwq)zCheck for rebalancing needsTN�<zError in rebalancing check: r)Z_check_rebalancing_needs�_execute_rebalancingr�r�rUrSrV)rC�signalrXr,r,r-r�fs����z'RealTimeMonitor._rebalancing_check_loopc77�s��	z9|jr|jr|��IdH}|r|�|�IdH|��IdH}|r+|�|�IdH|��IdHt�d�IdHWn"t	y]}zt78�d|���t�d�IdHWYd}~nd}~wwq)z&Surveillance dynamique du portefeuilleTNr�zError in dynamic monitoring: r�)rzr��_check_profile_changes�_handle_profile_changes�_check_market_changes�_handle_market_changes�_process_pending_adjustmentsr�r�rUrSrV)rCZprofile_changesZmarket_changesrXr,r,r-r�ws$����z(RealTimeMonitor._dynamic_monitoring_loopc79�sf�z|j�|j�IdH}|rt��|j_|WSty2}zt�	d|���gWYd}~Sd}~ww)u4Détecte les changements dans le profil investisseurNz Error checking profile changes: )80rzZdetect_changesr�rr{r|r<rUrSrV)rC�changesrXr,r,r-r��s���z&RealTimeMonitor._check_profile_changesr�c�s8�|D]}|�|�}|r|jj�|�|�||�qdS)u*Gère les changements de profil détectésN)Z_create_profile_adjustmentr|r>r��_log_adaptation)rCr��change�81adjustmentr,r,r-r��s�82��z'RealTimeMonitor._handle_profile_changesc83�sl�z|j��IdH}|�|�}|rt��|j_|WSty5}zt�	d|���iWYd}~Sd}~ww)uEDétecte les changements significatifs dans les conditions de marchéNzError checking market changes: )84rnZanalyze_current_conditions�"_detect_significant_market_changesrr{r|r=rUrSrV)rCZcurrent_conditionsr�rXr,r,r-r��s�85��z%RealTimeMonitor._check_market_changesc�s��|jjdd�D]B}z&|�|�IdHr0|�|�IdH|jj�|�|jj�t��|dd��Wq	t	yK}zt86�d|���WYd}~q	d}~wwdS)z!Traite les ajustements en attenteNT)rr��successzError processing adjustment: )r|r>�_validate_adjustment�_execute_adjustment�remover?r�rr{rUrSrV)rCr�rXr,r,r-r��s$������z,RealTimeMonitor._process_pending_adjustmentsr�c87�s��z'|�|�IdH}|sWdS|�|�IdH}|sWdS|�|�}|s&WdSWdStyC}zt�d|���WYd}~dSd}~ww)u)Valide un ajustement avant son exécutionNFTzError validating adjustment: )�_check_risk_constraints�_check_liquidity_constraints�_check_adjustment_costrUrSrV)rCr�Z88risk_checkZliquidity_checkZ89cost_checkrXr,r,r-r��s"�90��z$RealTimeMonitor._validate_adjustmentc91�s��	z|jr|j��}|�|�IdH|jst�d�IdHWn"tyA}zt�d|���t�d�IdHWYd}~nd}~wwq)zGenerate and process alertsTNrzError in alert processing: )r�popleftZ_process_alertr�r�rUrSrV)rC�alertrXr,r,r-r��s�92����z&RealTimeMonitor._alert_generation_loopr�c93��H�tt��ddd|�d|d�d�|g|j�dd�|d�}|j�|�d	S)94zGenerate stop loss alertr��highzStop loss triggered for �: �.2%z lossr��rrrr r!r"r#N�rrr{rqrjrr�)rCr`r�r�r,r,r-r�����	z)RealTimeMonitor._generate_stop_loss_alert�95profit_pctc96�r�)97zGenerate take profit alertr��lowzTake profit triggered for r�r�z gainr�r�Nr�)rCr`r�r�r,r,r-r��r�z+RealTimeMonitor._generate_take_profit_alertr�cCs�g}|��D]B\}}||jvrH|j|}t|�|krHtt��|�d�t|�|dkr,dnd|�d|d�d|d��t|j���||d�}|�	|�q|S)	z!Check for risk threshold breachesZ_breachg�?r��mediumz exceeded threshold: �.2fz vs r�)98�itemsrq�absrrr{r�r}r�r�)rCr�r�metricr�r"r�r,r,r-r��s"99100�101	�z&RealTimeMonitor._check_risk_thresholdsr�c102�s��z,t��|j|jkrt�d�WdS|�|�}|D]103}|�|�IdHqt��|_WdSt	yB}z	t�104d|����d}~ww)zExecute rebalancing tradeszRebalancing signal expiredNzError executing rebalancing: )rr{rr/rS�warningZ_generate_trade_schedule�_execute_trader�rUrV)rCr�Ztrade_schedule�traderXr,r,r-r�s�105106��z$RealTimeMonitor._execute_rebalancingc107�s��z/|��}|j��|�d�IdH|�d�IdH|��IdH|��IdH|��|��|d�}|WSt	yL}zt108�d|���iWYd}~Sd}~ww)z Calculate real-time risk metricsrvN)r��var_95�es_95Zportfolio_beta�tracking_error�liquidity_scoreZconcentration_risk�portfolio_valuez Error calculating risk metrics: )�_calculate_portfolio_valuer��get_volatility�_calculate_var�_calculate_expected_shortfall�_calculate_portfolio_beta�_calculate_tracking_error�_calculate_liquidity_score�_calculate_concentration_riskrUrSrV)rCr��metricsrXr,r,r-r�,s$����z'RealTimeMonitor._calculate_risk_metricsc109Cs~z#d}|j��D]\}}|jr|jd�dd�nd}|||7}q|WSty>}zt�d|���WYd}~dSd}~ww)z!Calculate current portfolio valuer�����raz#Error calculating portfolio value: N�)r}r�r~rjrUrSrV)rC�total_valuer`r��110last_pricerXr,r,r-r�As��z*RealTimeMonitor._calculate_portfolio_value�confidence_levelc111�sn�z|��}t|�dkrWdStt�|d|d��WSty6}zt�d|���WYd}~dSd}~ww)zCalculate Value at Riskr
r�r�dzError calculating VaR: N)�_get_historical_returns�lenr+�np�112percentilerUrSrV)rCr��returnsrXr,r,r-r�Ms���zRealTimeMonitor._calculate_varc113�sz�z |��}t|�dkrWdS|�|�IdH}t|||k���WSty<}zt�d|���WYd}~dSd}~ww)z.Calculate Expected Shortfall (Conditional VaR)r
r�Nz&Error calculating Expected Shortfall: )r�r�r�r+�meanrUrSrV)rCr�r��varrXr,r,r-r�Xs���z-RealTimeMonitor._calculate_expected_shortfallc114�s��z7|��}|��IdH}t|�dkst|�dkrWdSt�||�dd}t�|�}|dkr6t||�WSdWStyS}zt�	d|���WYd}~dSd}~ww)zCalculate portfolio betaNr
��?rrz"Error calculating portfolio beta: )115r��_get_market_returnsr�r��covr�r+rUrSrV)rC�portfolio_returns�market_returns�116covariance�market_variancerXr,r,r-r�ds�117��z)RealTimeMonitor._calculate_portfolio_betac118�s��z+|��}|��IdH}t|�dkst|�dkrWdS||}tt�|�t�d��WStyG}zt�	d|���WYd}~dSd}~ww)zCalculate tracking errorNr
r���z"Error calculating tracking error: )119r��_get_benchmark_returnsr�r+r��std�sqrtrUrSrV)rCr��benchmark_returnsZ
tracking_diffrXr,r,r-r�us���z)RealTimeMonitor._calculate_tracking_errorc120Cs�z)|j��}|j��}|�dd�|�dd�}dd|�dd�}t||d�WStyD}zt�d|���WYd}~d	Sd}~ww)121z#Calculate portfolio liquidity score�averagerr�r�normalized_spreadr
z#Error calculating liquidity score: N��?)	r��get_volume_profiler��get_spread_metricsrjr+rUrSrV)rCZvolume_metrics�spread_metrics�volume_score�spread_scorerXr,r,r-r��s122123��z*RealTimeMonitor._calculate_liquidity_scorec124s�z5|����dkrWdS�fdd�t|j��|jd�dd�gt|j��D�}tdd�|D��}t|�WSt	yP}zt125�d	|���WYd126}~dSd127}~ww)z&Calculate portfolio concentration riskrr�csg|]128\}}||��qSr,r,)�.0�posra�r�r,r-�129<listcomp>�s�zARealTimeMonitor._calculate_concentration_risk.<locals>.<listcomp>r�racss�|]}||VqdSrBr,)r�wr,r,r-�	<genexpr>���z@RealTimeMonitor._calculate_concentration_risk.<locals>.<genexpr>z&Error calculating concentration risk: N)r��zipr}�valuesr~rjr��sumr+rUrSrV)rC�weightsZhhirXr,rr-r��s 130131��132��z-RealTimeMonitor._calculate_concentration_riskc133Cs�z#t|j�dkrt�g�WSdd�|jD�}t�|�|dd�}|WStyB}zt�d|���t�g�WYd}~Sd}~ww)z Get historical portfolio returnsr
cSsg|]}|d�qS)r�r,)r�pr,r,r-r��z;RealTimeMonitor._get_historical_returns.<locals>.<listcomp>Nr�z"Error getting historical returns: )r�r~r��array�diffrUrSrV)rCrr�rXr,r,r-r��s��z'RealTimeMonitor._get_historical_returnsc134��\�z
t�dgt|����WSty-}zt�d|���t�g�WYd}~Sd}~ww)z!Get market returns for comparison�-C��6?zError getting market returns: N�r�rr�r�rUrSrVrWr,r,r-r������z#RealTimeMonitor._get_market_returnsc135�r)z$Get benchmark returns for comparisonrz!Error getting benchmark returns: NrrWr,r,r-r��rz&RealTimeMonitor._get_benchmark_returns�136conditionsc137Cs�z4i}t|d�r/|��D]"\}}||jvr.||j|}t|�|j�|�d�d�kr.|||<q||_|WStyP}zt�d|���iWYd}~Sd}~ww)z/Detect significant changes in market conditions�previous_conditions�_change皙�����?z Error detecting market changes: N)	�hasattrr�rr�rqrjrUrSrV)rCrr��keyr�r�rXr,r,r-r��s 138139���z2RealTimeMonitor._detect_significant_market_changesc140�s��z$|��D]\}}|�||�}|r"|jj�|�|�||�IdHqWdSty@}zt�d|���WYd}~dSd}~ww)z!Handle significant market changesNzError handling market changes: )	r��_create_market_adjustmentr|r>r��_generate_market_change_alertrUrSrV)rCr�r8�change_valuer�rXr,r,r-r��s�����z&RealTimeMonitor._handle_market_changesr8rc141Cstztt��did|�d|d��t|�dkrdnddd	id142�WSty9}zt�d|���WYd}~dSd}~ww)
z2Create portfolio adjustment based on market change�
market_changezMarket change: � = r�r�r�r��expected_returnr�)rr2r3r4r5r6z"Error creating market adjustment: N)r1rr{r�rUrSrV)rCr8rrXr,r,r-r�s���z)RealTimeMonitor._create_market_adjustmentc143�s��z2tt��dt|�dkrdndd|�d|d��t|j���|j�|�d�d	�|d144�}|j	�145|�WdStyN}zt�
d|���WYd}~dSd}~ww)
z,Generate alert for significant market changerr�r�r�z$Significant market change detected: r r�rrr�z&Error generating market change alert: N)rrr{r�r�r}r�rqrjrr�rUrSrV)rCr8rr�rXr,r,r-r�s ��	��z-RealTimeMonitor._generate_market_change_alertr�c146Csfz|jj�t��t|�|j|j��d��WdSt	y2}zt147�d|���WYd}~dSd}~ww)zLog portfolio adaptation)rr�r��portfolio_statezError logging adaptation: N)r|r?r�rr{r*�__dict__r}r�rUrSrV)rCr�r�rXr,r,r-r�s���zRealTimeMonitor._log_adaptationc	148�s��z@|j��}|j��D]\}}||vr|||7<q|��IdH}|��D]\}}||jvr>t|�|j|kr>WdSq(WdSty\}zt�	d|���WYd}~dSd}~ww)z%Check risk constraints for adjustmentNFTz!Error checking risk constraints: )149r}r�r3r�r�rqr�rUrSrV)	rCr�Ztest_positions�assetr�r�r�r�rXr,r,r-r�
s&�150�151���z'RealTimeMonitor._check_risk_constraintsc152�s��z7tdd�|j��D��}|j��}|j��}d|vr)||d}|dkr)WdSd|vr6|ddkr6WdSWdStyS}zt�	d	|���WYd153}~dSd154}~ww)u9Vérifie les contraintes de liquidité pour un ajustementcss�|]}t|�VqdSrB)r�)rr�r,r,r-r(r	z?RealTimeMonitor._check_liquidity_constraints.<locals>.<genexpr>r�rFr��{�G�z�?Tz&Error checking liquidity constraints: N)155rr3rr�r�r�r�rUrSrV)rCr�Ztotal_volume�volume_profilerZvolume_ratiorXr,r,r-r�$s$�156157��z,RealTimeMonitor._check_liquidity_constraintsc158Cs�z7d}|j��D]"\}}|�|�}|j���dd�}t|�|}||d}||7}q|��}	||	}159|160dkWStyR}zt	�161d|���WYd}~dSd}~ww)u3Vérifie si le coût de l'ajustement est acceptablerr������MbP?g{�G�zt?z Error checking adjustment cost: NF)r3r��_get_current_pricer�r�rjr�r�rUrSrV)rCr��162total_costr$r�ra�spreadZtrade_valueZtransaction_costr�Z163cost_ratiorXr,r,r-r�>s 164165166��z&RealTimeMonitor._check_adjustment_costc167�s��z-|�|�}|D]}|�|�IdH}|s!t�d|���WdSq	|�|�|�|�WdStyI}zt�d|���WYd}~dSd}~ww)u&Exécute un ajustement du portefeuilleNzFailed to execute trade: FTzError executing adjustment: )�_create_execution_planr�rSrV�_update_portfolio_state�_log_adjustment_executionrU)rCr��execution_planr�r�rXr,r,r-r�Vs"�168�169170��z#RealTimeMonitor._execute_adjustmentc171Cs�zAg}|j��D]1\}}t|�|�|�kr!|�||�}|�|�q||d|�||�t��t	dd�d�}|�172|�q|�|�}|WSty]}zt
�d|���gWYd}~Sd}~ww)u4Crée un plan d'exécution optimal pour l'ajustementZmarketr)�hours)r$�size�typeZprice_limit�valid_untilzError creating execution plan: N)r3r�r��_get_max_trade_sizeZ_split_trader��_calculate_price_limitrr{rr��_optimize_execution_orderrUrSrV)rCr�r.r$r�Z173sub_tradesr�rXr,r,r-r+ns(174�175��z&RealTimeMonitor._create_execution_planr$c176Cs|z|j��}|�dd�}|j��}|d}|dkr|d9}|WSty=}zt�d|���td�WYd}~Sd}~ww)	u4Détermine la taille maximale de trade pour un actifr�rrr�r�z"Error calculating max trade size: �infN)	r�r�rjr�r�rUrSrVr+)rCr$r&�177avg_volume�178volatilityZ179base_limitrXr,r,r-r3�s180181��z#RealTimeMonitor._get_max_trade_sizec182Cs�z$|�|�}|j���dd�}|dkr|d|dWS|d|dWSty?}zt�d|���WYd}~dSd}~ww)	z'Calcule la limite de prix pour un trader�r'rrr
zError calculating price limit: Nr�)r(r�r�rjrUrSrV)rCr$r�Z
current_pricer*rXr,r,r-r4�s183��z&RealTimeMonitor._calculate_price_limit�tradesc184Cs�z*g}|D]}|�|�}|�|�}||}|�||f�q|jdd�dd�|D�WStyF}zt�d|���|WYd}~Sd}~ww)u(Optimise l'ordre d'exécution des tradesT)�reversecSsg|]\}}|�qSr,r,)r�_r�r,r,r-r�rz=RealTimeMonitor._optimize_execution_order.<locals>.<listcomp>z"Error optimizing execution order: N)�_estimate_market_impact�_calculate_urgency_scorer��sortrUrSrV)rCr9Z
scored_tradesr�Z
market_impact�
urgency_score�scorerXr,r,r-r5�s185186��z)RealTimeMonitor._optimize_execution_orderr�c	187Cs�z3t|d�}|j���dtd��}|dkr||nd}dt�|�}|j��}|d|}t	|d�WSt188yN}zt�d|���WYd	}~dSd	}~ww)189u)Estime l'impact sur le marché d'un trader0r�r6rrrr%z Error estimating market impact: N)
r�r�r�rjr+r�r�r�r��minrUrSrV)	rCr�r0Zdaily_volume�participation_rate�base_impactr8�impactrXr,r,r-r<�s190��z'RealTimeMonitor._estimate_market_impactc191Cs�z,|dt����d}tt|d�|�|d�d�}d|d|d}t|d�WStyG}zt�d|���WYd	}~dSd	}~ww)192z(Calcule un score d'urgence pour un trader2ir0r$rr�r�z!Error calculating urgency score: N)	rr{�
total_secondsrAr�r3rUrSrV)rCr�Ztime_to_expiryZsize_factorr?rXr,r,r-r=�s ��z(RealTimeMonitor._calculate_urgency_scorec193Cs�z5|j��D]\}}||jvr|j||7<q||j|<qi|_|j�t��|j��t	|�d��WdSt194yP}zt�d|���WYd}~dSd}~ww)u8Met à jour l'état du portefeuille après un ajustement)r�	positionsZ
adjustment_idz Error updating portfolio state: N)
r3r�r}r�r~r�rr{r��idrUrSrV)rCr�r$r�rXr,r,r-r,�s195���z'RealTimeMonitor._update_portfolio_statec196Cs�z$t��|j|j|jd|j��d�}|jj�	|�t197�d|j���WdSty?}zt198�
d|���WYd}~dSd}~ww)u'Enregistre l'exécution d'un ajustementT)rr2r3r4r�r"zExecuted adjustment: z$Error logging adjustment execution: N)rr{r2r3r4r}r�r|r?r�rSrTrUrV)rCr��	log_entryrXr,r,r-r-�s�	��z)RealTimeMonitor._log_adjustment_execution)NNNNNrB)Ir%r&r'r(rrrr@rr*r+rQrrrr�r�rr�r�r�r�r�r�r�r�rr7r�r�r199r�r�r1�boolr�r�r�r�rr�r.r�r�r�r�r�r�r�r�r�r��ndarrayr�r�r�r�r�rrr�r�r�r�r�r+r3r4r5r<r=r,r-r,r,r,r-rl�s������200201�7�202��203�


	"	rl�@B�wss://api.example.com/wsrmrn�initial_capital�
websocket_urlrqrJcCs2t|�}|durddddd�}t||||d�}|S)a�Create and configure a RealTimeMonitor instance204    205    Args:206        portfolio_optimizer: Portfolio optimizer instance207        market_analyzer: Optional market analyzer instance208        initial_capital: Initial portfolio capital209        websocket_url: WebSocket URL for market data210        alert_thresholds: Optional alert thresholds211    212    Returns:213        Configured RealTimeMonitor instance214    Ng��������r�rvg���Q��?)�drawdownr8Z215var_breachr�)rmrnrprq)rLrl)rmrnrMrNrqrp�monitorr,r,r-�create_realtime_monitors��rQ)NrKrLN)5�collectionsrr�rSrRr\�dataclassesrrr�typingrrrr	r216�abcrr�pandasr��numpyr�Z217core.typesrrrr�core.portfolio_optimizerrr�core.market_analyzerrZcore.profilingrZanalysis.ml_analyzerr�market_metricsrrrrrr.r1r7r;r@rLrlr+r*rQr,r,r,r-�<module>sj218	8d�������