Miruzen commited on
Commit
d67c721
·
verified ·
1 Parent(s): 6425a88
Files changed (1) hide show
  1. app.py +19 -9
app.py CHANGED
@@ -92,6 +92,9 @@ def analyze_trend(latest_row):
92
  }
93
 
94
 
 
 
 
95
  # ===============================
96
  # Endpoint: /analyze (grafik & data)
97
  # ===============================
@@ -101,16 +104,20 @@ def analyze_ema(input_data: DateRange):
101
  start_date = pd.to_datetime(input_data.start_date)
102
  end_date = pd.to_datetime(input_data.end_date)
103
 
104
- if end_date <= start_date:
105
- return {"status": "error", "message": "Tanggal akhir harus lebih besar dari tanggal awal"}
106
 
107
- df = yf.download(PAIR, start=start_date, end=end_date + timedelta(days=1))
108
  if df.empty:
109
  return {"status": "error", "message": "Data tidak ditemukan untuk rentang tanggal tersebut"}
110
 
111
  df = df.reset_index()[["Date", "Close"]]
112
  df.rename(columns={"Date": "date", "Close": "close"}, inplace=True)
113
 
 
 
 
 
114
  df["EMA20"] = ema_manual(df["close"], 20)
115
  df["EMA50"] = ema_manual(df["close"], 50)
116
  df = df.dropna().reset_index(drop=True)
@@ -147,12 +154,20 @@ def analyze_ema(input_data: DateRange):
147
  @app.post("/summary")
148
  def ema_summary(input_data: DateRange):
149
  try:
150
- df = yf.download(PAIR, start=input_data.start_date, end=input_data.end_date)
 
 
 
 
151
  if df.empty:
152
  return {"status": "error", "message": "Data tidak ditemukan"}
153
 
154
  df = df.reset_index()[["Date", "Close"]]
155
  df.rename(columns={"Date": "date", "Close": "close"}, inplace=True)
 
 
 
 
156
  df["EMA20"] = ema_manual(df["close"], 20)
157
  df["EMA50"] = ema_manual(df["close"], 50)
158
  df = df.dropna().reset_index(drop=True)
@@ -172,8 +187,3 @@ def ema_summary(input_data: DateRange):
172
 
173
  except Exception as e:
174
  return {"status": "error", "message": str(e)}
175
-
176
-
177
- @app.get("/")
178
- def root():
179
- return {"message": "Model B API (EMA + Trend Summary) aktif 🚀"}
 
92
  }
93
 
94
 
95
+ # ===============================
96
+ # Endpoint: /analyze (grafik & data)
97
+ # ===============================
98
  # ===============================
99
  # Endpoint: /analyze (grafik & data)
100
  # ===============================
 
104
  start_date = pd.to_datetime(input_data.start_date)
105
  end_date = pd.to_datetime(input_data.end_date)
106
 
107
+ # Tambahkan 60 hari ke belakang agar cukup untuk EMA50
108
+ extended_start = start_date - timedelta(days=60)
109
 
110
+ df = yf.download(PAIR, start=extended_start, end=end_date + timedelta(days=1))
111
  if df.empty:
112
  return {"status": "error", "message": "Data tidak ditemukan untuk rentang tanggal tersebut"}
113
 
114
  df = df.reset_index()[["Date", "Close"]]
115
  df.rename(columns={"Date": "date", "Close": "close"}, inplace=True)
116
 
117
+ # Pastikan minimal 50 data
118
+ if len(df) < 50:
119
+ return {"status": "error", "message": f"Data terlalu sedikit ({len(df)} hari). Butuh minimal 50 hari untuk EMA50."}
120
+
121
  df["EMA20"] = ema_manual(df["close"], 20)
122
  df["EMA50"] = ema_manual(df["close"], 50)
123
  df = df.dropna().reset_index(drop=True)
 
154
  @app.post("/summary")
155
  def ema_summary(input_data: DateRange):
156
  try:
157
+ start_date = pd.to_datetime(input_data.start_date)
158
+ end_date = pd.to_datetime(input_data.end_date)
159
+ extended_start = start_date - timedelta(days=60)
160
+
161
+ df = yf.download(PAIR, start=extended_start, end=end_date + timedelta(days=1))
162
  if df.empty:
163
  return {"status": "error", "message": "Data tidak ditemukan"}
164
 
165
  df = df.reset_index()[["Date", "Close"]]
166
  df.rename(columns={"Date": "date", "Close": "close"}, inplace=True)
167
+
168
+ if len(df) < 50:
169
+ return {"status": "error", "message": f"Data terlalu sedikit ({len(df)} hari). Butuh minimal 50 hari untuk EMA50."}
170
+
171
  df["EMA20"] = ema_manual(df["close"], 20)
172
  df["EMA50"] = ema_manual(df["close"], 50)
173
  df = df.dropna().reset_index(drop=True)
 
187
 
188
  except Exception as e:
189
  return {"status": "error", "message": str(e)}