
    mWi                        d dl Z d dlZd dlZd dlmZmZmZ d dlm	Z	  ej
        e          ZdddddZ	 dd
edededej        fdZ	 dd
edee         dedeeej        f         fdZd
edee         fdZdee         fdZdS )    N)DictListOptional)binance_client15m1h4h1d)r   r   r	   r
      symbol	timeframelimitreturnc           	      p   t          j                    }	 |                    | ||          }t          j        |g d          }t          j        |d         d          |d<   |                    dd           |S # t          j        $ r)}t          
                    d	|  d
| d|             d}~ww xY w)z
    Fetch OHLCV candlestick data from Binance and return as a DataFrame.
    Columns: open, high, low, close, volume (datetime index).
    r   r   )	timestampopenhighlowclosevolume)columnsr   ms)unitT)inplacezError fetching OHLCV for  : N)r   get_readonly_exchangefetch_ohlcvpd	DataFrameto_datetime	set_indexccxt	BaseErrorloggererror)r   r   r   exchangeohlcvdfes          >/var/www/html/crypto-bot/backend/app/data_layer/market_data.pyr   r      s     355H
$$Vy$NN\RRR
 
 
 .KtDDD;
[$///	>   JJJ)JJqJJKKKs   A'A= =B5$B00B5
timeframesc                 J    |ddg}i }|D ]}t          | ||          ||<   |S )za
    Fetch OHLCV data for multiple timeframes.
    Returns a dict keyed by timeframe string.
    Nr   r   r   )r   )r   r-   r   resulttfs        r,   fetch_multi_timeframer1   '   sH     T]
F D D 2UCCCr

M    c                     t          j                    }	 |                    |           }t          |d                   S # t          j        $ r+}t                              d|  d|            Y d}~dS d}~ww xY w)z(Fetch the latest ask price for a symbol.lastz!Error fetching current price for r   N)r   r   fetch_tickerfloatr$   r%   r&   r'   )r   r(   tickerr+   s       r,   get_current_pricer8   7   s    355H&&v..VF^$$$>   FFF1FFGGGttttts   )? A9 A44A9c                      t          j                    } |                                 }d |                                D             }t	          |          S )z0Return a list of active USDT spot trading pairs.c                     g | ]J\  }}|                     d           dk    |                     d          3|                     d          H|KS )quoteUSDTactivespot)get).0r   markets      r,   
<listcomp>z'get_supported_pairs.<locals>.<listcomp>F   s`       FF::g&((VZZ-A-A(fjjQWFXFX( 	(((r2   )r   r   load_marketsitemssorted)r(   marketspairss      r,   get_supported_pairsrH   B   sU    355H##%%G %mmoo  E
 %==r2   )r   r   )Nr   )r$   pandasr    loggingtypingr   r   r   app.data_layer.binance_clientr   	getLogger__name__r&   
TIMEFRAMESstrintr!   r   r1   r6   r8   rH    r2   r,   <module>rS      s]         ' ' ' ' ' ' ' ' ' ' 8 8 8 8 8 8		8	$	$ 


	 
 69 /2\   , =@ !#Y69	#r|
    c huo    	T#Y 	 	 	 	 	 	r2   