eshan6704 commited on
Commit
0fbfd02
·
verified ·
1 Parent(s): ec552e6

Create chart_builder.py

Browse files
Files changed (1) hide show
  1. chart_builder.py +79 -0
chart_builder.py ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # chart_builder.py
2
+ import plotly.graph_objs as go
3
+ from indicator import (
4
+ calc_macd, calc_rsi, calc_supertrend,
5
+ calc_stochastic, calc_keltner, calc_zigzag,
6
+ calc_swings
7
+ )
8
+
9
+ def build_chart(df):
10
+ fig = go.Figure()
11
+
12
+ # =============================
13
+ # MAIN PRICE PANEL
14
+ # =============================
15
+ fig.add_trace(go.Candlestick(
16
+ x=df.index,
17
+ open=df["Open"], high=df["High"],
18
+ low=df["Low"], close=df["Close"],
19
+ name="Price", yaxis="y"
20
+ ))
21
+
22
+ # Volume
23
+ fig.add_trace(go.Bar(
24
+ x=df.index, y=df["Volume"], name="Volume", yaxis="y2", opacity=0.3
25
+ ))
26
+
27
+ # =============================
28
+ # INDICATORS
29
+ # =============================
30
+ rsi = calc_rsi(df)
31
+ macd = calc_macd(df)
32
+ st = calc_supertrend(df)
33
+ stoch = calc_stochastic(df)
34
+ kc = calc_keltner(df)
35
+ zig = calc_zigzag(df)
36
+ sw = calc_swings(df)
37
+
38
+ # RSI Panel
39
+ fig.add_trace(go.Scatter(x=df.index, y=rsi["RSI"], name="RSI", yaxis="y3"))
40
+
41
+ # MACD Panel
42
+ fig.add_trace(go.Scatter(x=df.index, y=macd["MACD"], name="MACD", yaxis="y4"))
43
+ fig.add_trace(go.Scatter(x=df.index, y=macd["Signal"], name="Signal", yaxis="y4"))
44
+ fig.add_trace(go.Bar(x=df.index, y=macd["Histogram"], name="Hist", yaxis="y4"))
45
+
46
+ # Supertrend
47
+ fig.add_trace(go.Scatter(x=df.index, y=st["Supertrend"], name="Supertrend", yaxis="y"))
48
+
49
+ # Stoch
50
+ fig.add_trace(go.Scatter(x=df.index, y=stoch["STOCH_K"], name="STOCH_K", yaxis="y5"))
51
+ fig.add_trace(go.Scatter(x=df.index, y=stoch["STOCH_D"], name="STOCH_D", yaxis="y5"))
52
+
53
+ # Keltner
54
+ fig.add_trace(go.Scatter(x=df.index, y=kc["KC_UP"], name="KC UP", yaxis="y"))
55
+ fig.add_trace(go.Scatter(x=df.index, y=kc["KC_MID"], name="KC MID", yaxis="y"))
56
+ fig.add_trace(go.Scatter(x=df.index, y=kc["KC_LOW"], name="KC LOW", yaxis="y"))
57
+
58
+ # ZigZag
59
+ fig.add_trace(go.Scatter(x=df.index, y=zig["ZIGZAG"], name="ZIGZAG", yaxis="y"))
60
+
61
+ # Swings
62
+ fig.add_trace(go.Scatter(x=df.index, y=sw["SWING_HIGH"], name="Swing High", yaxis="y"))
63
+ fig.add_trace(go.Scatter(x=df.index, y=sw["SWING_LOW"], name="Swing Low", yaxis="y"))
64
+
65
+ # =============================
66
+ # LAYOUT
67
+ # =============================
68
+ fig.update_layout(
69
+ height=1200,
70
+ xaxis=dict(domain=[0, 1], rangeslider=dict(visible=False)),
71
+ yaxis=dict(domain=[0.55, 1]), # Price
72
+ yaxis2=dict(domain=[0.45, 0.55]), # Volume
73
+ yaxis3=dict(domain=[0.30, 0.45]), # RSI
74
+ yaxis4=dict(domain=[0.15, 0.30]), # MACD
75
+ yaxis5=dict(domain=[0.00, 0.15]), # Stochastic
76
+ showlegend=True
77
+ )
78
+
79
+ return fig.to_html(full_html=False)