import ccxt import pandas as pd import streamlit as st import xgboost as xgb from sklearn.metrics import r2_score from sklearn.model_selection import train_test_split exchange = ccxt.mexc({ 'apiKey': 'mx0vglbkoCOwmqV5tn', 'secret': 'c6d8cc8953fd405787ed54e3488ae0db', 'enableRateLimit': True, }) #def fetch_ohlcv_data(symbol, timeframe, limit): #return exchange.fetch_ohlcv(symbol, timeframe, since=None, limit=limit) def fetch_ohlcv_data(symbol, timeframe, limit): data = [] start_time = None while len(data) < limit: ohlcv_data = exchange.fetch_ohlcv(symbol, timeframe, since=start_time, limit=limit) if ohlcv_data: data.extend(ohlcv_data) start_time = ohlcv_data[-1][0] + 1 else: print("Warning: No data returned from exchange API") break return data def data_to_dataframe(data): df = pd.DataFrame(data, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume']) df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms') df.set_index('timestamp', inplace=True) return df def prepare_dataset(df, lags): X = pd.DataFrame() y = pd.DataFrame() for lag in range(1, lags + 1): shifted_close = df['close'].shift(lag) X[f'close_lag_{lag}'] = shifted_close y = df['close'].shift(-1) return X, y def train_xgboost_model(X_train, y_train): dtrain = xgb.DMatrix(X_train, label=y_train) params = { 'objective': 'reg:squarederror', 'eval_metric': 'rmse', } model = xgb.train(params, dtrain) return model def predict_next_hour_price(df, model, lags): X_test = pd.DataFrame() for lag in range(1, lags + 1): shifted_close = df['close'].shift(lag) X_test[f'close_lag_{lag}'] = shifted_close X_test = X_test.tail(1) dtest = xgb.DMatrix(X_test) next_hour_price = model.predict(dtest) return next_hour_price def evaluate_prediction_accuracy(y_test, y_pred): accuracy = r2_score(y_test, y_pred) return accuracy def execute_trade(exchange, symbol, side, amount): order = exchange.create_market_order(symbol, side, amount) return order symbol = 'BTC/USDT' timeframe = '1d' limit = 5000 lags = 12 test_size = 0.3 ohlcv_data = fetch_ohlcv_data(symbol, timeframe, limit) df = data_to_dataframe(ohlcv_data) if st.button("hoo"): st.write(df) X, y = prepare_dataset(df, lags) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_size) model = train_xgboost_model(X_train, y_train) y_pred = model.predict(X_test) accuracy = evaluate_prediction_accuracy(y_test, y_pred) if accuracy > 0.9: latest_data = df.tail(lags) predicted_price = predict_next_hour_price(latest_data, model, lags) current_price = latest_data['close'].iloc[-1] if predicted_price > current_price: # Buy BTC amount = 0.001 # Set the amount you want to trade order = execute_trade(exchange, symbol, 'buy', amount) print(f"Bought {amount} BTC at {current_price}") elif predicted_price < current_price: # Sell BTC amount = 0.001 # Set the amount you want to trade order = execute_trade(exchange, symbol, 'sell', amount) print(f"Sold {amount} BTC at {current_price}") else: print("Accuracy is low, not placing order.")