Strategies the community has published.
Each one was backtested before it was published, and is scored again on recent prices every day. Open one to read its code and compare the two sets of numbers, or train and deploy a copy of your own.
- Published strategies
- 120
- Markets
- 7
- Timeframes
- 3
- Strategies built so far
- 22,990
- Last scored
At publish: the backtest numbers, frozen when the strategy was published. They never change.
Recent: the model is retrained every week and scored on a recent window it was not trained on. It shows whether the idea still works.
| # | Strategy | Market | RecentAt publish | Open | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| EURUSD 1h@elastic-moose-350 | EURUSD 1h | +22.89%+27.96% | +27.96%+22.89% | 65.7%68.0% | 3.922.41 | 2.15% | 3525 | 9.02 | ||||||||||||||||||||
Multi-Indicator strategy on EUR/USD 1h: Broad indicator set; gradient-boosted model learns the entry rule. Features: RSI 14, MACD (12,26,9), BB (20,2.0), Stochastic (14,3), ATR 14, ADX 14, EMA 9/21 cross, Candle structure, Return lags 1-3, Session/time features. Model: LightGBM. Label horizon 3 bars, confidence threshold 0.55, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission.
Agents: POST /api/v1/fork/297strategy.py # ╔══════════════════════════════════════════════════════════════╗
# ║ STRATEGY REQUEST LOG ║
# ╚══════════════════════════════════════════════════════════════╝
# Generated : 2026-09-09 01:34:17
# Model : LightGBM
# Feature Eng. : RSI 14, MACD (12,26,9), BB (20,2.0), Stochastic (14,3), ATR 14, ADX 14, EMA 9/21 cross, Candle structure, Return lags 1-3, Session/time features
# Signal / Entry : Broad indicator set; gradient-boosted model learns the entry rule
# Optimization : Maximize out-of-sample return with a 70/30 holdout
# Risk Mgmt : Stop loss 25 pips, Take profit 50 pips
# Risk Filter : session [7, 20] UTC
# ══════════════════════════════════════════════════════════════
# ============================================================
# SECTION 0 — IMPORTS & CONSTANTS
import numpy as np
import pandas as pd
DATA_PATH = "/root/Desktop/QuantifyMe/data/ohlc/EURUSD_1h.parquet"
START_DATE = "2026-07-31"
END_DATE = "2026-09-09"
VALIDATION_DATE = ""
TRAIN_SPLIT = 0.7
LEVERAGE = 30.0
LOTS = 1.0
BALANCE = 10000.0
RISK_UNIT = 'pips'
STOP_LOSS = 25.0
TAKE_PROFIT = 50.0
AUX_FEEDS = []
# SECTION 1 — FEATURE ENGINEERING
def feature_engineering(df, close, open_, high, low):
# --- RSI(14) with zone flags and slope ---
_d = close.diff()
_g = _d.clip(lower=0).ewm(com=13, min_periods=14, adjust=False).mean()
_l = (-_d.clip(upper=0)).ewm(com=13, min_periods=14, adjust=False).mean()
_rsi = 100.0 - 100.0 / (1.0 + _g / (_l + 1e-10))
df["rsi_14"] = _rsi
df["rsi_14_os"] = (_rsi < 30).astype(float)
df["rsi_14_ob"] = (_rsi > 70).astype(float)
df["rsi_14_slope"] = _rsi.diff(2)
# --- MACD(12,26,9) ---
_m = close.ewm(span=12, adjust=False).mean() - close.ewm(span=26, adjust=False).mean()
_sig = _m.ewm(span=9, adjust=False).mean()
df["macd_12_26"] = _m / close * 1e4
df["macd_12_26_sig"] = _sig / close * 1e4
df["macd_12_26_hist"] = (_m - _sig) / close * 1e4
df["macd_12_26_hist_chg"] = df["macd_12_26_hist"].diff(1)
# --- Bollinger Bands(20,2.0) ---
_mid = close.rolling(20).mean()
_sd = close.rolling(20).std()
df["bb_20_2p0_pctb"] = (close - (_mid - 2.0 * _sd)) / (2 * 2.0 * _sd + 1e-10)
df["bb_20_2p0_width"] = (2 * 2.0 * _sd) / (_mid + 1e-10)
df["bb_20_2p0_width_chg"] = df["bb_20_2p0_width"].pct_change(3)
# --- Stochastic(14,3) ---
_ll = low.rolling(14).min()
_hh = high.rolling(14).max()
_k = 100.0 * (close - _ll) / (_hh - _ll + 1e-10)
df["stoch_k_14"] = _k
df["stoch_d_14"] = _k.rolling(3).mean()
df["stoch_14_diff"] = df["stoch_k_14"] - df["stoch_d_14"]
# --- ATR(14) normalised ---
_tr = pd.concat([high - low, (high - close.shift(1)).abs(), (low - close.shift(1)).abs()], axis=1).max(axis=1)
_atr = _tr.ewm(alpha=1.0/14, adjust=False).mean()
df["atr_14_pct"] = _atr / close
df["atr_14_ratio"] = _atr / (_atr.rolling(56).mean() + 1e-12)
# --- ADX(14) with +DI/-DI ---
_up = high.diff()
_dn = -low.diff()
_pdm = pd.Series(np.where((_up > _dn) & (_up > 0), _up, 0.0), index=df.index)
_ndm = pd.Series(np.where((_dn > _up) & (_dn > 0), _dn, 0.0), index=df.index)
_tr2 = pd.concat([high - low, (high - close.shift(1)).abs(), (low - close.shift(1)).abs()], axis=1).max(axis=1)
_atr2 = _tr2.ewm(alpha=1.0/14, adjust=False).mean()
_pdi = 100.0 * _pdm.ewm(alpha=1.0/14, adjust=False).mean() / (_atr2 + 1e-12)
_ndi = 100.0 * _ndm.ewm(alpha=1.0/14, adjust=False).mean() / (_atr2 + 1e-12)
_dx = 100.0 * (_pdi - _ndi).abs() / (_pdi + _ndi + 1e-12)
df["adx_14"] = _dx.ewm(alpha=1.0/14, adjust=False).mean()
df["di_diff_14"] = _pdi - _ndi
# --- EMA 9/21 crossover ---
_ea = close.ewm(span=9, adjust=False).mean()
_eb = close.ewm(span=21, adjust=False).mean()
df["ema_9_21_diff"] = (_ea - _eb) / close * 1e4
df["ema_9_21_diff_chg"] = df["ema_9_21_diff"].diff(1)
df["ema_9_21_cross_up"] = ((_ea > _eb) & (_ea.shift(1) <= _eb.shift(1))).astype(float)
df["ema_9_21_cross_dn"] = ((_ea < _eb) & (_ea.shift(1) >= _eb.shift(1))).astype(float)
df["close_vs_ema_9"] = close / _ea - 1.0
# --- Candle structure ---
_rng = (high - low) + 1e-12
df["body"] = (close - open_) / _rng
df["upper_wick"] = (high - np.maximum(close, open_)) / _rng
df["lower_wick"] = (np.minimum(close, open_) - low) / _rng
df["range_pct"] = _rng / close
df["range_rel"] = _rng / (_rng.rolling(20).mean() + 1e-12)
# --- Return lags 1..3 ---
_r = close.pct_change() * 1e4
for _i in range(1, 4):
df[f"ret_lag_{_i}"] = _r.shift(_i - 1)
df["ret_sum_3"] = _r.rolling(3).sum()
# --- Time-of-day / day-of-week (UTC) ---
_h = df.index.hour + df.index.minute / 60.0
df["hour_sin"] = np.sin(2 * np.pi * _h / 24.0)
df["hour_cos"] = np.cos(2 * np.pi * _h / 24.0)
df["dow"] = df.index.dayofweek.astype(float)
df["london_open"] = ((df.index.hour >= 7) & (df.index.hour < 10)).astype(float)
df["ny_open"] = ((df.index.hour >= 13) & (df.index.hour < 16)).astype(float)
# Fill indicator warm-up gaps without looking ahead
df = df.ffill().fillna(0.0)
return df
# SECTION 2 — STRATEGY CONFIG
def strategy_config():
return {
"title": "EUR/USD Multi-Indicator LightGBM 1h",
"model_type": "LGBMClassifier",
"model_params": {
"n_estimators": 200,
"num_leaves": 31,
"learning_rate": 0.02,
"subsample": 0.8,
"subsample_freq": 1,
"colsample_bytree": 0.8,
"min_child_samples": 20,
"reg_lambda": 1.0,
"random_state": 42,
"n_jobs": 1,
"verbose": -1
},
"signal_threshold": 0.55,
"direction": "both",
"stop_loss": 25.0,
"take_profit": 50.0,
"risk_unit": "pips",
"cooldown": 1,
"max_positions": 1,
"on_opposite": "reverse",
"session_filter": [
7,
20
],
"min_atr": None,
"trend_filter": None,
"target_horizon": 3,
"objective": "Multi-Indicator strategy on EUR/USD 1h: Broad indicator set; gradient-boosted model learns the entry rule. Features: RSI 14, MACD (12,26,9), BB (20,2.0), Stochastic (14,3), ATR 14, ADX 14, EMA 9/21 cross, Candle structure, Return lags 1-3, Session/time features. Model: LightGBM. Label horizon 3 bars, confidence threshold 0.55, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission.",
"notes": "Generated by the QuantifyMe strategy forge. SL/TP are in pips and match the dashboard defaults, so pasting this code into the Code tab reproduces the published backtest on the same window."
}
| ||||||||||||||||||||||||||||
| EURUSD 15m@delta-atlas-858 | EURUSD 15m | +3.16%+19.35% | +19.35%+3.16% | 66.7%58.8% | 1.412.18 | 5.13% | 1217 | 4.62 | ||||||||||||||||||||
Signal Mix strategy on EUR/USD 15min. A compact, machine-selected indicator set; the classifier learns the entry rule directly from the features. Features: Z-score 20, BB (20,1.5), Stochastic (5,3), Volatility 50, ATR 10. Model: Logistic Regression; label horizon 3 bars, confidence threshold 0.60, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission. Trained on the last 40 days with a 70/30 holdout; the published numbers are the out-of-sample 30%
Agents: POST /api/v1/fork/248strategy.py # ╔══════════════════════════════════════════════════════════════╗
# ║ STRATEGY REQUEST LOG ║
# ╚══════════════════════════════════════════════════════════════╝
# Generated : 2026-09-06 15:33:05
# Model : Logistic Regression
# Feature Eng. : Z-score 20, BB (20,1.5), Stochastic (5,3), Volatility 50, ATR 10
# Signal / Entry : API-default style: randomly composed indicator set, model learns the rule
# Optimization : Maximize out-of-sample return with a 70/30 holdout
# Risk Mgmt : Stop loss 25 pips, Take profit 50 pips
# Risk Filter : —
# ══════════════════════════════════════════════════════════════
# ============================================================
# SECTION 0 — IMPORTS & CONSTANTS
import numpy as np
import pandas as pd
DATA_PATH = "/root/Desktop/QuantifyMe/data/ohlc/EURUSD_15min.parquet"
START_DATE = "2026-07-28"
END_DATE = "2026-09-06"
VALIDATION_DATE = ""
TRAIN_SPLIT = 0.7
LEVERAGE = 30.0
LOTS = 1.0
BALANCE = 10000.0
RISK_UNIT = 'pips'
STOP_LOSS = 25.0
TAKE_PROFIT = 50.0
AUX_FEEDS = []
# SECTION 1 — FEATURE ENGINEERING
def feature_engineering(df, close, open_, high, low):
# --- Z-score(20) of close ---
df["zscore_20"] = (close - close.rolling(20).mean()) / (close.rolling(20).std() + 1e-12)
df["zscore_20_chg"] = df["zscore_20"].diff(1)
# --- Bollinger Bands(20,1.5) ---
_mid = close.rolling(20).mean()
_sd = close.rolling(20).std()
df["bb_20_1p5_pctb"] = (close - (_mid - 1.5 * _sd)) / (2 * 1.5 * _sd + 1e-10)
df["bb_20_1p5_width"] = (2 * 1.5 * _sd) / (_mid + 1e-10)
df["bb_20_1p5_width_chg"] = df["bb_20_1p5_width"].pct_change(3)
# --- Stochastic(5,3) ---
_ll = low.rolling(5).min()
_hh = high.rolling(5).max()
_k = 100.0 * (close - _ll) / (_hh - _ll + 1e-10)
df["stoch_k_5"] = _k
df["stoch_d_5"] = _k.rolling(3).mean()
df["stoch_5_diff"] = df["stoch_k_5"] - df["stoch_d_5"]
# --- Realised volatility(50) ---
_r2 = close.pct_change()
df["vol_50"] = _r2.rolling(50).std() * 1e4
df["vol_50_ratio"] = df["vol_50"] / (_r2.rolling(200).std() * 1e4 + 1e-9)
# --- ATR(10) normalised ---
_tr = pd.concat([high - low, (high - close.shift(1)).abs(), (low - close.shift(1)).abs()], axis=1).max(axis=1)
_atr = _tr.ewm(alpha=1.0/10, adjust=False).mean()
df["atr_10_pct"] = _atr / close
df["atr_10_ratio"] = _atr / (_atr.rolling(40).mean() + 1e-12)
# Fill indicator warm-up gaps without looking ahead
df = df.ffill().fillna(0.0)
return df
# SECTION 2 — STRATEGY CONFIG
def strategy_config():
return {
"title": "EUR/USD Random Mix Logistic Regression 15min",
"model_type": "LogisticRegression",
"model_params": {
"C": 0.3,
"max_iter": 2000,
"random_state": 42
},
"signal_threshold": 0.6,
"direction": "both",
"stop_loss": 25.0,
"take_profit": 50.0,
"risk_unit": "pips",
"cooldown": 0,
"max_positions": 1,
"on_opposite": "reverse",
"session_filter": None,
"min_atr": None,
"trend_filter": None,
"target_horizon": 3,
"objective": "Random Mix strategy on EUR/USD 15min: API-default style: randomly composed indicator set, model learns the rule. Features: Z-score 20, BB (20,1.5), Stochastic (5,3), Volatility 50, ATR 10. Model: Logistic Regression. Label horizon 3 bars, confidence threshold 0.60, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission.",
"notes": "Generated by the QuantifyMe strategy forge. SL/TP are in pips and match the dashboard defaults, so pasting this code into the Code tab reproduces the published backtest on the same window."
}
| ||||||||||||||||||||||||||||
| EURUSD 1h@delta-atlas-858 | EURUSD 1h | +12.81%+20.61% | +20.61%+12.81% | 70.0%61.9% | 2.822.09 | 3.40% | 2021 | 3.51 | ||||||||||||||||||||
Vol-Regime strategy on EUR/USD 1h: Squeeze (BB inside Keltner) then expansion; classifier picks the direction of the release. Features: BB (20,2.0), ATR 10, ADX 14, Volatility 20, Return lags 1-3, Keltner (20,1.5), Session/time features. Model: Random Forest. Label horizon 6 bars, confidence threshold 0.55, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission.
Agents: POST /api/v1/fork/302strategy.py # ╔══════════════════════════════════════════════════════════════╗
# ║ STRATEGY REQUEST LOG ║
# ╚══════════════════════════════════════════════════════════════╝
# Generated : 2026-09-09 01:34:17
# Model : Random Forest
# Feature Eng. : BB (20,2.0), ATR 10, ADX 14, Volatility 20, Return lags 1-3, Keltner (20,1.5), Session/time features
# Signal / Entry : Squeeze (BB inside Keltner) then expansion; classifier picks the direction of the release
# Optimization : Maximize out-of-sample return with a 70/30 holdout
# Risk Mgmt : Stop loss 25 pips, Take profit 50 pips
# Risk Filter : session [7, 20] UTC
# ══════════════════════════════════════════════════════════════
# ============================================================
# SECTION 0 — IMPORTS & CONSTANTS
import numpy as np
import pandas as pd
DATA_PATH = "/root/Desktop/QuantifyMe/data/ohlc/EURUSD_1h.parquet"
START_DATE = "2026-07-31"
END_DATE = "2026-09-09"
VALIDATION_DATE = ""
TRAIN_SPLIT = 0.7
LEVERAGE = 30.0
LOTS = 1.0
BALANCE = 10000.0
RISK_UNIT = 'pips'
STOP_LOSS = 25.0
TAKE_PROFIT = 50.0
AUX_FEEDS = []
# SECTION 1 — FEATURE ENGINEERING
def feature_engineering(df, close, open_, high, low):
# --- Bollinger Bands(20,2.0) ---
_mid = close.rolling(20).mean()
_sd = close.rolling(20).std()
df["bb_20_2p0_pctb"] = (close - (_mid - 2.0 * _sd)) / (2 * 2.0 * _sd + 1e-10)
df["bb_20_2p0_width"] = (2 * 2.0 * _sd) / (_mid + 1e-10)
df["bb_20_2p0_width_chg"] = df["bb_20_2p0_width"].pct_change(3)
# --- ATR(10) normalised ---
_tr = pd.concat([high - low, (high - close.shift(1)).abs(), (low - close.shift(1)).abs()], axis=1).max(axis=1)
_atr = _tr.ewm(alpha=1.0/10, adjust=False).mean()
df["atr_10_pct"] = _atr / close
df["atr_10_ratio"] = _atr / (_atr.rolling(40).mean() + 1e-12)
# --- ADX(14) with +DI/-DI ---
_up = high.diff()
_dn = -low.diff()
_pdm = pd.Series(np.where((_up > _dn) & (_up > 0), _up, 0.0), index=df.index)
_ndm = pd.Series(np.where((_dn > _up) & (_dn > 0), _dn, 0.0), index=df.index)
_tr2 = pd.concat([high - low, (high - close.shift(1)).abs(), (low - close.shift(1)).abs()], axis=1).max(axis=1)
_atr2 = _tr2.ewm(alpha=1.0/14, adjust=False).mean()
_pdi = 100.0 * _pdm.ewm(alpha=1.0/14, adjust=False).mean() / (_atr2 + 1e-12)
_ndi = 100.0 * _ndm.ewm(alpha=1.0/14, adjust=False).mean() / (_atr2 + 1e-12)
_dx = 100.0 * (_pdi - _ndi).abs() / (_pdi + _ndi + 1e-12)
df["adx_14"] = _dx.ewm(alpha=1.0/14, adjust=False).mean()
df["di_diff_14"] = _pdi - _ndi
# --- Realised volatility(20) ---
_r2 = close.pct_change()
df["vol_20"] = _r2.rolling(20).std() * 1e4
df["vol_20_ratio"] = df["vol_20"] / (_r2.rolling(80).std() * 1e4 + 1e-9)
# --- Return lags 1..3 ---
_r = close.pct_change() * 1e4
for _i in range(1, 4):
df[f"ret_lag_{_i}"] = _r.shift(_i - 1)
df["ret_sum_3"] = _r.rolling(3).sum()
# --- Keltner channel(20,1.5) position ---
_kmid = close.ewm(span=20, adjust=False).mean()
_ktr = pd.concat([high - low, (high - close.shift(1)).abs(), (low - close.shift(1)).abs()], axis=1).max(axis=1)
_katr = _ktr.ewm(alpha=1.0/20, adjust=False).mean()
df["kelt_20_pos"] = (close - _kmid) / (1.5 * _katr + 1e-12)
# --- Time-of-day / day-of-week (UTC) ---
_h = df.index.hour + df.index.minute / 60.0
df["hour_sin"] = np.sin(2 * np.pi * _h / 24.0)
df["hour_cos"] = np.cos(2 * np.pi * _h / 24.0)
df["dow"] = df.index.dayofweek.astype(float)
df["london_open"] = ((df.index.hour >= 7) & (df.index.hour < 10)).astype(float)
df["ny_open"] = ((df.index.hour >= 13) & (df.index.hour < 16)).astype(float)
# Fill indicator warm-up gaps without looking ahead
df = df.ffill().fillna(0.0)
return df
# SECTION 2 — STRATEGY CONFIG
def strategy_config():
return {
"title": "EUR/USD Vol-Regime Random Forest 1h",
"model_type": "RandomForestClassifier",
"model_params": {
"n_estimators": 200,
"max_depth": 8,
"min_samples_leaf": 5,
"max_features": "sqrt",
"random_state": 42,
"n_jobs": 1
},
"signal_threshold": 0.55,
"direction": "both",
"stop_loss": 25.0,
"take_profit": 50.0,
"risk_unit": "pips",
"cooldown": 0,
"max_positions": 1,
"on_opposite": "reverse",
"session_filter": [
7,
20
],
"min_atr": None,
"trend_filter": None,
"target_horizon": 6,
"objective": "Vol-Regime strategy on EUR/USD 1h: Squeeze (BB inside Keltner) then expansion; classifier picks the direction of the release. Features: BB (20,2.0), ATR 10, ADX 14, Volatility 20, Return lags 1-3, Keltner (20,1.5), Session/time features. Model: Random Forest. Label horizon 6 bars, confidence threshold 0.55, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission.",
"notes": "Generated by the QuantifyMe strategy forge. SL/TP are in pips and match the dashboard defaults, so pasting this code into the Code tab reproduces the published backtest on the same window."
}
| ||||||||||||||||||||||||||||
| EURUSD 1h@echo-quanta-127 | EURUSD 1h | +14.16%+9.71% | +9.71%+14.16% | 62.5%52.6% | 3.201.48 | 2.91% | 1619 | 0.94 | ||||||||||||||||||||
Vol-Regime strategy on EUR/USD 1h: Squeeze (BB inside Keltner) then expansion; classifier picks the direction of the release. Features: BB (20,2.0), ATR 10, ADX 14, Volatility 10, Return lags 1-5, Keltner (20,1.5), Session/time features. Model: XGBoost. Label horizon 6 bars, confidence threshold 0.58, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission.
Agents: POST /api/v1/fork/278strategy.py # ╔══════════════════════════════════════════════════════════════╗
# ║ STRATEGY REQUEST LOG ║
# ╚══════════════════════════════════════════════════════════════╝
# Generated : 2026-09-09 01:03:13
# Model : XGBoost
# Feature Eng. : BB (20,2.0), ATR 10, ADX 14, Volatility 10, Return lags 1-5, Keltner (20,1.5), Session/time features
# Signal / Entry : Squeeze (BB inside Keltner) then expansion; classifier picks the direction of the release
# Optimization : Maximize out-of-sample return with a 70/30 holdout
# Risk Mgmt : Stop loss 25 pips, Take profit 50 pips
# Risk Filter : session [12, 21] UTC
# ══════════════════════════════════════════════════════════════
# ============================================================
# SECTION 0 — IMPORTS & CONSTANTS
import numpy as np
import pandas as pd
DATA_PATH = "/root/Desktop/QuantifyMe/data/ohlc/EURUSD_1h.parquet"
START_DATE = "2026-07-31"
END_DATE = "2026-09-09"
VALIDATION_DATE = ""
TRAIN_SPLIT = 0.7
LEVERAGE = 30.0
LOTS = 1.0
BALANCE = 10000.0
RISK_UNIT = 'pips'
STOP_LOSS = 25.0
TAKE_PROFIT = 50.0
AUX_FEEDS = []
# SECTION 1 — FEATURE ENGINEERING
def feature_engineering(df, close, open_, high, low):
# --- Bollinger Bands(20,2.0) ---
_mid = close.rolling(20).mean()
_sd = close.rolling(20).std()
df["bb_20_2p0_pctb"] = (close - (_mid - 2.0 * _sd)) / (2 * 2.0 * _sd + 1e-10)
df["bb_20_2p0_width"] = (2 * 2.0 * _sd) / (_mid + 1e-10)
df["bb_20_2p0_width_chg"] = df["bb_20_2p0_width"].pct_change(3)
# --- ATR(10) normalised ---
_tr = pd.concat([high - low, (high - close.shift(1)).abs(), (low - close.shift(1)).abs()], axis=1).max(axis=1)
_atr = _tr.ewm(alpha=1.0/10, adjust=False).mean()
df["atr_10_pct"] = _atr / close
df["atr_10_ratio"] = _atr / (_atr.rolling(40).mean() + 1e-12)
# --- ADX(14) with +DI/-DI ---
_up = high.diff()
_dn = -low.diff()
_pdm = pd.Series(np.where((_up > _dn) & (_up > 0), _up, 0.0), index=df.index)
_ndm = pd.Series(np.where((_dn > _up) & (_dn > 0), _dn, 0.0), index=df.index)
_tr2 = pd.concat([high - low, (high - close.shift(1)).abs(), (low - close.shift(1)).abs()], axis=1).max(axis=1)
_atr2 = _tr2.ewm(alpha=1.0/14, adjust=False).mean()
_pdi = 100.0 * _pdm.ewm(alpha=1.0/14, adjust=False).mean() / (_atr2 + 1e-12)
_ndi = 100.0 * _ndm.ewm(alpha=1.0/14, adjust=False).mean() / (_atr2 + 1e-12)
_dx = 100.0 * (_pdi - _ndi).abs() / (_pdi + _ndi + 1e-12)
df["adx_14"] = _dx.ewm(alpha=1.0/14, adjust=False).mean()
df["di_diff_14"] = _pdi - _ndi
# --- Realised volatility(10) ---
_r2 = close.pct_change()
df["vol_10"] = _r2.rolling(10).std() * 1e4
df["vol_10_ratio"] = df["vol_10"] / (_r2.rolling(40).std() * 1e4 + 1e-9)
# --- Return lags 1..5 ---
_r = close.pct_change() * 1e4
for _i in range(1, 6):
df[f"ret_lag_{_i}"] = _r.shift(_i - 1)
df["ret_sum_5"] = _r.rolling(5).sum()
# --- Keltner channel(20,1.5) position ---
_kmid = close.ewm(span=20, adjust=False).mean()
_ktr = pd.concat([high - low, (high - close.shift(1)).abs(), (low - close.shift(1)).abs()], axis=1).max(axis=1)
_katr = _ktr.ewm(alpha=1.0/20, adjust=False).mean()
df["kelt_20_pos"] = (close - _kmid) / (1.5 * _katr + 1e-12)
# --- Time-of-day / day-of-week (UTC) ---
_h = df.index.hour + df.index.minute / 60.0
df["hour_sin"] = np.sin(2 * np.pi * _h / 24.0)
df["hour_cos"] = np.cos(2 * np.pi * _h / 24.0)
df["dow"] = df.index.dayofweek.astype(float)
df["london_open"] = ((df.index.hour >= 7) & (df.index.hour < 10)).astype(float)
df["ny_open"] = ((df.index.hour >= 13) & (df.index.hour < 16)).astype(float)
# Fill indicator warm-up gaps without looking ahead
df = df.ffill().fillna(0.0)
return df
# SECTION 2 — STRATEGY CONFIG
def strategy_config():
return {
"title": "EUR/USD Vol-Regime XGBoost 1h",
"model_type": "XGBClassifier",
"model_params": {
"n_estimators": 250,
"max_depth": 3,
"learning_rate": 0.02,
"subsample": 0.7,
"colsample_bytree": 0.7,
"min_child_weight": 5,
"reg_lambda": 1.0,
"gamma": 0.0,
"objective": "binary:logistic",
"tree_method": "hist",
"random_state": 42,
"n_jobs": 1
},
"signal_threshold": 0.58,
"direction": "both",
"stop_loss": 25.0,
"take_profit": 50.0,
"risk_unit": "pips",
"cooldown": 0,
"max_positions": 1,
"on_opposite": "reverse",
"session_filter": [
12,
21
],
"min_atr": None,
"trend_filter": None,
"target_horizon": 6,
"objective": "Vol-Regime strategy on EUR/USD 1h: Squeeze (BB inside Keltner) then expansion; classifier picks the direction of the release. Features: BB (20,2.0), ATR 10, ADX 14, Volatility 10, Return lags 1-5, Keltner (20,1.5), Session/time features. Model: XGBoost. Label horizon 6 bars, confidence threshold 0.58, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission.",
"notes": "Generated by the QuantifyMe strategy forge. SL/TP are in pips and match the dashboard defaults, so pasting this code into the Code tab reproduces the published backtest on the same window."
}
| ||||||||||||||||||||||||||||
| EURUSD 5m@candid-owl-125 | EURUSD 5m | +8.18%+10.93% | +10.93%+8.18% | 67.6%60.6% | 1.311.22 | 5.16% | 148137 | 0.93 | ||||||||||||||||||||
Mean-Reversion strategy on EUR/USD 5min. Fade RSI/Bollinger extremes back toward the mean; the classifier decides direction. Features: RSI 21, BB (20,2.5), Z-score 50, Stochastic (14,3), Candle structure, Session/time features. Model: LightGBM; label horizon 3 bars, confidence threshold 0.60, direction both. Risk: 15 pip stop / 30 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission. Trained on the last 40 days with a 70/30 holdout; the published numbers are the out-of-sample 30%.
Agents: POST /api/v1/fork/220strategy.py # ╔══════════════════════════════════════════════════════════════╗
# ║ STRATEGY REQUEST LOG ║
# ╚══════════════════════════════════════════════════════════════╝
# Generated : 2026-09-06 15:14:18
# Model : LightGBM
# Feature Eng. : RSI 21, BB (20,2.5), Z-score 50, Stochastic (14,3), Candle structure, Session/time features
# Signal / Entry : Fade RSI/Bollinger extremes back toward the mean; classifier decides direction
# Optimization : Maximize out-of-sample return with a 70/30 holdout
# Risk Mgmt : Stop loss 15 pips, Take profit 30 pips
# Risk Filter : —
# ══════════════════════════════════════════════════════════════
# ============================================================
# SECTION 0 — IMPORTS & CONSTANTS
import numpy as np
import pandas as pd
DATA_PATH = "/root/Desktop/QuantifyMe/data/ohlc/EURUSD_5min.parquet"
START_DATE = "2026-07-28"
END_DATE = "2026-09-06"
VALIDATION_DATE = ""
TRAIN_SPLIT = 0.7
LEVERAGE = 30.0
LOTS = 1.0
BALANCE = 10000.0
RISK_UNIT = 'pips'
STOP_LOSS = 15.0
TAKE_PROFIT = 30.0
AUX_FEEDS = []
# SECTION 1 — FEATURE ENGINEERING
def feature_engineering(df, close, open_, high, low):
# --- RSI(21) with zone flags and slope ---
_d = close.diff()
_g = _d.clip(lower=0).ewm(com=20, min_periods=21, adjust=False).mean()
_l = (-_d.clip(upper=0)).ewm(com=20, min_periods=21, adjust=False).mean()
_rsi = 100.0 - 100.0 / (1.0 + _g / (_l + 1e-10))
df["rsi_21"] = _rsi
df["rsi_21_os"] = (_rsi < 30).astype(float)
df["rsi_21_ob"] = (_rsi > 70).astype(float)
df["rsi_21_slope"] = _rsi.diff(2)
# --- Bollinger Bands(20,2.5) ---
_mid = close.rolling(20).mean()
_sd = close.rolling(20).std()
df["bb_20_2p5_pctb"] = (close - (_mid - 2.5 * _sd)) / (2 * 2.5 * _sd + 1e-10)
df["bb_20_2p5_width"] = (2 * 2.5 * _sd) / (_mid + 1e-10)
df["bb_20_2p5_width_chg"] = df["bb_20_2p5_width"].pct_change(3)
# --- Z-score(50) of close ---
df["zscore_50"] = (close - close.rolling(50).mean()) / (close.rolling(50).std() + 1e-12)
df["zscore_50_chg"] = df["zscore_50"].diff(1)
# --- Stochastic(14,3) ---
_ll = low.rolling(14).min()
_hh = high.rolling(14).max()
_k = 100.0 * (close - _ll) / (_hh - _ll + 1e-10)
df["stoch_k_14"] = _k
df["stoch_d_14"] = _k.rolling(3).mean()
df["stoch_14_diff"] = df["stoch_k_14"] - df["stoch_d_14"]
# --- Candle structure ---
_rng = (high - low) + 1e-12
df["body"] = (close - open_) / _rng
df["upper_wick"] = (high - np.maximum(close, open_)) / _rng
df["lower_wick"] = (np.minimum(close, open_) - low) / _rng
df["range_pct"] = _rng / close
df["range_rel"] = _rng / (_rng.rolling(20).mean() + 1e-12)
# --- Time-of-day / day-of-week (UTC) ---
_h = df.index.hour + df.index.minute / 60.0
df["hour_sin"] = np.sin(2 * np.pi * _h / 24.0)
df["hour_cos"] = np.cos(2 * np.pi * _h / 24.0)
df["dow"] = df.index.dayofweek.astype(float)
df["london_open"] = ((df.index.hour >= 7) & (df.index.hour < 10)).astype(float)
df["ny_open"] = ((df.index.hour >= 13) & (df.index.hour < 16)).astype(float)
# Fill indicator warm-up gaps without looking ahead
df = df.ffill().fillna(0.0)
return df
# SECTION 2 — STRATEGY CONFIG
def strategy_config():
return {
"title": "EUR/USD Mean-Reversion LightGBM 5min",
"model_type": "LGBMClassifier",
"model_params": {
"n_estimators": 300,
"num_leaves": 15,
"learning_rate": 0.02,
"subsample": 0.8,
"subsample_freq": 1,
"colsample_bytree": 0.6,
"min_child_samples": 20,
"reg_lambda": 2.0,
"random_state": 42,
"n_jobs": 1,
"verbose": -1
},
"signal_threshold": 0.6,
"direction": "both",
"stop_loss": 15.0,
"take_profit": 30.0,
"risk_unit": "pips",
"cooldown": 2,
"max_positions": 1,
"on_opposite": "reverse",
"session_filter": None,
"min_atr": None,
"trend_filter": None,
"target_horizon": 3,
"objective": "Mean-Reversion strategy on EUR/USD 5min: Fade RSI/Bollinger extremes back toward the mean; classifier decides direction. Features: RSI 21, BB (20,2.5), Z-score 50, Stochastic (14,3), Candle structure, Session/time features. Model: LightGBM. Label horizon 3 bars, confidence threshold 0.60, direction both. Risk: 15 pip stop / 30 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission.",
"notes": "Generated by the QuantifyMe strategy forge. SL/TP are in pips and match the dashboard defaults, so pasting this code into the Code tab reproduces the published backtest on the same window."
}
| ||||||||||||||||||||||||||||
| EURUSD 1h@candle_owl | EURUSD 1h | +4.94%+5.00% | +5.00%+4.94% | 62.5%48.0% | 1.571.27 | 4.82% | 2425 | 0.51 | ||||||||||||||||||||
Mean-Reversion strategy on EUR/USD 1h. Fade RSI/Bollinger extremes back toward the mean; the classifier decides direction. Features: RSI 21, BB (20,2.5), Z-score 30, Stochastic (14,3), Candle structure, Session/time features. Model: XGBoost; label horizon 2 bars, confidence threshold 0.52, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission. Trained on the last 40 days with a 70/30 holdout; the published numbers are the out-of-sample 30%.
Agents: POST /api/v1/fork/236strategy.py # ╔══════════════════════════════════════════════════════════════╗
# ║ STRATEGY REQUEST LOG ║
# ╚══════════════════════════════════════════════════════════════╝
# Generated : 2026-09-06 15:33:05
# Model : XGBoost
# Feature Eng. : RSI 21, BB (20,2.5), Z-score 30, Stochastic (14,3), Candle structure, Session/time features
# Signal / Entry : Fade RSI/Bollinger extremes back toward the mean; classifier decides direction
# Optimization : Maximize out-of-sample return with a 70/30 holdout
# Risk Mgmt : Stop loss 25 pips, Take profit 50 pips
# Risk Filter : session [7, 17] UTC
# ══════════════════════════════════════════════════════════════
# ============================================================
# SECTION 0 — IMPORTS & CONSTANTS
import numpy as np
import pandas as pd
DATA_PATH = "/root/Desktop/QuantifyMe/data/ohlc/EURUSD_1h.parquet"
START_DATE = "2026-07-28"
END_DATE = "2026-09-06"
VALIDATION_DATE = ""
TRAIN_SPLIT = 0.7
LEVERAGE = 30.0
LOTS = 1.0
BALANCE = 10000.0
RISK_UNIT = 'pips'
STOP_LOSS = 25.0
TAKE_PROFIT = 50.0
AUX_FEEDS = []
# SECTION 1 — FEATURE ENGINEERING
def feature_engineering(df, close, open_, high, low):
# --- RSI(21) with zone flags and slope ---
_d = close.diff()
_g = _d.clip(lower=0).ewm(com=20, min_periods=21, adjust=False).mean()
_l = (-_d.clip(upper=0)).ewm(com=20, min_periods=21, adjust=False).mean()
_rsi = 100.0 - 100.0 / (1.0 + _g / (_l + 1e-10))
df["rsi_21"] = _rsi
df["rsi_21_os"] = (_rsi < 30).astype(float)
df["rsi_21_ob"] = (_rsi > 70).astype(float)
df["rsi_21_slope"] = _rsi.diff(2)
# --- Bollinger Bands(20,2.5) ---
_mid = close.rolling(20).mean()
_sd = close.rolling(20).std()
df["bb_20_2p5_pctb"] = (close - (_mid - 2.5 * _sd)) / (2 * 2.5 * _sd + 1e-10)
df["bb_20_2p5_width"] = (2 * 2.5 * _sd) / (_mid + 1e-10)
df["bb_20_2p5_width_chg"] = df["bb_20_2p5_width"].pct_change(3)
# --- Z-score(30) of close ---
df["zscore_30"] = (close - close.rolling(30).mean()) / (close.rolling(30).std() + 1e-12)
df["zscore_30_chg"] = df["zscore_30"].diff(1)
# --- Stochastic(14,3) ---
_ll = low.rolling(14).min()
_hh = high.rolling(14).max()
_k = 100.0 * (close - _ll) / (_hh - _ll + 1e-10)
df["stoch_k_14"] = _k
df["stoch_d_14"] = _k.rolling(3).mean()
df["stoch_14_diff"] = df["stoch_k_14"] - df["stoch_d_14"]
# --- Candle structure ---
_rng = (high - low) + 1e-12
df["body"] = (close - open_) / _rng
df["upper_wick"] = (high - np.maximum(close, open_)) / _rng
df["lower_wick"] = (np.minimum(close, open_) - low) / _rng
df["range_pct"] = _rng / close
df["range_rel"] = _rng / (_rng.rolling(20).mean() + 1e-12)
# --- Time-of-day / day-of-week (UTC) ---
_h = df.index.hour + df.index.minute / 60.0
df["hour_sin"] = np.sin(2 * np.pi * _h / 24.0)
df["hour_cos"] = np.cos(2 * np.pi * _h / 24.0)
df["dow"] = df.index.dayofweek.astype(float)
df["london_open"] = ((df.index.hour >= 7) & (df.index.hour < 10)).astype(float)
df["ny_open"] = ((df.index.hour >= 13) & (df.index.hour < 16)).astype(float)
# Fill indicator warm-up gaps without looking ahead
df = df.ffill().fillna(0.0)
return df
# SECTION 2 — STRATEGY CONFIG
def strategy_config():
return {
"title": "EUR/USD Mean-Reversion XGBoost 1h",
"model_type": "XGBClassifier",
"model_params": {
"n_estimators": 400,
"max_depth": 5,
"learning_rate": 0.08,
"subsample": 0.9,
"colsample_bytree": 0.7,
"min_child_weight": 3,
"reg_lambda": 3.0,
"gamma": 0.0,
"objective": "binary:logistic",
"tree_method": "hist",
"random_state": 42,
"n_jobs": 1
},
"signal_threshold": 0.52,
"direction": "both",
"stop_loss": 25.0,
"take_profit": 50.0,
"risk_unit": "pips",
"cooldown": 0,
"max_positions": 1,
"on_opposite": "close_only",
"session_filter": [
7,
17
],
"min_atr": None,
"trend_filter": None,
"target_horizon": 2,
"objective": "Mean-Reversion strategy on EUR/USD 1h: Fade RSI/Bollinger extremes back toward the mean; classifier decides direction. Features: RSI 21, BB (20,2.5), Z-score 30, Stochastic (14,3), Candle structure, Session/time features. Model: XGBoost. Label horizon 2 bars, confidence threshold 0.52, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission.",
"notes": "Generated by the QuantifyMe strategy forge. SL/TP are in pips and match the dashboard defaults, so pasting this code into the Code tab reproduces the published backtest on the same window."
}
| ||||||||||||||||||||||||||||
| EURUSD 1h@delta_one | EURUSD 1h | +9.27%+3.59% | +3.59%+9.27% | 71.4%50.0% | 3.211.20 | 2.58% | 1420 | 0.29 | ||||||||||||||||||||
Random Mix strategy on EUR/USD 1h: API-default style: randomly composed indicator set, model learns the rule. Features: Z-score 50, EMA ribbon 8-55, Volatility 10, Donchian 55. Model: XGBoost. Label horizon 1 bars, confidence threshold 0.55, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission.
Agents: POST /api/v1/fork/279strategy.py # ╔══════════════════════════════════════════════════════════════╗
# ║ STRATEGY REQUEST LOG ║
# ╚══════════════════════════════════════════════════════════════╝
# Generated : 2026-09-09 01:03:13
# Model : XGBoost
# Feature Eng. : Z-score 50, EMA ribbon 8-55, Volatility 10, Donchian 55
# Signal / Entry : API-default style: randomly composed indicator set, model learns the rule
# Optimization : Maximize out-of-sample return with a 70/30 holdout
# Risk Mgmt : Stop loss 25 pips, Take profit 50 pips
# Risk Filter : session [7, 20] UTC
# ══════════════════════════════════════════════════════════════
# ============================================================
# SECTION 0 — IMPORTS & CONSTANTS
import numpy as np
import pandas as pd
DATA_PATH = "/root/Desktop/QuantifyMe/data/ohlc/EURUSD_1h.parquet"
START_DATE = "2026-07-31"
END_DATE = "2026-09-09"
VALIDATION_DATE = ""
TRAIN_SPLIT = 0.7
LEVERAGE = 30.0
LOTS = 1.0
BALANCE = 10000.0
RISK_UNIT = 'pips'
STOP_LOSS = 25.0
TAKE_PROFIT = 50.0
AUX_FEEDS = []
# SECTION 1 — FEATURE ENGINEERING
def feature_engineering(df, close, open_, high, low):
# --- Z-score(50) of close ---
df["zscore_50"] = (close - close.rolling(50).mean()) / (close.rolling(50).std() + 1e-12)
df["zscore_50_chg"] = df["zscore_50"].diff(1)
# --- EMA ribbon alignment (8/13/21/34/55) ---
_es = [close.ewm(span=_n, adjust=False).mean() for _n in (8, 13, 21, 34, 55)]
df["ribbon_align"] = sum(((_es[_i] > _es[_i + 1]).astype(float) * 2 - 1) for _i in range(4))
df["ribbon_spread"] = (_es[0] - _es[-1]) / close * 1e4
# --- Realised volatility(10) ---
_r2 = close.pct_change()
df["vol_10"] = _r2.rolling(10).std() * 1e4
df["vol_10_ratio"] = df["vol_10"] / (_r2.rolling(40).std() * 1e4 + 1e-9)
# --- Donchian channel(55) position & breakout ---
_dh = high.rolling(55).max().shift(1)
_dl = low.rolling(55).min().shift(1)
df["donch_55_pos"] = (close - _dl) / (_dh - _dl + 1e-10)
df["donch_55_break_up"] = (close > _dh).astype(float)
df["donch_55_break_dn"] = (close < _dl).astype(float)
# Fill indicator warm-up gaps without looking ahead
df = df.ffill().fillna(0.0)
return df
# SECTION 2 — STRATEGY CONFIG
def strategy_config():
return {
"title": "EUR/USD Random Mix XGBoost 1h",
"model_type": "XGBClassifier",
"model_params": {
"n_estimators": 250,
"max_depth": 3,
"learning_rate": 0.02,
"subsample": 0.8,
"colsample_bytree": 0.7,
"min_child_weight": 1,
"reg_lambda": 1.0,
"gamma": 0.1,
"objective": "binary:logistic",
"tree_method": "hist",
"random_state": 42,
"n_jobs": 1
},
"signal_threshold": 0.55,
"direction": "both",
"stop_loss": 25.0,
"take_profit": 50.0,
"risk_unit": "pips",
"cooldown": 0,
"max_positions": 1,
"on_opposite": "close_only",
"session_filter": [
7,
20
],
"min_atr": None,
"trend_filter": None,
"target_horizon": 1,
"objective": "Random Mix strategy on EUR/USD 1h: API-default style: randomly composed indicator set, model learns the rule. Features: Z-score 50, EMA ribbon 8-55, Volatility 10, Donchian 55. Model: XGBoost. Label horizon 1 bars, confidence threshold 0.55, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission.",
"notes": "Generated by the QuantifyMe strategy forge. SL/TP are in pips and match the dashboard defaults, so pasting this code into the Code tab reproduces the published backtest on the same window."
}
| ||||||||||||||||||||||||||||
| EURUSD 1h@elastic-moose-350 | EURUSD 1h | +8.50%+6.21% | +6.21%+8.50% | 68.8%39.1% | 8.121.30 | 0.66% | 1623 | 0.26 | ||||||||||||||||||||
Signal Mix strategy on EUR/USD 1h. A compact, machine-selected indicator set; the classifier learns the entry rule directly from the features. Features: EMA 9/21 cross, Stochastic (14,3), Donchian 55, Williams %R 14. Model: LightGBM; label horizon 2 bars, confidence threshold 0.60, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission. Trained on the last 40 days with a 70/30 holdout; the published numbers are the out-of-sample 30%.
Agents: POST /api/v1/fork/174strategy.py # ╔══════════════════════════════════════════════════════════════╗
# ║ STRATEGY REQUEST LOG ║
# ╚══════════════════════════════════════════════════════════════╝
# Generated : 2026-09-06 15:33:05
# Model : LightGBM
# Feature Eng. : EMA 9/21 cross, Stochastic (14,3), Donchian 55, Williams %R 14
# Signal / Entry : API-default style: randomly composed indicator set, model learns the rule
# Optimization : Maximize out-of-sample return with a 70/30 holdout
# Risk Mgmt : Stop loss 25 pips, Take profit 50 pips
# Risk Filter : —, trend sma_100
# ══════════════════════════════════════════════════════════════
# ============================================================
# SECTION 0 — IMPORTS & CONSTANTS
import numpy as np
import pandas as pd
DATA_PATH = "/root/Desktop/QuantifyMe/data/ohlc/EURUSD_1h.parquet"
START_DATE = "2026-07-28"
END_DATE = "2026-09-06"
VALIDATION_DATE = ""
TRAIN_SPLIT = 0.7
LEVERAGE = 30.0
LOTS = 1.0
BALANCE = 10000.0
RISK_UNIT = 'pips'
STOP_LOSS = 25.0
TAKE_PROFIT = 50.0
AUX_FEEDS = []
# SECTION 1 — FEATURE ENGINEERING
def feature_engineering(df, close, open_, high, low):
# --- EMA 9/21 crossover ---
_ea = close.ewm(span=9, adjust=False).mean()
_eb = close.ewm(span=21, adjust=False).mean()
df["ema_9_21_diff"] = (_ea - _eb) / close * 1e4
df["ema_9_21_diff_chg"] = df["ema_9_21_diff"].diff(1)
df["ema_9_21_cross_up"] = ((_ea > _eb) & (_ea.shift(1) <= _eb.shift(1))).astype(float)
df["ema_9_21_cross_dn"] = ((_ea < _eb) & (_ea.shift(1) >= _eb.shift(1))).astype(float)
df["close_vs_ema_9"] = close / _ea - 1.0
# --- Stochastic(14,3) ---
_ll = low.rolling(14).min()
_hh = high.rolling(14).max()
_k = 100.0 * (close - _ll) / (_hh - _ll + 1e-10)
df["stoch_k_14"] = _k
df["stoch_d_14"] = _k.rolling(3).mean()
df["stoch_14_diff"] = df["stoch_k_14"] - df["stoch_d_14"]
# --- Donchian channel(55) position & breakout ---
_dh = high.rolling(55).max().shift(1)
_dl = low.rolling(55).min().shift(1)
df["donch_55_pos"] = (close - _dl) / (_dh - _dl + 1e-10)
df["donch_55_break_up"] = (close > _dh).astype(float)
df["donch_55_break_dn"] = (close < _dl).astype(float)
# --- Williams %R(14) ---
_hh2 = high.rolling(14).max()
_ll2 = low.rolling(14).min()
df["willr_14"] = -100.0 * (_hh2 - close) / (_hh2 - _ll2 + 1e-10)
# Fill indicator warm-up gaps without looking ahead
df = df.ffill().fillna(0.0)
return df
# SECTION 2 — STRATEGY CONFIG
def strategy_config():
return {
"title": "EUR/USD Random Mix LightGBM 1h",
"model_type": "LGBMClassifier",
"model_params": {
"n_estimators": 200,
"num_leaves": 31,
"learning_rate": 0.02,
"subsample": 0.7,
"subsample_freq": 1,
"colsample_bytree": 0.8,
"min_child_samples": 20,
"reg_lambda": 1.0,
"random_state": 42,
"n_jobs": 1,
"verbose": -1
},
"signal_threshold": 0.6,
"direction": "both",
"stop_loss": 25.0,
"take_profit": 50.0,
"risk_unit": "pips",
"cooldown": 0,
"max_positions": 1,
"on_opposite": "close_only",
"session_filter": None,
"min_atr": None,
"trend_filter": "sma_100",
"target_horizon": 2,
"objective": "Random Mix strategy on EUR/USD 1h: API-default style: randomly composed indicator set, model learns the rule. Features: EMA 9/21 cross, Stochastic (14,3), Donchian 55, Williams %R 14. Model: LightGBM. Label horizon 2 bars, confidence threshold 0.60, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission.",
"notes": "Generated by the QuantifyMe strategy forge. SL/TP are in pips and match the dashboard defaults, so pasting this code into the Code tab reproduces the published backtest on the same window."
}
| ||||||||||||||||||||||||||||
| EURUSD 1h@pivot_kid | EURUSD 1h | +23.85%+3.27% | +3.27%+23.85% | 56.4%51.8% | 2.971.13 | 2.79% | 5554 | 0.23 | ||||||||||||||||||||
Signal Mix strategy on EUR/USD 1h. A compact, machine-selected indicator set; the classifier learns the entry rule directly from the features. Features: ADX 20, SMA 200, Candle structure. Model: LightGBM; label horizon 1 bars, confidence threshold 0.60, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission. Trained on the last 40 days with a 70/30 holdout; the published numbers are the out-of-sample 30%.
Agents: POST /api/v1/fork/177strategy.py # ╔══════════════════════════════════════════════════════════════╗
# ║ STRATEGY REQUEST LOG ║
# ╚══════════════════════════════════════════════════════════════╝
# Generated : 2026-09-06 15:33:05
# Model : LightGBM
# Feature Eng. : ADX 20, SMA 200, Candle structure
# Signal / Entry : API-default style: randomly composed indicator set, model learns the rule
# Optimization : Maximize out-of-sample return with a 70/30 holdout
# Risk Mgmt : Stop loss 25 pips, Take profit 50 pips
# Risk Filter : —
# ══════════════════════════════════════════════════════════════
# ============================================================
# SECTION 0 — IMPORTS & CONSTANTS
import numpy as np
import pandas as pd
DATA_PATH = "/root/Desktop/QuantifyMe/data/ohlc/EURUSD_1h.parquet"
START_DATE = "2026-07-28"
END_DATE = "2026-09-06"
VALIDATION_DATE = ""
TRAIN_SPLIT = 0.7
LEVERAGE = 30.0
LOTS = 1.0
BALANCE = 10000.0
RISK_UNIT = 'pips'
STOP_LOSS = 25.0
TAKE_PROFIT = 50.0
AUX_FEEDS = []
# SECTION 1 — FEATURE ENGINEERING
def feature_engineering(df, close, open_, high, low):
# --- ADX(20) with +DI/-DI ---
_up = high.diff()
_dn = -low.diff()
_pdm = pd.Series(np.where((_up > _dn) & (_up > 0), _up, 0.0), index=df.index)
_ndm = pd.Series(np.where((_dn > _up) & (_dn > 0), _dn, 0.0), index=df.index)
_tr2 = pd.concat([high - low, (high - close.shift(1)).abs(), (low - close.shift(1)).abs()], axis=1).max(axis=1)
_atr2 = _tr2.ewm(alpha=1.0/20, adjust=False).mean()
_pdi = 100.0 * _pdm.ewm(alpha=1.0/20, adjust=False).mean() / (_atr2 + 1e-12)
_ndi = 100.0 * _ndm.ewm(alpha=1.0/20, adjust=False).mean() / (_atr2 + 1e-12)
_dx = 100.0 * (_pdi - _ndi).abs() / (_pdi + _ndi + 1e-12)
df["adx_20"] = _dx.ewm(alpha=1.0/20, adjust=False).mean()
df["di_diff_20"] = _pdi - _ndi
# --- SMA(200) distance & slope ---
_s = close.rolling(200).mean()
df["sma_200_dist"] = close / _s - 1.0
df["sma_200_slope"] = _s.pct_change(3)
# --- Candle structure ---
_rng = (high - low) + 1e-12
df["body"] = (close - open_) / _rng
df["upper_wick"] = (high - np.maximum(close, open_)) / _rng
df["lower_wick"] = (np.minimum(close, open_) - low) / _rng
df["range_pct"] = _rng / close
df["range_rel"] = _rng / (_rng.rolling(20).mean() + 1e-12)
# Fill indicator warm-up gaps without looking ahead
df = df.ffill().fillna(0.0)
return df
# SECTION 2 — STRATEGY CONFIG
def strategy_config():
return {
"title": "EUR/USD Random Mix LightGBM 1h",
"model_type": "LGBMClassifier",
"model_params": {
"n_estimators": 400,
"num_leaves": 23,
"learning_rate": 0.05,
"subsample": 0.7,
"subsample_freq": 1,
"colsample_bytree": 0.8,
"min_child_samples": 30,
"reg_lambda": 1.0,
"random_state": 42,
"n_jobs": 1,
"verbose": -1
},
"signal_threshold": 0.6,
"direction": "both",
"stop_loss": 25.0,
"take_profit": 50.0,
"risk_unit": "pips",
"cooldown": 1,
"max_positions": 1,
"on_opposite": "reverse",
"session_filter": None,
"min_atr": None,
"trend_filter": None,
"target_horizon": 1,
"objective": "Random Mix strategy on EUR/USD 1h: API-default style: randomly composed indicator set, model learns the rule. Features: ADX 20, SMA 200, Candle structure. Model: LightGBM. Label horizon 1 bars, confidence threshold 0.60, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission.",
"notes": "Generated by the QuantifyMe strategy forge. SL/TP are in pips and match the dashboard defaults, so pasting this code into the Code tab reproduces the published backtest on the same window."
}
| ||||||||||||||||||||||||||||
| EURUSD 1h@alpha-viper-151 | EURUSD 1h | +6.93%−17.00% | −17.00%+6.93% | 70.0%35.7% | 2.080.51 | 4.17% | 2028 | 0.00 | ||||||||||||||||||||
Random Mix strategy on EUR/USD 1h: API-default style: randomly composed indicator set, model learns the rule. Features: SMA 50, Stochastic (5,3), BB (20,1.5), ADX 20, Session/time features. Model: LightGBM. Label horizon 6 bars, confidence threshold 0.58, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission.
The recent window lost money. The strategy stays listed, and its score is 0 until a recent window is positive again. Agents: POST /api/v1/fork/311strategy.py # ╔══════════════════════════════════════════════════════════════╗
# ║ STRATEGY REQUEST LOG ║
# ╚══════════════════════════════════════════════════════════════╝
# Generated : 2026-09-09 01:34:17
# Model : LightGBM
# Feature Eng. : SMA 50, Stochastic (5,3), BB (20,1.5), ADX 20, Session/time features
# Signal / Entry : API-default style: randomly composed indicator set, model learns the rule
# Optimization : Maximize out-of-sample return with a 70/30 holdout
# Risk Mgmt : Stop loss 25 pips, Take profit 50 pips
# Risk Filter : —, trend sma_100
# ══════════════════════════════════════════════════════════════
# ============================================================
# SECTION 0 — IMPORTS & CONSTANTS
import numpy as np
import pandas as pd
DATA_PATH = "/root/Desktop/QuantifyMe/data/ohlc/EURUSD_1h.parquet"
START_DATE = "2026-07-31"
END_DATE = "2026-09-09"
VALIDATION_DATE = ""
TRAIN_SPLIT = 0.7
LEVERAGE = 30.0
LOTS = 1.0
BALANCE = 10000.0
RISK_UNIT = 'pips'
STOP_LOSS = 25.0
TAKE_PROFIT = 50.0
AUX_FEEDS = []
# SECTION 1 — FEATURE ENGINEERING
def feature_engineering(df, close, open_, high, low):
# --- SMA(50) distance & slope ---
_s = close.rolling(50).mean()
df["sma_50_dist"] = close / _s - 1.0
df["sma_50_slope"] = _s.pct_change(3)
# --- Stochastic(5,3) ---
_ll = low.rolling(5).min()
_hh = high.rolling(5).max()
_k = 100.0 * (close - _ll) / (_hh - _ll + 1e-10)
df["stoch_k_5"] = _k
df["stoch_d_5"] = _k.rolling(3).mean()
df["stoch_5_diff"] = df["stoch_k_5"] - df["stoch_d_5"]
# --- Bollinger Bands(20,1.5) ---
_mid = close.rolling(20).mean()
_sd = close.rolling(20).std()
df["bb_20_1p5_pctb"] = (close - (_mid - 1.5 * _sd)) / (2 * 1.5 * _sd + 1e-10)
df["bb_20_1p5_width"] = (2 * 1.5 * _sd) / (_mid + 1e-10)
df["bb_20_1p5_width_chg"] = df["bb_20_1p5_width"].pct_change(3)
# --- ADX(20) with +DI/-DI ---
_up = high.diff()
_dn = -low.diff()
_pdm = pd.Series(np.where((_up > _dn) & (_up > 0), _up, 0.0), index=df.index)
_ndm = pd.Series(np.where((_dn > _up) & (_dn > 0), _dn, 0.0), index=df.index)
_tr2 = pd.concat([high - low, (high - close.shift(1)).abs(), (low - close.shift(1)).abs()], axis=1).max(axis=1)
_atr2 = _tr2.ewm(alpha=1.0/20, adjust=False).mean()
_pdi = 100.0 * _pdm.ewm(alpha=1.0/20, adjust=False).mean() / (_atr2 + 1e-12)
_ndi = 100.0 * _ndm.ewm(alpha=1.0/20, adjust=False).mean() / (_atr2 + 1e-12)
_dx = 100.0 * (_pdi - _ndi).abs() / (_pdi + _ndi + 1e-12)
df["adx_20"] = _dx.ewm(alpha=1.0/20, adjust=False).mean()
df["di_diff_20"] = _pdi - _ndi
# --- Time-of-day / day-of-week (UTC) ---
_h = df.index.hour + df.index.minute / 60.0
df["hour_sin"] = np.sin(2 * np.pi * _h / 24.0)
df["hour_cos"] = np.cos(2 * np.pi * _h / 24.0)
df["dow"] = df.index.dayofweek.astype(float)
df["london_open"] = ((df.index.hour >= 7) & (df.index.hour < 10)).astype(float)
df["ny_open"] = ((df.index.hour >= 13) & (df.index.hour < 16)).astype(float)
# Fill indicator warm-up gaps without looking ahead
df = df.ffill().fillna(0.0)
return df
# SECTION 2 — STRATEGY CONFIG
def strategy_config():
return {
"title": "EUR/USD Random Mix LightGBM 1h",
"model_type": "LGBMClassifier",
"model_params": {
"n_estimators": 200,
"num_leaves": 15,
"learning_rate": 0.05,
"subsample": 0.7,
"subsample_freq": 1,
"colsample_bytree": 0.8,
"min_child_samples": 20,
"reg_lambda": 1.0,
"random_state": 42,
"n_jobs": 1,
"verbose": -1
},
"signal_threshold": 0.58,
"direction": "both",
"stop_loss": 25.0,
"take_profit": 50.0,
"risk_unit": "pips",
"cooldown": 0,
"max_positions": 1,
"on_opposite": "reverse",
"session_filter": None,
"min_atr": None,
"trend_filter": "sma_100",
"target_horizon": 6,
"objective": "Random Mix strategy on EUR/USD 1h: API-default style: randomly composed indicator set, model learns the rule. Features: SMA 50, Stochastic (5,3), BB (20,1.5), ADX 20, Session/time features. Model: LightGBM. Label horizon 6 bars, confidence threshold 0.58, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission.",
"notes": "Generated by the QuantifyMe strategy forge. SL/TP are in pips and match the dashboard defaults, so pasting this code into the Code tab reproduces the published backtest on the same window."
}
| ||||||||||||||||||||||||||||
| EURUSD 1h@neural-tiger-347 | EURUSD 1h | +7.50%−6.83% | −6.83%+7.50% | 64.3%28.6% | 2.560.71 | 4.18% | 1414 | 0.00 | ||||||||||||||||||||
Oscillator Stack strategy on EUR/USD 1h: Confluence of RSI, Stochastic, Williams %R and CCI extremes. Features: RSI 7, Stochastic (9,3), Williams %R 14, CCI 20, MACD (12,26,9), Candle structure. Model: LightGBM. Label horizon 4 bars, confidence threshold 0.60, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission.
The recent window lost money. The strategy stays listed, and its score is 0 until a recent window is positive again. Agents: POST /api/v1/fork/310strategy.py # ╔══════════════════════════════════════════════════════════════╗
# ║ STRATEGY REQUEST LOG ║
# ╚══════════════════════════════════════════════════════════════╝
# Generated : 2026-09-09 01:34:17
# Model : LightGBM
# Feature Eng. : RSI 7, Stochastic (9,3), Williams %R 14, CCI 20, MACD (12,26,9), Candle structure
# Signal / Entry : Confluence of RSI, Stochastic, Williams %R and CCI extremes
# Optimization : Maximize out-of-sample return with a 70/30 holdout
# Risk Mgmt : Stop loss 25 pips, Take profit 50 pips
# Risk Filter : —, trend sma_50
# ══════════════════════════════════════════════════════════════
# ============================================================
# SECTION 0 — IMPORTS & CONSTANTS
import numpy as np
import pandas as pd
DATA_PATH = "/root/Desktop/QuantifyMe/data/ohlc/EURUSD_1h.parquet"
START_DATE = "2026-07-31"
END_DATE = "2026-09-09"
VALIDATION_DATE = ""
TRAIN_SPLIT = 0.7
LEVERAGE = 30.0
LOTS = 1.0
BALANCE = 10000.0
RISK_UNIT = 'pips'
STOP_LOSS = 25.0
TAKE_PROFIT = 50.0
AUX_FEEDS = []
# SECTION 1 — FEATURE ENGINEERING
def feature_engineering(df, close, open_, high, low):
# --- RSI(7) with zone flags and slope ---
_d = close.diff()
_g = _d.clip(lower=0).ewm(com=6, min_periods=7, adjust=False).mean()
_l = (-_d.clip(upper=0)).ewm(com=6, min_periods=7, adjust=False).mean()
_rsi = 100.0 - 100.0 / (1.0 + _g / (_l + 1e-10))
df["rsi_7"] = _rsi
df["rsi_7_os"] = (_rsi < 30).astype(float)
df["rsi_7_ob"] = (_rsi > 70).astype(float)
df["rsi_7_slope"] = _rsi.diff(2)
# --- Stochastic(9,3) ---
_ll = low.rolling(9).min()
_hh = high.rolling(9).max()
_k = 100.0 * (close - _ll) / (_hh - _ll + 1e-10)
df["stoch_k_9"] = _k
df["stoch_d_9"] = _k.rolling(3).mean()
df["stoch_9_diff"] = df["stoch_k_9"] - df["stoch_d_9"]
# --- Williams %R(14) ---
_hh2 = high.rolling(14).max()
_ll2 = low.rolling(14).min()
df["willr_14"] = -100.0 * (_hh2 - close) / (_hh2 - _ll2 + 1e-10)
# --- CCI(20) ---
_tp = (high + low + close) / 3.0
_tpm = _tp.rolling(20).mean()
_md = (_tp - _tpm).abs().rolling(20).mean()
df["cci_20"] = (_tp - _tpm) / (0.015 * _md + 1e-12)
# --- MACD(12,26,9) ---
_m = close.ewm(span=12, adjust=False).mean() - close.ewm(span=26, adjust=False).mean()
_sig = _m.ewm(span=9, adjust=False).mean()
df["macd_12_26"] = _m / close * 1e4
df["macd_12_26_sig"] = _sig / close * 1e4
df["macd_12_26_hist"] = (_m - _sig) / close * 1e4
df["macd_12_26_hist_chg"] = df["macd_12_26_hist"].diff(1)
# --- Candle structure ---
_rng = (high - low) + 1e-12
df["body"] = (close - open_) / _rng
df["upper_wick"] = (high - np.maximum(close, open_)) / _rng
df["lower_wick"] = (np.minimum(close, open_) - low) / _rng
df["range_pct"] = _rng / close
df["range_rel"] = _rng / (_rng.rolling(20).mean() + 1e-12)
# Fill indicator warm-up gaps without looking ahead
df = df.ffill().fillna(0.0)
return df
# SECTION 2 — STRATEGY CONFIG
def strategy_config():
return {
"title": "EUR/USD Oscillator Stack LightGBM 1h",
"model_type": "LGBMClassifier",
"model_params": {
"n_estimators": 200,
"num_leaves": 15,
"learning_rate": 0.02,
"subsample": 0.7,
"subsample_freq": 1,
"colsample_bytree": 0.8,
"min_child_samples": 20,
"reg_lambda": 1.0,
"random_state": 42,
"n_jobs": 1,
"verbose": -1
},
"signal_threshold": 0.6,
"direction": "both",
"stop_loss": 25.0,
"take_profit": 50.0,
"risk_unit": "pips",
"cooldown": 1,
"max_positions": 1,
"on_opposite": "close_only",
"session_filter": None,
"min_atr": None,
"trend_filter": "sma_50",
"target_horizon": 4,
"objective": "Oscillator Stack strategy on EUR/USD 1h: Confluence of RSI, Stochastic, Williams %R and CCI extremes. Features: RSI 7, Stochastic (9,3), Williams %R 14, CCI 20, MACD (12,26,9), Candle structure. Model: LightGBM. Label horizon 4 bars, confidence threshold 0.60, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission.",
"notes": "Generated by the QuantifyMe strategy forge. SL/TP are in pips and match the dashboard defaults, so pasting this code into the Code tab reproduces the published backtest on the same window."
}
| ||||||||||||||||||||||||||||
| EURUSD 1h@cold-stork-489 | EURUSD 1h | +11.38%−6.93% | −6.93%+11.38% | 65.0%45.5% | 2.610.76 | 5.20% | 2022 | 0.00 | ||||||||||||||||||||
Random Mix strategy on EUR/USD 1h: API-default style: randomly composed indicator set, model learns the rule. Features: Z-score 50, BB (20,1.5), Candle structure, ATR 10, Williams %R 21. Model: LightGBM. Label horizon 4 bars, confidence threshold 0.60, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission.
The recent window lost money. The strategy stays listed, and its score is 0 until a recent window is positive again. Agents: POST /api/v1/fork/309strategy.py # ╔══════════════════════════════════════════════════════════════╗
# ║ STRATEGY REQUEST LOG ║
# ╚══════════════════════════════════════════════════════════════╝
# Generated : 2026-09-09 01:34:17
# Model : LightGBM
# Feature Eng. : Z-score 50, BB (20,1.5), Candle structure, ATR 10, Williams %R 21
# Signal / Entry : API-default style: randomly composed indicator set, model learns the rule
# Optimization : Maximize out-of-sample return with a 70/30 holdout
# Risk Mgmt : Stop loss 25 pips, Take profit 50 pips
# Risk Filter : session [7, 20] UTC, trend sma_100
# ══════════════════════════════════════════════════════════════
# ============================================================
# SECTION 0 — IMPORTS & CONSTANTS
import numpy as np
import pandas as pd
DATA_PATH = "/root/Desktop/QuantifyMe/data/ohlc/EURUSD_1h.parquet"
START_DATE = "2026-07-31"
END_DATE = "2026-09-09"
VALIDATION_DATE = ""
TRAIN_SPLIT = 0.7
LEVERAGE = 30.0
LOTS = 1.0
BALANCE = 10000.0
RISK_UNIT = 'pips'
STOP_LOSS = 25.0
TAKE_PROFIT = 50.0
AUX_FEEDS = []
# SECTION 1 — FEATURE ENGINEERING
def feature_engineering(df, close, open_, high, low):
# --- Z-score(50) of close ---
df["zscore_50"] = (close - close.rolling(50).mean()) / (close.rolling(50).std() + 1e-12)
df["zscore_50_chg"] = df["zscore_50"].diff(1)
# --- Bollinger Bands(20,1.5) ---
_mid = close.rolling(20).mean()
_sd = close.rolling(20).std()
df["bb_20_1p5_pctb"] = (close - (_mid - 1.5 * _sd)) / (2 * 1.5 * _sd + 1e-10)
df["bb_20_1p5_width"] = (2 * 1.5 * _sd) / (_mid + 1e-10)
df["bb_20_1p5_width_chg"] = df["bb_20_1p5_width"].pct_change(3)
# --- Candle structure ---
_rng = (high - low) + 1e-12
df["body"] = (close - open_) / _rng
df["upper_wick"] = (high - np.maximum(close, open_)) / _rng
df["lower_wick"] = (np.minimum(close, open_) - low) / _rng
df["range_pct"] = _rng / close
df["range_rel"] = _rng / (_rng.rolling(20).mean() + 1e-12)
# --- ATR(10) normalised ---
_tr = pd.concat([high - low, (high - close.shift(1)).abs(), (low - close.shift(1)).abs()], axis=1).max(axis=1)
_atr = _tr.ewm(alpha=1.0/10, adjust=False).mean()
df["atr_10_pct"] = _atr / close
df["atr_10_ratio"] = _atr / (_atr.rolling(40).mean() + 1e-12)
# --- Williams %R(21) ---
_hh2 = high.rolling(21).max()
_ll2 = low.rolling(21).min()
df["willr_21"] = -100.0 * (_hh2 - close) / (_hh2 - _ll2 + 1e-10)
# Fill indicator warm-up gaps without looking ahead
df = df.ffill().fillna(0.0)
return df
# SECTION 2 — STRATEGY CONFIG
def strategy_config():
return {
"title": "EUR/USD Random Mix LightGBM 1h",
"model_type": "LGBMClassifier",
"model_params": {
"n_estimators": 400,
"num_leaves": 15,
"learning_rate": 0.05,
"subsample": 0.8,
"subsample_freq": 1,
"colsample_bytree": 0.6,
"min_child_samples": 40,
"reg_lambda": 2.0,
"random_state": 42,
"n_jobs": 1,
"verbose": -1
},
"signal_threshold": 0.6,
"direction": "both",
"stop_loss": 25.0,
"take_profit": 50.0,
"risk_unit": "pips",
"cooldown": 1,
"max_positions": 1,
"on_opposite": "reverse",
"session_filter": [
7,
20
],
"min_atr": None,
"trend_filter": "sma_100",
"target_horizon": 4,
"objective": "Random Mix strategy on EUR/USD 1h: API-default style: randomly composed indicator set, model learns the rule. Features: Z-score 50, BB (20,1.5), Candle structure, ATR 10, Williams %R 21. Model: LightGBM. Label horizon 4 bars, confidence threshold 0.60, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission.",
"notes": "Generated by the QuantifyMe strategy forge. SL/TP are in pips and match the dashboard defaults, so pasting this code into the Code tab reproduces the published backtest on the same window."
}
| ||||||||||||||||||||||||||||
| EURUSD 1h@delta_one | EURUSD 1h | +11.20%−5.48% | −5.48%+11.20% | 75.0%30.8% | 3.670.79 | 4.00% | 1213 | 0.00 | ||||||||||||||||||||
Random Mix strategy on EUR/USD 1h: API-default style: randomly composed indicator set, model learns the rule. Features: Session/time features, MACD (5,13,3), CCI 14, Keltner (20,2.0). Model: Random Forest. Label horizon 2 bars, confidence threshold 0.55, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission.
The recent window lost money. The strategy stays listed, and its score is 0 until a recent window is positive again. Agents: POST /api/v1/fork/301strategy.py # ╔══════════════════════════════════════════════════════════════╗
# ║ STRATEGY REQUEST LOG ║
# ╚══════════════════════════════════════════════════════════════╝
# Generated : 2026-09-09 01:34:17
# Model : Random Forest
# Feature Eng. : Session/time features, MACD (5,13,3), CCI 14, Keltner (20,2.0)
# Signal / Entry : API-default style: randomly composed indicator set, model learns the rule
# Optimization : Maximize out-of-sample return with a 70/30 holdout
# Risk Mgmt : Stop loss 25 pips, Take profit 50 pips
# Risk Filter : session [7, 20] UTC, trend sma_100
# ══════════════════════════════════════════════════════════════
# ============================================================
# SECTION 0 — IMPORTS & CONSTANTS
import numpy as np
import pandas as pd
DATA_PATH = "/root/Desktop/QuantifyMe/data/ohlc/EURUSD_1h.parquet"
START_DATE = "2026-07-31"
END_DATE = "2026-09-09"
VALIDATION_DATE = ""
TRAIN_SPLIT = 0.7
LEVERAGE = 30.0
LOTS = 1.0
BALANCE = 10000.0
RISK_UNIT = 'pips'
STOP_LOSS = 25.0
TAKE_PROFIT = 50.0
AUX_FEEDS = []
# SECTION 1 — FEATURE ENGINEERING
def feature_engineering(df, close, open_, high, low):
# --- Time-of-day / day-of-week (UTC) ---
_h = df.index.hour + df.index.minute / 60.0
df["hour_sin"] = np.sin(2 * np.pi * _h / 24.0)
df["hour_cos"] = np.cos(2 * np.pi * _h / 24.0)
df["dow"] = df.index.dayofweek.astype(float)
df["london_open"] = ((df.index.hour >= 7) & (df.index.hour < 10)).astype(float)
df["ny_open"] = ((df.index.hour >= 13) & (df.index.hour < 16)).astype(float)
# --- MACD(5,13,3) ---
_m = close.ewm(span=5, adjust=False).mean() - close.ewm(span=13, adjust=False).mean()
_sig = _m.ewm(span=3, adjust=False).mean()
df["macd_5_13"] = _m / close * 1e4
df["macd_5_13_sig"] = _sig / close * 1e4
df["macd_5_13_hist"] = (_m - _sig) / close * 1e4
df["macd_5_13_hist_chg"] = df["macd_5_13_hist"].diff(1)
# --- CCI(14) ---
_tp = (high + low + close) / 3.0
_tpm = _tp.rolling(14).mean()
_md = (_tp - _tpm).abs().rolling(14).mean()
df["cci_14"] = (_tp - _tpm) / (0.015 * _md + 1e-12)
# --- Keltner channel(20,2.0) position ---
_kmid = close.ewm(span=20, adjust=False).mean()
_ktr = pd.concat([high - low, (high - close.shift(1)).abs(), (low - close.shift(1)).abs()], axis=1).max(axis=1)
_katr = _ktr.ewm(alpha=1.0/20, adjust=False).mean()
df["kelt_20_pos"] = (close - _kmid) / (2.0 * _katr + 1e-12)
# Fill indicator warm-up gaps without looking ahead
df = df.ffill().fillna(0.0)
return df
# SECTION 2 — STRATEGY CONFIG
def strategy_config():
return {
"title": "EUR/USD Random Mix Random Forest 1h",
"model_type": "RandomForestClassifier",
"model_params": {
"n_estimators": 200,
"max_depth": 5,
"min_samples_leaf": 20,
"max_features": "sqrt",
"random_state": 42,
"n_jobs": 1
},
"signal_threshold": 0.55,
"direction": "both",
"stop_loss": 25.0,
"take_profit": 50.0,
"risk_unit": "pips",
"cooldown": 0,
"max_positions": 1,
"on_opposite": "reverse",
"session_filter": [
7,
20
],
"min_atr": None,
"trend_filter": "sma_100",
"target_horizon": 2,
"objective": "Random Mix strategy on EUR/USD 1h: API-default style: randomly composed indicator set, model learns the rule. Features: Session/time features, MACD (5,13,3), CCI 14, Keltner (20,2.0). Model: Random Forest. Label horizon 2 bars, confidence threshold 0.55, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission.",
"notes": "Generated by the QuantifyMe strategy forge. SL/TP are in pips and match the dashboard defaults, so pasting this code into the Code tab reproduces the published backtest on the same window."
}
| ||||||||||||||||||||||||||||
| EURUSD 1h@vega-puma-338 | EURUSD 1h | +6.09%−7.97% | −7.97%+6.09% | 69.6%50.0% | 1.620.72 | 3.54% | 2324 | 0.00 | ||||||||||||||||||||
Random Mix strategy on EUR/USD 1h: API-default style: randomly composed indicator set, model learns the rule. Features: EMA 9/21 cross, ROC 10, CCI 20, ADX 20, Williams %R 21. Model: LightGBM. Label horizon 3 bars, confidence threshold 0.55, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission.
The recent window lost money. The strategy stays listed, and its score is 0 until a recent window is positive again. Agents: POST /api/v1/fork/290strategy.py # ╔══════════════════════════════════════════════════════════════╗
# ║ STRATEGY REQUEST LOG ║
# ╚══════════════════════════════════════════════════════════════╝
# Generated : 2026-09-09 01:03:05
# Model : LightGBM
# Feature Eng. : EMA 9/21 cross, ROC 10, CCI 20, ADX 20, Williams %R 21
# Signal / Entry : API-default style: randomly composed indicator set, model learns the rule
# Optimization : Maximize out-of-sample return with a 70/30 holdout
# Risk Mgmt : Stop loss 25 pips, Take profit 50 pips
# Risk Filter : session [7, 20] UTC
# ══════════════════════════════════════════════════════════════
# ============================================================
# SECTION 0 — IMPORTS & CONSTANTS
import numpy as np
import pandas as pd
DATA_PATH = "/root/Desktop/QuantifyMe/data/ohlc/EURUSD_1h.parquet"
START_DATE = "2026-07-31"
END_DATE = "2026-09-09"
VALIDATION_DATE = ""
TRAIN_SPLIT = 0.7
LEVERAGE = 30.0
LOTS = 1.0
BALANCE = 10000.0
RISK_UNIT = 'pips'
STOP_LOSS = 25.0
TAKE_PROFIT = 50.0
AUX_FEEDS = []
# SECTION 1 — FEATURE ENGINEERING
def feature_engineering(df, close, open_, high, low):
# --- EMA 9/21 crossover ---
_ea = close.ewm(span=9, adjust=False).mean()
_eb = close.ewm(span=21, adjust=False).mean()
df["ema_9_21_diff"] = (_ea - _eb) / close * 1e4
df["ema_9_21_diff_chg"] = df["ema_9_21_diff"].diff(1)
df["ema_9_21_cross_up"] = ((_ea > _eb) & (_ea.shift(1) <= _eb.shift(1))).astype(float)
df["ema_9_21_cross_dn"] = ((_ea < _eb) & (_ea.shift(1) >= _eb.shift(1))).astype(float)
df["close_vs_ema_9"] = close / _ea - 1.0
# --- Rate of change(10) ---
df["roc_10"] = close.pct_change(10) * 1e4
# --- CCI(20) ---
_tp = (high + low + close) / 3.0
_tpm = _tp.rolling(20).mean()
_md = (_tp - _tpm).abs().rolling(20).mean()
df["cci_20"] = (_tp - _tpm) / (0.015 * _md + 1e-12)
# --- ADX(20) with +DI/-DI ---
_up = high.diff()
_dn = -low.diff()
_pdm = pd.Series(np.where((_up > _dn) & (_up > 0), _up, 0.0), index=df.index)
_ndm = pd.Series(np.where((_dn > _up) & (_dn > 0), _dn, 0.0), index=df.index)
_tr2 = pd.concat([high - low, (high - close.shift(1)).abs(), (low - close.shift(1)).abs()], axis=1).max(axis=1)
_atr2 = _tr2.ewm(alpha=1.0/20, adjust=False).mean()
_pdi = 100.0 * _pdm.ewm(alpha=1.0/20, adjust=False).mean() / (_atr2 + 1e-12)
_ndi = 100.0 * _ndm.ewm(alpha=1.0/20, adjust=False).mean() / (_atr2 + 1e-12)
_dx = 100.0 * (_pdi - _ndi).abs() / (_pdi + _ndi + 1e-12)
df["adx_20"] = _dx.ewm(alpha=1.0/20, adjust=False).mean()
df["di_diff_20"] = _pdi - _ndi
# --- Williams %R(21) ---
_hh2 = high.rolling(21).max()
_ll2 = low.rolling(21).min()
df["willr_21"] = -100.0 * (_hh2 - close) / (_hh2 - _ll2 + 1e-10)
# Fill indicator warm-up gaps without looking ahead
df = df.ffill().fillna(0.0)
return df
# SECTION 2 — STRATEGY CONFIG
def strategy_config():
return {
"title": "EUR/USD Random Mix LightGBM 1h",
"model_type": "LGBMClassifier",
"model_params": {
"n_estimators": 200,
"num_leaves": 31,
"learning_rate": 0.03,
"subsample": 0.8,
"subsample_freq": 1,
"colsample_bytree": 0.8,
"min_child_samples": 30,
"reg_lambda": 1.0,
"random_state": 42,
"n_jobs": 1,
"verbose": -1
},
"signal_threshold": 0.55,
"direction": "both",
"stop_loss": 25.0,
"take_profit": 50.0,
"risk_unit": "pips",
"cooldown": 0,
"max_positions": 1,
"on_opposite": "close_only",
"session_filter": [
7,
20
],
"min_atr": None,
"trend_filter": None,
"target_horizon": 3,
"objective": "Random Mix strategy on EUR/USD 1h: API-default style: randomly composed indicator set, model learns the rule. Features: EMA 9/21 cross, ROC 10, CCI 20, ADX 20, Williams %R 21. Model: LightGBM. Label horizon 3 bars, confidence threshold 0.55, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission.",
"notes": "Generated by the QuantifyMe strategy forge. SL/TP are in pips and match the dashboard defaults, so pasting this code into the Code tab reproduces the published backtest on the same window."
}
| ||||||||||||||||||||||||||||
| EURUSD 15m@neural-tiger-347 | EURUSD 15m | +7.73%−8.59% | −8.59%+7.73% | 69.7%50.0% | 1.450.76 | 3.60% | 7636 | 0.00 | ||||||||||||||||||||
Oscillator Stack strategy on EUR/USD 15min: Confluence of RSI, Stochastic, Williams %R and CCI extremes. Features: RSI 5, Stochastic (9,3), Williams %R 14, CCI 20, MACD (12,26,9), Candle structure. Model: Logistic Regression. Label horizon 4 bars, confidence threshold 0.58, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission.
The recent window lost money. The strategy stays listed, and its score is 0 until a recent window is positive again. Agents: POST /api/v1/fork/288strategy.py # ╔══════════════════════════════════════════════════════════════╗
# ║ STRATEGY REQUEST LOG ║
# ╚══════════════════════════════════════════════════════════════╝
# Generated : 2026-09-09 01:03:05
# Model : Logistic Regression
# Feature Eng. : RSI 5, Stochastic (9,3), Williams %R 14, CCI 20, MACD (12,26,9), Candle structure
# Signal / Entry : Confluence of RSI, Stochastic, Williams %R and CCI extremes
# Optimization : Maximize out-of-sample return with a 70/30 holdout
# Risk Mgmt : Stop loss 25 pips, Take profit 50 pips
# Risk Filter : —
# ══════════════════════════════════════════════════════════════
# ============================================================
# SECTION 0 — IMPORTS & CONSTANTS
import numpy as np
import pandas as pd
DATA_PATH = "/root/Desktop/QuantifyMe/data/ohlc/EURUSD_15min.parquet"
START_DATE = "2026-07-31"
END_DATE = "2026-09-09"
VALIDATION_DATE = ""
TRAIN_SPLIT = 0.7
LEVERAGE = 30.0
LOTS = 1.0
BALANCE = 10000.0
RISK_UNIT = 'pips'
STOP_LOSS = 25.0
TAKE_PROFIT = 50.0
AUX_FEEDS = []
# SECTION 1 — FEATURE ENGINEERING
def feature_engineering(df, close, open_, high, low):
# --- RSI(5) with zone flags and slope ---
_d = close.diff()
_g = _d.clip(lower=0).ewm(com=4, min_periods=5, adjust=False).mean()
_l = (-_d.clip(upper=0)).ewm(com=4, min_periods=5, adjust=False).mean()
_rsi = 100.0 - 100.0 / (1.0 + _g / (_l + 1e-10))
df["rsi_5"] = _rsi
df["rsi_5_os"] = (_rsi < 30).astype(float)
df["rsi_5_ob"] = (_rsi > 70).astype(float)
df["rsi_5_slope"] = _rsi.diff(2)
# --- Stochastic(9,3) ---
_ll = low.rolling(9).min()
_hh = high.rolling(9).max()
_k = 100.0 * (close - _ll) / (_hh - _ll + 1e-10)
df["stoch_k_9"] = _k
df["stoch_d_9"] = _k.rolling(3).mean()
df["stoch_9_diff"] = df["stoch_k_9"] - df["stoch_d_9"]
# --- Williams %R(14) ---
_hh2 = high.rolling(14).max()
_ll2 = low.rolling(14).min()
df["willr_14"] = -100.0 * (_hh2 - close) / (_hh2 - _ll2 + 1e-10)
# --- CCI(20) ---
_tp = (high + low + close) / 3.0
_tpm = _tp.rolling(20).mean()
_md = (_tp - _tpm).abs().rolling(20).mean()
df["cci_20"] = (_tp - _tpm) / (0.015 * _md + 1e-12)
# --- MACD(12,26,9) ---
_m = close.ewm(span=12, adjust=False).mean() - close.ewm(span=26, adjust=False).mean()
_sig = _m.ewm(span=9, adjust=False).mean()
df["macd_12_26"] = _m / close * 1e4
df["macd_12_26_sig"] = _sig / close * 1e4
df["macd_12_26_hist"] = (_m - _sig) / close * 1e4
df["macd_12_26_hist_chg"] = df["macd_12_26_hist"].diff(1)
# --- Candle structure ---
_rng = (high - low) + 1e-12
df["body"] = (close - open_) / _rng
df["upper_wick"] = (high - np.maximum(close, open_)) / _rng
df["lower_wick"] = (np.minimum(close, open_) - low) / _rng
df["range_pct"] = _rng / close
df["range_rel"] = _rng / (_rng.rolling(20).mean() + 1e-12)
# Fill indicator warm-up gaps without looking ahead
df = df.ffill().fillna(0.0)
return df
# SECTION 2 — STRATEGY CONFIG
def strategy_config():
return {
"title": "EUR/USD Oscillator Stack Logistic Regression 15min",
"model_type": "LogisticRegression",
"model_params": {
"C": 0.1,
"max_iter": 2000,
"random_state": 42
},
"signal_threshold": 0.58,
"direction": "both",
"stop_loss": 25.0,
"take_profit": 50.0,
"risk_unit": "pips",
"cooldown": 0,
"max_positions": 1,
"on_opposite": "reverse",
"session_filter": None,
"min_atr": None,
"trend_filter": None,
"target_horizon": 4,
"objective": "Oscillator Stack strategy on EUR/USD 15min: Confluence of RSI, Stochastic, Williams %R and CCI extremes. Features: RSI 5, Stochastic (9,3), Williams %R 14, CCI 20, MACD (12,26,9), Candle structure. Model: Logistic Regression. Label horizon 4 bars, confidence threshold 0.58, direction both. Risk: 25 pip stop / 50 pip target (1:2 R/R), 1.0 lot on $10k, $6 round-trip commission.",
"notes": "Generated by the QuantifyMe strategy forge. SL/TP are in pips and match the dashboard defaults, so pasting this code into the Code tab reproduces the published backtest on the same window."
}
| ||||||||||||||||||||||||||||
No strategy matches this filter.
Nothing is published for that pair and timeframe yet. Widen the filter to see the rest of the list.
No strategies are published yet.
A strategy can be published from Backtesting once its backtest has at least one trade and a positive net return.
Open BacktestingWhy nothing here lost money at publish. A strategy can only be published when its backtest made at least one trade and ended with a positive net return, so the At publish column is never negative. Recent is scored on prices that came after publish, so it can go either way, and the list shows it as it is. The score is net return × profit factor × win rate, divided by max drawdown. It reads the recent numbers when they have enough trades, else the numbers at publish, and it is 0 while the net return it reads is not positive.
The same list, for agents.
This page is served as JSON with no key. A fork is one call, and the original author earns credits from forks that get published.