netflypsb commited on
Commit
22d47a4
·
verified ·
1 Parent(s): 5a8fb12

Create utils/plotting.py

Browse files
Files changed (1) hide show
  1. utils/plotting.py +47 -0
utils/plotting.py ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import matplotlib.pyplot as plt
2
+ import matplotlib.dates as mdates
3
+
4
+ def plot_data_with_indicators_and_signals(data):
5
+ """
6
+ Plots historical price data, SMAs, Bollinger Bands, and buy/sell signals.
7
+
8
+ Args:
9
+ data (pd.DataFrame): The DataFrame containing the historical prices, SMAs, Bollinger Bands,
10
+ and signals. It expects 'close', 'SMA_21', 'SMA_50', 'BB_Upper',
11
+ 'BB_Lower', 'Buy_Signal', and 'Sell_Signal' columns.
12
+ """
13
+ # Create a new figure and set the size
14
+ plt.figure(figsize=(14, 7))
15
+
16
+ # Plot closing price
17
+ plt.plot(data['date'], data['close'], label='Close Price', alpha=0.5)
18
+
19
+ # Plot SMAs
20
+ plt.plot(data['date'], data['SMA_21'], label='21-Period SMA', alpha=0.75)
21
+ plt.plot(data['date'], data['SMA_50'], label='50-Period SMA', alpha=0.75)
22
+
23
+ # Plot Bollinger Bands
24
+ plt.plot(data['date'], data['BB_Upper'], label='Upper Bollinger Band', linestyle='--', alpha=0.5)
25
+ plt.plot(data['date'], data['BB_Lower'], label='Lower Bollinger Band', linestyle='--', alpha=0.5)
26
+
27
+ # Highlight buy signals
28
+ buy_signals = data[data['Buy_Signal']]
29
+ plt.scatter(buy_signals['date'], buy_signals['close'], label='Buy Signal', marker='^', color='green', alpha=1)
30
+
31
+ # Highlight sell signals
32
+ sell_signals = data[data['Sell_Signal']]
33
+ plt.scatter(sell_signals['date'], sell_signals['close'], label='Sell Signal', marker='v', color='red', alpha=1)
34
+
35
+ # Formatting the plot
36
+ plt.title('Cryptocurrency Analysis with Buy/Sell Signals')
37
+ plt.xlabel('Date')
38
+ plt.ylabel('Price')
39
+ plt.legend()
40
+ plt.grid(True)
41
+ plt.xticks(rotation=45)
42
+ plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
43
+ plt.gca().xaxis.set_major_locator(mdates.DayLocator(interval=5))
44
+
45
+ # Show plot
46
+ plt.tight_layout()
47
+ plt.show()