
    /j!                        d Z ddlZddlZddlmZ ddlmZ ddlZd Zd Ze	dk    r e
d            e
d	            e
d            e
d
            e
d            e
d            e              e
d            e
d            e
d            e
d            e
d            e
d            e
d            e             dS dS )z
Generate single best signal per asset (closest to current price).

All historical signals will be stored for Graph RAG analysis.
Only the best signal (closest to price) is shown in the UI.
    N)Path)datetimec                  	   g d} | D ]}t          d| d          }|                                s+t          |          5 }t          j        |          }ddd           n# 1 swxY w Y   |d         }|sqd |D             }t          j        |          d |D             }|s%t          |                                 d           t          |fd	
          }|d         z
  }	|d         |d         |d         |d         |d         |d         |d         |	|
                    dd          |
                    dd          d
t          j                                                    t          |          t          |          d}
|dk    r;	 ddl}t          d          }|                                r|                    |dg d          }|                    |d         d          |d<   t%          |j        d          d                   }|z
  }t)          |d         |z   d!          |
d"         d#<   t)          |d         |z   d!          |
d"         d$<   t)          |d         |z   d!          |
d"         d%<   t)          |d!          t)          |d!          d&|
d'<   n)# t*          $ r}t          d(|            Y d}~nd}~ww xY w|d         d)k    rd*}nd+}||
d,<   t          d-| d          }t          |d.          5 }t          j        |
|d!/           ddd           n# 1 swxY w Y   t/          d0 |D                       }t/          d1 |D                       }t          |                                 d2d3d4|            t          d5|d          d4|d                                                     t          d6|d         d3d7|	d3d8           t          d9t          |           d:t          |           d;           t          d<          }|                    d=>           t          j                                        d?          }|| d@| dz  }t          |d.          5 }t          j        ||t          |          |dA|d!/           ddd           n# 1 swxY w Y   t          dB|j                    dS )Cz-Generate only the best signal for each asset.btcusdtethusdtxautusdtzN/home/ubuntu/.hermes/workspace/projects/ORDER_FLOW_GRAPH/outputs/data/signals_.jsonNsignalsc                     g | ]
}|d          S )entry_price .0ss     Z/home/ubuntu/.hermes/workspace/projects/ORDER_FLOW_GRAPH/scripts/generate_single_signal.py
<listcomp>z/generate_single_best_signal.<locals>.<listcomp>$   s    :::Q-(:::    c                 B    g | ]}|d          dk    |d         dk    |S )
confidenceg333333?risk_rewardg      @r   r   s     r   r   z/generate_single_best_signal.<locals>.<listcomp>(   s@     
 
 
$&&1]+;s+B+B +B+B+Br   z: No quality signalsc                 4    t          | d         z
            S )Nr   )abs)r   current_prices    r   <lambda>z-generate_single_best_signal.<locals>.<lambda>2   s    Q}=MP]=]9^9^ r   )keyr   type	directiontarget_price
stop_pricer   r   reason note)
r   r   r   r   r    r   r   distance_from_pricer!   r#   )r   
best_setupgenerated_attotal_signals_analyzedquality_signals_countr	   r   zA/mnt/mt5/terminal/122160/Common/Files/Data/XAUUSD_PERIOD_M1_0.csvz	utf-16-le)	TimestampOpenHighLowCloseVolume)encodingnamesr-   coerce)errors   r%   	cfd_entry
cfd_targetcfd_stop)r   offset_from_binancecfdz%  Warning: Could not read CFD price: bullishu   BULLISH 📈u   BEARISH 📉	sentimentW/home/ubuntu/.hermes/workspace/projects/ORDER_FLOW_GRAPH/outputs/data/realtime_summary_w)indentc              3   2   K   | ]}|d          dk    dV  dS )r   r:      Nr   r   s     r   	<genexpr>z.generate_single_best_signal.<locals>.<genexpr>p   0      VV!!K.I:U:UA:U:U:U:UVVr   c              3   2   K   | ]}|d          dk    dV  dS )r   bearishr@   Nr   r   s     r   rA   z.generate_single_best_signal.<locals>.<genexpr>q   rB   r   z: $z.2f - z  Best signal: z
  Entry: $z (Distance: $)z  Analyzed: u    total → u    quality → 1 bestzP/home/ubuntu/.hermes/workspace/projects/ORDER_FLOW_GRAPH/data/historical_signalsT)exist_okz%Y%m%d_%H%M%S	_signals_)asset	timestampr   signals_countr   z  Archived: )r   existsopenjsonload
statisticsmedianprintuppermingetr   now	isoformatlenpandasread_csv
to_numericfloatilocround	Exceptiondumpsummkdirstrftimename)assetsrI   signals_filefdatar   entry_pricesquality_signalsbest_signaldistancesummarypdmt5_filedf	cfd_price
cfd_offseter;   output_filebullish_countbearish_countarchive_dirrJ   archive_filer   s                           @r   generate_single_best_signalry      s    0//F t2 t2ymryyyzz""$$ 	, 	 19Q<<D	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  y/ 	 ;:':::"),77
 

 
 

  	U[[]]888999 //^/^/^/^___ }-= +#F+(5*=9 +N ;),7*=9),7'/%//(B77#33  %LNN4466&)'ll%(%9%9!
 
( JC#### cdd??$$ X)`)`)` % b bB"$--7H-"M"MBwK %bgbk'&: ; ;I!*]!:J9>{=?Y\f?fhi9j9jGL)+6:?N@[^h@hjk:l:lGL),78=k,>WZd>dfg8h8hGL)*5 */y!)<)</4Z/C/C& &GEN  C C CAaAABBBBBBBBC {#y00&II&I(   Buz  B  B  B  C  C+s## 	,qIgq++++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, VVVVVVVVVVVVVVDD=DDDDDEEEZF 3ZZK8P8V8V8X8XZZ[[[W;}5WWWWWWWXXX_S\\__c/6J6J___``` mnn4((( LNN++O<<	"%H%H	%H%H%HH,$$ 	I&!.!$W"     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	0\.001111it2 t2sO   A##A'	*A'	DJ&&
K0KKL,,L0	3L0	:+R11R5	8R5	c                  6   	 g d} g }|                     d           |                     dt          j                                        d                      |                     d           | D ]f}t	          d| d          }|                                s+t          |          5 }t          j        |          }ddd           n# 1 swxY w Y   |	                    d	d
          }|	                    di           }|s|	                    dd          
                                }|	                    dd          }	|dk    rd}
n|dk    rd}
nd}
|                     |
 d|
                                 d|dd|            |                     d|	
                                            |                     d|	                    dd
          d           |                     d|	                    dd
          d           |                     d|	                    dd
          d           |                     d|	                    d d
          d!d"t          |	                    d#d
          d$z             d%           d&|v r-|                     d'|	                    d&d
          d           |                     d           h|                     d(           d)                    |          }t	          d*          }t          |d+          5 }|                    |           ddd           n# 1 swxY w Y   t          d,|            t          d-           dS # t          $ r}t          d.|            Y d}~dS d}~ww xY w)/z$Send alert to Telegram topic 120949.r   u   🎯 ORDER FLOW SIGNALSu   📊 z%Y-%m-%d %H:%M:%S UTCr"   r<   r
   Nr   r   r%   r   zN/Ar   BULLISHu   📈BEARISHu   📉u   ➡️ z @ $z,.2frE   z	   Type: z   Entry: $r   z   Target: $r   z
   Stop: $r    z   RR: r   z.1fz (Conf: r   d   z%)r5   z	   CFD: $u/   🌐 http://of.llm.astrona.me/outputs/main.html
z/tmp/order_flow_alert.txtr=   u   
📱 Telegram alert saved to: z0   (Integrate with send_message tool to deliver)u'   
❌ Failed to prepare Telegram alert: )appendr   rV   rc   r   rL   rM   rN   rO   rU   rS   intjoinwriterR   r_   )re   linesrI   summary_filerg   rh   r   r%   r   stypeemojimessage
alert_filers   s                 r   send_telegram_alertr      sb   <>333 .///OX\^^445LMMOOPPPR $	 $	E  !Gz  !G  !G  !G  H  HL&&(( l## $qy||$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ !HH_a88M,33J "{E::@@BBINN6511EI%%i'' LLEYYEKKMMYY}YYYiYYZZZLL4U[[]]44555LLNz~~mQ'G'GNNNOOOLLP
~q(I(IPPPQQQLLLjnn\1&E&ELLLMMMLL}:>>-#C#C}}}QTU_UcUcdprsUtUtuxUxQyQy}}}~~~ j((NQ)G)GNNNOOOLLFGGG))E"" 566
*c"" 	aGGG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	===>>>@AAAAA > > ><<<=========>sa   B(M1 *C?M1 C	M1 C	IM1 !M7M1 MM1 
M$M1 1
N;NN__main__zP================================================================================zSINGLE BEST SIGNAL GENERATORz>
Generating 1 best signal per asset (closest to current price)z7All historical signals archived for Graph RAG analysis
zP--------------------------------------------------------------------------------zQ
================================================================================u	   ✓ DONE!z!
UI shows only 1 signal per assetz5Historical signals saved to: data/historical_signals/z!
Ready for Graph RAG integration!)__doc__rN   rP   pathlibr   r   shutilry   r   __name__rR   r   r   r   <module>r      sx                     y2 y2 y2x>> >> >>B z	E&MMM	E
()))	E&MMM	E
KLLL	E
DEEE	E&MMM!!!	E-	E+	E&MMM	E
.///	E
ABBB	E
.///	E&MMM ' r   