Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -253,13 +253,18 @@ def predict(df: pd.DataFrame, horizon: int, fee: float = 0.0006, n_folds: int =
|
|
| 253 |
y = (fwd > 0).astype(float)
|
| 254 |
y[fwd.isna()] = np.nan
|
| 255 |
|
|
|
|
| 256 |
data = feats.copy()
|
| 257 |
data["y"], data["fwd"] = y, fwd
|
| 258 |
data["thr_move"] = (atr / close) * np.sqrt(horizon)
|
| 259 |
-
|
| 260 |
-
train_df =
|
| 261 |
-
|
| 262 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 263 |
|
| 264 |
cols = list(feats.columns)
|
| 265 |
X, Y = train_df[cols], train_df["y"].astype(int)
|
|
@@ -275,11 +280,13 @@ def predict(df: pd.DataFrame, horizon: int, fee: float = 0.0006, n_folds: int =
|
|
| 275 |
oos_p, oos_idx = [], []
|
| 276 |
for k in range(n_folds):
|
| 277 |
tr_end, te0, te1 = edges[k] - horizon, edges[k], edges[k + 1]
|
| 278 |
-
if tr_end <
|
| 279 |
continue
|
| 280 |
p = _fit_predict(X.iloc[:tr_end], Y.iloc[:tr_end], X.iloc[te0:te1], W[:tr_end])
|
| 281 |
oos_p.append(p)
|
| 282 |
oos_idx.extend(range(te0, te1))
|
|
|
|
|
|
|
| 283 |
oos_p = np.concatenate(oos_p)
|
| 284 |
oos_idx = np.array(oos_idx)
|
| 285 |
yo, fo = Y.values[oos_idx], F[oos_idx]
|
|
|
|
| 253 |
y = (fwd > 0).astype(float)
|
| 254 |
y[fwd.isna()] = np.nan
|
| 255 |
|
| 256 |
+
feats = feats.dropna(axis=1, how="all") # tamamen boş kolonları at (ör. hacim yoksa)
|
| 257 |
data = feats.copy()
|
| 258 |
data["y"], data["fwd"] = y, fwd
|
| 259 |
data["thr_move"] = (atr / close) * np.sqrt(horizon)
|
| 260 |
+
warm = min(60, len(data) // 5) # gösterge ısınma barları
|
| 261 |
+
train_df = data.iloc[warm:].dropna(subset=["y", "fwd", "thr_move"]).copy()
|
| 262 |
+
# Kalan NaN'ler (uzun pencereli göstergeler) satır silmek yerine doldurulur
|
| 263 |
+
train_df[list(feats.columns)] = train_df[list(feats.columns)].ffill().fillna(0)
|
| 264 |
+
if len(train_df) < 200:
|
| 265 |
+
raise ValueError(
|
| 266 |
+
f"Yeterli veri yok: {len(df)} mum geldi, {len(train_df)} kullanılabilir bar kaldı "
|
| 267 |
+
f"(en az 200 gerekir; ufuk={horizon}). Mum sayısını artır veya borsayı/sembolü kontrol et.")
|
| 268 |
|
| 269 |
cols = list(feats.columns)
|
| 270 |
X, Y = train_df[cols], train_df["y"].astype(int)
|
|
|
|
| 280 |
oos_p, oos_idx = [], []
|
| 281 |
for k in range(n_folds):
|
| 282 |
tr_end, te0, te1 = edges[k] - horizon, edges[k], edges[k + 1]
|
| 283 |
+
if tr_end < 80:
|
| 284 |
continue
|
| 285 |
p = _fit_predict(X.iloc[:tr_end], Y.iloc[:tr_end], X.iloc[te0:te1], W[:tr_end])
|
| 286 |
oos_p.append(p)
|
| 287 |
oos_idx.extend(range(te0, te1))
|
| 288 |
+
if not oos_p:
|
| 289 |
+
raise ValueError("Walk-forward için yeterli veri yok. Mum sayısını artır.")
|
| 290 |
oos_p = np.concatenate(oos_p)
|
| 291 |
oos_idx = np.array(oos_idx)
|
| 292 |
yo, fo = Y.values[oos_idx], F[oos_idx]
|