File size: 1,827 Bytes
8a3e273
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import numpy as np
import pandas as pd

def generate_signals(df):
    """Generate trading signals based on technical indicators."""
    signals = pd.DataFrame(index=df.index)
    
    # RSI Signals
    signals['RSI_Signal'] = 'Neutral'
    signals.loc[df['RSI'] < 30, 'RSI_Signal'] = 'Oversold'
    signals.loc[df['RSI'] > 70, 'RSI_Signal'] = 'Overbought'
    
    # MACD Signals
    signals['MACD_Signal'] = 'Neutral'
    signals.loc[df['MACD'] > df['MACD_Signal'], 'MACD_Signal'] = 'Buy'
    signals.loc[df['MACD'] < df['MACD_Signal'], 'MACD_Signal'] = 'Sell'
    
    # Bollinger Bands Signals
    signals['BB_Signal'] = 'Neutral'
    signals.loc[df['Close'] < df['BB_Lower'], 'BB_Signal'] = 'Oversold'
    signals.loc[df['Close'] > df['BB_Upper'], 'BB_Signal'] = 'Overbought'
    
    # Moving Average Signals
    signals['MA_Signal'] = 'Neutral'
    signals.loc[df['Close'] > df['SMA_20'], 'MA_Signal'] = 'Bullish'
    signals.loc[df['Close'] < df['SMA_20'], 'MA_Signal'] = 'Bearish'
    
    return signals

def get_signal_summary(signals):
    """Generate a summary of current signals."""
    latest_signals = signals.iloc[-1]
    
    summary = {
        'RSI': latest_signals['RSI_Signal'],
        'MACD': latest_signals['MACD_Signal'],
        'Bollinger': latest_signals['BB_Signal'],
        'Moving Average': latest_signals['MA_Signal']
    }
    
    # Overall sentiment
    bullish_count = sum(1 for signal in summary.values() if signal in ['Buy', 'Bullish', 'Oversold'])
    bearish_count = sum(1 for signal in summary.values() if signal in ['Sell', 'Bearish', 'Overbought'])
    
    if bullish_count > bearish_count:
        summary['Overall'] = 'Bullish'
    elif bearish_count > bullish_count:
        summary['Overall'] = 'Bearish'
    else:
        summary['Overall'] = 'Neutral'
    
    return summary