eshan6704 commited on
Commit
ff76bab
·
verified ·
1 Parent(s): 97cab92

Update app/daily.py

Browse files
Files changed (1) hide show
  1. app/daily.py +20 -15
app/daily.py CHANGED
@@ -11,37 +11,40 @@ from . import backblaze as b2
11
  from .common import wrap_html, format_large_number
12
 
13
  # ===========================================================
14
- # Candlestick Pattern Detection
15
  # ===========================================================
16
  def detect_patterns(df):
17
  patterns = []
18
 
19
  for i in range(1, len(df)):
20
- open_today, close_today = df.loc[i, "Open"], df.loc[i, "Close"]
21
- open_prev, close_prev = df.loc[i-1, "Open"], df.loc[i-1, "Close"]
22
- high, low = df.loc[i, "High"], df.loc[i, "Low"]
 
 
 
23
 
24
  # Bullish Engulfing
25
  if close_prev < open_prev and close_today > open_today and close_today > open_prev and open_today < close_prev:
26
- patterns.append({"Date": df.loc[i, "Date"], "Pattern": "Bullish Engulfing"})
27
  # Bearish Engulfing
28
  elif close_prev > open_prev and close_today < open_today and open_today > close_prev and close_today < open_prev:
29
- patterns.append({"Date": df.loc[i, "Date"], "Pattern": "Bearish Engulfing"})
30
  # Doji
31
- elif abs(close_today - open_today)/ (high-low+1e-6) < 0.1:
32
- patterns.append({"Date": df.loc[i, "Date"], "Pattern": "Doji"})
33
  # Hammer / Hanging Man
34
  elif (high - max(open_today, close_today)) > 2*(max(open_today, close_today)-min(open_today, close_today)) and \
35
  (min(open_today, close_today) - low) < 0.1*(high-low):
36
  if close_today > open_today:
37
- patterns.append({"Date": df.loc[i, "Date"], "Pattern": "Hammer"})
38
  else:
39
- patterns.append({"Date": df.loc[i, "Date"], "Pattern": "Hanging Man"})
40
  # Gap Up / Gap Down
41
- if df.loc[i, "Open"] > df.loc[i-1, "Close"] * 1.01:
42
- patterns.append({"Date": df.loc[i, "Date"], "Pattern": "Gap Up"})
43
- elif df.loc[i, "Open"] < df.loc[i-1, "Close"] * 0.99:
44
- patterns.append({"Date": df.loc[i, "Date"], "Pattern": "Gap Down"})
45
 
46
  return pd.DataFrame(patterns)
47
 
@@ -116,8 +119,10 @@ def fetch_daily(symbol, date_end, date_start, b2_save=False):
116
 
117
  # Highlight patterns on chart
118
  for _, row in patterns_df.iterrows():
 
 
119
  fig.add_trace(go.Scatter(
120
- x=[row["Date"]], y=[df.loc[df["Date"]==row["Date"], "High"].values[0]*1.01],
121
  mode="markers+text",
122
  marker=dict(color="red", size=10, symbol="triangle-up"),
123
  text=[row["Pattern"]],
 
11
  from .common import wrap_html, format_large_number
12
 
13
  # ===========================================================
14
+ # Candlestick Pattern Detection (scalar-safe)
15
  # ===========================================================
16
  def detect_patterns(df):
17
  patterns = []
18
 
19
  for i in range(1, len(df)):
20
+ open_today = df.iat[i, df.columns.get_loc("Open")]
21
+ close_today = df.iat[i, df.columns.get_loc("Close")]
22
+ open_prev = df.iat[i-1, df.columns.get_loc("Open")]
23
+ close_prev = df.iat[i-1, df.columns.get_loc("Close")]
24
+ high = df.iat[i, df.columns.get_loc("High")]
25
+ low = df.iat[i, df.columns.get_loc("Low")]
26
 
27
  # Bullish Engulfing
28
  if close_prev < open_prev and close_today > open_today and close_today > open_prev and open_today < close_prev:
29
+ patterns.append({"Date": df.iat[i, df.columns.get_loc("Date")], "Pattern": "Bullish Engulfing"})
30
  # Bearish Engulfing
31
  elif close_prev > open_prev and close_today < open_today and open_today > close_prev and close_today < open_prev:
32
+ patterns.append({"Date": df.iat[i, df.columns.get_loc("Date")], "Pattern": "Bearish Engulfing"})
33
  # Doji
34
+ elif abs(close_today - open_today) / (high - low + 1e-6) < 0.1:
35
+ patterns.append({"Date": df.iat[i, df.columns.get_loc("Date")], "Pattern": "Doji"})
36
  # Hammer / Hanging Man
37
  elif (high - max(open_today, close_today)) > 2*(max(open_today, close_today)-min(open_today, close_today)) and \
38
  (min(open_today, close_today) - low) < 0.1*(high-low):
39
  if close_today > open_today:
40
+ patterns.append({"Date": df.iat[i, df.columns.get_loc("Date")], "Pattern": "Hammer"})
41
  else:
42
+ patterns.append({"Date": df.iat[i, df.columns.get_loc("Date")], "Pattern": "Hanging Man"})
43
  # Gap Up / Gap Down
44
+ if open_today > close_prev * 1.01:
45
+ patterns.append({"Date": df.iat[i, df.columns.get_loc("Date")], "Pattern": "Gap Up"})
46
+ elif open_today < close_prev * 0.99:
47
+ patterns.append({"Date": df.iat[i, df.columns.get_loc("Date")], "Pattern": "Gap Down"})
48
 
49
  return pd.DataFrame(patterns)
50
 
 
119
 
120
  # Highlight patterns on chart
121
  for _, row in patterns_df.iterrows():
122
+ pattern_date = row["Date"]
123
+ high_value = df.loc[df["Date"]==pattern_date, "High"].values[0]
124
  fig.add_trace(go.Scatter(
125
+ x=[pattern_date], y=[high_value*1.01],
126
  mode="markers+text",
127
  marker=dict(color="red", size=10, symbol="triangle-up"),
128
  text=[row["Pattern"]],