Skip to content

Commit 27bca3b

Browse files
committed
Add formatting
1 parent d537ace commit 27bca3b

File tree

1 file changed

+42
-13
lines changed

1 file changed

+42
-13
lines changed

Trading/utils/visualize.py

Lines changed: 42 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
# Visualizations for trades
77

8+
89
def plot_trades_gant(all_trades: List[List[Trade]]):
910
fig, ax = plt.subplots(figsize=(10, 6))
1011
legend_labels = []
@@ -23,59 +24,87 @@ def plot_trades_gant(all_trades: List[List[Trade]]):
2324
trade_start_dates_num = date2num(trade_start_dates)
2425
trade_end_dates_num = date2num(trade_end_dates)
2526

26-
ax.barh(trade_labels, trade_end_dates_num - trade_start_dates_num, left=trade_start_dates_num, height=0.5)
27+
ax.barh(
28+
trade_labels,
29+
trade_end_dates_num - trade_start_dates_num,
30+
left=trade_start_dates_num,
31+
height=0.5,
32+
)
2733

28-
ax.set_xlabel('Timeline')
29-
ax.set_ylabel('Trades')
30-
ax.set_title('Trade Openings Overlapping Timelines')
34+
ax.set_xlabel("Timeline")
35+
ax.set_ylabel("Trades")
36+
ax.set_title("Trade Openings Overlapping Timelines")
3137
ax.legend(legend_labels)
3238
ax.xaxis_date()
3339

3440
plt.show()
3541

42+
3643
# plot a list of values with dates
37-
def plot_list_dates(values: List[float], dates: List, title: str, ylabel: str, peaks, show_cursor=True):
44+
def plot_list_dates(
45+
values: List[float], dates: List, title: str, ylabel: str, peaks, show_cursor=True
46+
):
3847
from datetime import datetime
3948
import mplcursors
4049
import matplotlib.dates as mdates
4150

4251
fig, ax = plt.subplots(figsize=(10, 6))
4352
dates = [datetime.fromisoformat(d) for d in dates]
4453
ax.plot(dates, values)
45-
ax.set_xlabel('Date')
54+
ax.set_xlabel("Date")
4655
ax.set_ylabel(ylabel)
4756
ax.set_title(title)
4857
ax.xaxis_date()
4958

5059
if show_cursor:
5160
cursor = mplcursors.cursor(ax, hover=True)
61+
5262
# Customize the annotation
5363
@cursor.connect("add")
5464
def on_add(sel):
5565
x_date = mdates.num2date(sel.target[0]) # Convert to datetime
56-
sel.annotation.set(text=f"{x_date.strftime('%Y-%m-%d')}\nValue: {sel.target[1]:.2f}")
66+
sel.annotation.set(
67+
text=f"{x_date.strftime('%Y-%m-%d')}\nValue: {sel.target[1]:.2f}"
68+
)
69+
5770
average_value = sum(values) / len(values)
5871
# plot average as dotted line
59-
ax.axhline(average_value, color='orange', linestyle='--', label='Average')
72+
ax.axhline(average_value, color="orange", linestyle="--", label="Average")
6073

6174
# plot standard deviation above and below average
6275
from Trading.utils.calculations import calculate_standard_deviation
76+
6377
std_dev = calculate_standard_deviation(values)
6478
STD_SCALER = 1.5
65-
ax.axhline(average_value + STD_SCALER * std_dev, color='green', linestyle='--', label=f'Above {STD_SCALER} Std Dev')
66-
ax.axhline(average_value - STD_SCALER * std_dev, color='red', linestyle='--', label=f'Below {STD_SCALER} Std Dev')
79+
ax.axhline(
80+
average_value + STD_SCALER * std_dev,
81+
color="green",
82+
linestyle="--",
83+
label=f"Above {STD_SCALER} Std Dev",
84+
)
85+
ax.axhline(
86+
average_value - STD_SCALER * std_dev,
87+
color="red",
88+
linestyle="--",
89+
label=f"Below {STD_SCALER} Std Dev",
90+
)
6791

6892
peak_values = peaks["values"]
6993
peak_dates = peaks["dates"]
70-
ax.plot(peak_dates, peak_values, 'ro', label='Peaks')
94+
ax.plot(peak_dates, peak_values, "ro", label="Peaks")
7195

7296
peaks_above_std = []
7397
peaks_above_std_dates = []
7498
for i in range(len(peak_values)):
75-
if abs(peak_values[i] - average_value) > STD_SCALER*std_dev:
99+
if abs(peak_values[i] - average_value) > STD_SCALER * std_dev:
76100
peaks_above_std.append(peak_values[i])
77101
peaks_above_std_dates.append(peak_dates[i])
78-
ax.plot(peaks_above_std_dates, peaks_above_std, 'go', label=f'Peaks outside {STD_SCALER} Std Dev')
102+
ax.plot(
103+
peaks_above_std_dates,
104+
peaks_above_std,
105+
"go",
106+
label=f"Peaks outside {STD_SCALER} Std Dev",
107+
)
79108

80109
plt.xticks(rotation=45)
81110
plt.grid(True)

0 commit comments

Comments
 (0)