import ccxt import talib import pandas as pd import matplotlib.pyplot as plt # Replace 'YOUR_API_KEY' and 'YOUR_API_SECRET' with your actual API key and secret api_key = 'YOUR_API_KEY' api_secret = 'YOUR_API_SECRET' # Initialize Binance API exchange = ccxt.binance({ 'apiKey': api_key, 'secret': api_secret, }) def fetch_historical_data(symbol, timeframe, limit): ohlcv = exchange.fetch_ohlcv(symbol, timeframe, limit=limit) ohlcv_df = pd.DataFrame(ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume']) ohlcv_df['timestamp'] = pd.to_datetime(ohlcv_df['timestamp'], unit='ms') ohlcv_df.set_index('timestamp', inplace=True) return ohlcv_df def generate_signals(data): signals = pd.DataFrame(index=data.index) # RSI signal rsi_period = 14 signals['rsi'] = talib.RSI(data['close'], timeperiod=rsi_period) # SMA crossover signal short_window = 10 long_window = 30 signals['short_mavg'] = data['close'].rolling(window=short_window, min_periods=1, center=False).mean() signals['long_mavg'] = data['close'].rolling(window=long_window, min_periods=1, center=False).mean() # Bollinger Bands signal bollinger_period = 20 signals['upper_band'], signals['middle_band'], signals['lower_band'] = talib.BBANDS(data['close'], timeperiod=bollinger_period) # Generate signals signals['buy_signal'] = ((signals['rsi'] > 80) & (signals['short_mavg'] < signals['long_mavg']) & (data['close'] > signals['upper_band'])) signals['sell_signal'] = ((signals['rsi'] < 30) | (signals['short_mavg'] > signals['long_mavg']) | (data['close'] < signals['lower_band'])) return signals # Example usage: symbol = 'BTC/USDT' timeframe = '1h' limit = 100 # Fetch historical data historical_data = fetch_historical_data(symbol, timeframe, limit) # Generate signals signals = generate_signals(historical_data) # Print signals print(signals[signals['buy_signal'] | signals['sell_signal']]) # Plot the signals fig, ax = plt.subplots(figsize=(10, 6)) ax.plot(historical_data.index, historical_data['close'], label='Close Price') ax.plot(signals[signals['buy_signal']].index, signals['upper_band'][signals['buy_signal']], '^', markersize=10, color='g', label='Buy Signal') ax.plot(signals[signals['sell_signal']].index, signals['lower_band'][signals['sell_signal']], 'v', markersize=10, color='r', label='Sell Signal') plt.title('Trading Signals') plt.xlabel('Date') plt.ylabel('Price') plt.legend() plt.show()