Spaces:
Sleeping
Sleeping
Logic Fix
Browse files
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 |
-
|
| 105 |
-
|
| 106 |
|
| 107 |
-
df = yf.download(PAIR, start=
|
| 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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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)}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|