Spaces:
Build error
Build error
| FROM huggingface/autotrain-advanced:latest | |
| CMD pip uninstall -y autotrain-advanced && pip install -U autotrain-advanced && autotrain app --host 0.0.0.0 --port 7860 --workers 1 | |
| # config.py | |
| BINANCE_API_KEY = 'your_binance_api_key' | |
| ALPHA_VANTAGE_API_KEY = 'your_alpha_vantage_api_key' | |
| YAHOO_FINANCE_API_KEY = 'your_yahoo_finance_api_key' | |
| TRADING_VIEW_API_KEY = 'your_trading_view_api_key' | |
| BINOMO_API_KEY = 'your_binomo_api_key' | |
| TELEGRAM_BOT_API_KEY = 'your_telegram_bot_api_key' | |
| # data_acquisition.py | |
| import requests | |
| import pandas as pd | |
| import numpy as np | |
| from sklearn.preprocessing import StandardScaler | |
| from tensorflow.keras.models import Sequential | |
| from tensorflow.keras.layers import LSTM, Dense, Dropout | |
| from telegram.ext import Updater, CommandHandler | |
| def fetch_binance_data(pair): | |
| url = f"https://api.binance.com/api/v3/klines?symbol={pair}&interval=1h" | |
| response = requests.get(url) | |
| data = response.json() | |
| df = pd.DataFrame(data, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume', 'close_time', 'quote_asset_volume', 'number_of_trades', 'taker_buy_base_asset_volume', 'taker_buy_quote_asset_volume', 'ignore']) | |
| df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms') | |
| return df[['timestamp', 'open', 'high', 'low', 'close', 'volume']] | |
| def fetch_alpha_vantage_data(pair): | |
| symbol = pair.split("USDT")[0] # Assuming pair like BTCUSDT | |
| url = f"https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol={symbol}&interval=60min&apikey={ALPHA_VANTAGE_API_KEY}" | |
| response = requests.get(url) | |
| data = response.json() | |
| time_series_key = 'Time Series (60min)' | |
| if time_series_key not in data: | |
| raise ValueError(f"Error fetching data from Alpha Vantage: {data}") | |
| df = pd.DataFrame(data[time_series_key]).T | |
| df.columns = ['open', 'high', 'low', 'close', 'volume'] | |
| df.index = pd.to_datetime(df.index) | |
| return df.reset_index().rename(columns={'index': 'timestamp'}) | |
| def fetch_yahoo_finance_data(pair): | |
| url = f"https://yfapi.net/v8/finance/chart/{pair}?interval=60m" | |
| headers = {'x-api-key': YAHOO_FINANCE_API_KEY} | |
| response = requests.get(url, headers=headers) | |
| data = response.json() | |
| timestamps = data['chart']['result'][0]['timestamp'] | |
| ohlc = data['chart']['result'][0]['indicators']['quote'][0] | |
| df = pd.DataFrame({ | |
| 'timestamp': pd.to_datetime(timestamps, unit='s'), | |
| 'open': ohlc['open'], | |
| 'high': ohlc['high'], | |
| 'low': ohlc['low'], | |
| 'close': ohlc['close'], | |
| 'volume': ohlc['volume'] | |
| }) | |
| return df | |
| def fetch_trading_view_data(pair): | |
| # Placeholder for TradingView API data fetching | |
| raise NotImplementedError("TradingView API integration not implemented.") | |
| def fetch_binomo_data(pair): | |
| # Placeholder for Binomo API data fetching | |
| raise NotImplementedError("Binomo API integration not implemented.") | |
| def get_combined_data(pair): | |
| df_binance = fetch_binance_data(pair) | |
| df_alpha = fetch_alpha_vantage_data(pair) | |
| df_yahoo = fetch_yahoo_finance_data(pair) | |
| # Merge dataframes on timestamp | |
| df = pd.merge(df_binance, df_alpha, on='timestamp', suffixes=('_binance', '_alpha')) | |
| df = pd.merge(df, df_yahoo, on='timestamp', suffixes=('', '_yahoo')) | |
| # Drop any redundant columns or handle conflicts | |
| return df | |
| def preprocess_data(df): | |
| df = df.dropna() | |
| scaler = StandardScaler() | |
| scaled_data = scaler.fit_transform(df[['open', 'high', 'low', 'close', 'volume']]) | |
| return scaled_data, scaler | |
| def create_dataset(data, time_step=60): | |
| X, Y = [], [] | |
| for i in range(len(data) - time_step - 1): | |
| a = data[i:(i + time_step), :] | |
| X.append(a) | |
| Y.append(data[i + time_step, 3]) # Assuming 'close' price is the target | |
| return np.array(X), np.array(Y) | |
| def build_model(input_shape): | |
| model = Sequential() | |
| model.add(LSTM(50, return_sequences=True, input_shape=input_shape)) | |
| model.add(LSTM(50, return_sequences=False)) | |
| model.add(Dropout(0.2)) | |
| model.add(Dense(25)) | |
| model.add(Dense(1)) | |
| model.compile(optimizer='adam', loss='mean_squared_error') | |
| return model | |
| def train_model(df): | |
| data, scaler = preprocess_data(df) | |
| X, Y = create_dataset(data) | |
| X_train, Y_train = X[:int(len(X) * 0.8)], Y[:int(len(Y) * 0.8)] | |
| X_val, Y_val = X[int(len(X) * 0.8):], Y[int(len(Y) * 0.8):] | |
| model = build_model((X_train.shape[1], X_train.shape[2])) | |
| model.fit(X_train, Y_train, validation_data=(X_val, Y_val), epochs=20, batch_size=32) | |
| return model, scaler | |
| def generate_signal(pair): | |
| df = get_combined_data(pair) | |
| model, scaler = train_model(df) | |
| recent_data = df.tail(60).drop(columns=['timestamp']) | |
| scaled_recent_data = scaler.transform(recent_data) | |
| prediction = model.predict(np.expand_dims(scaled_recent_data, axis=0)) | |
| last_close = df['close'].iloc[-1] | |
| if prediction > last_close: | |
| return "Buy" | |
| else: | |
| return "Sell" | |
| def start(update, context): | |
| context.bot.send_message(chat_id=update.effective_chat.id, text="I'm a trading bot, how can I help you today?") | |
| def signal(update, context): | |
| pair = context.args[0] if context.args else 'BTCUSDT' | |
| try: | |
| trade_signal = generate_signal(pair) | |
| context.bot.send_message(chat_id=update.effective_chat.id, text=f"Trade Signal for {pair}: {trade_signal}") | |
| except Exception as e: | |
| context.bot.send_message(chat_id=update.effective_chat.id, text=f"Error: {e}") | |
| def main(): | |
| updater = Updater(token=TELEGRAM_BOT_API_KEY, use_context=True) | |
| dispatcher = updater.dispatcher | |
| start_handler = CommandHandler('start', start) | |
| signal_handler = CommandHandler('signal', signal) | |
| dispatcher.add_handler(start_handler) | |
| dispatcher.add_handler(signal_handler) | |
| updater.start_polling() | |
| if __name__ == '__main__': | |
| main() | |