{"updated": "2026-10-26 17:23:19.131326+00:00", "state": "running", "note": "", "mode": "demo", "symbol": "EURUSD", "version": 1, "params": {"supertrend_period": 10, "supertrend_mult": 3.0, "rsi_period": 14, "rsi_ob": 70, "rsi_os": 30, "ema_trend": 50, "vol_ma": 20, "min_confidence": 65, "min_adx": 15, "mtf_confirm": true, "higher_tfs": ["1h"], "sides": ["BUY", "SELL"], "atr_stop_mult": 1.5, "rr": 1.5, "risk_pct": 0.005, "max_bars_held": 144}, "equity": 100338.79, "start_equity": 100000.0, "drawdown_pct": 0.7518184921354727, "signal": {"side": "NEUTRAL", "confidence": 54, "price": 1.11901, "atr": 0.000568856523001959, "adx": 35.86016557000395, "adx_plus": 19.072875229706952, "adx_minus": 18.710680218970715, "rsi": 52.80298592900634, "stoch_k": 92.22222222222072, "stoch_d": 76.72229541794336, "bb_pct": 0.7945064250491817, "bb_bw": 0.19583096934035746, "vwap": 1.121606605813266, "factors": {"bull": {"supertrend": false, "rsi": true, "ema": false, "macd": true, "volume": false, "stoch": false, "bb_squeeze": false, "vwap": false}, "bear": {"supertrend": true, "rsi": false, "ema": true, "macd": false, "volume": false, "stoch": false, "bb_squeeze": true, "vwap": true}, "mtf": {"1h": {"side": "SELL", "rsi": 43.6}}}, "note": ""}, "position": null, "recent_trades": [{"id": 16, "version": 1, "side": "SELL", "status": "closed", "entry_time": "2026-10-26 16:09:30.753682+00:00", "entry": 1.11792, "qty": 5.85, "sl": 1.118781727869743, "tp": 1.1166274081953855, "risk_amount": 504.0945, "confidence": 77, "factors": {"adx": 40.755495742168286, "rsi": 34.050267152447816, "bull": {"supertrend": false, "rsi": false, "ema": false, "macd": false, "volume": false, "stoch": true, "bb_squeeze": false, "vwap": false}, "bear": {"supertrend": true, "rsi": true, "ema": true, "macd": true, "volume": false, "stoch": false, "bb_squeeze": true, "vwap": true}, "mtf": {"1h": {"side": "SELL", "rsi": 33.1}}}, "fees": 0.0, "ticket": "11111144709", "exit_time": "2026-10-26 17:15:37.250418+00:00", "exit": 1.11878, "pnl": -503.1, "exit_reason": "SL", "bars_held": 4}, {"id": 15, "version": 1, "side": "SELL", "status": "closed", "entry_time": "2026-10-26 10:30:16.500758+00:00", "entry": 1.12039, "qty": 6.8100000000000005, "sl": 1.1203750000000001, "tp": 1.1192882809211226, "risk_amount": 500.19450000000006, "confidence": 77, "factors": {"adx": 20.55273686879431, "rsi": 39.288287831222064, "bull": {"supertrend": false, "rsi": false, "ema": false, "macd": false, "volume": true, "stoch": true, "bb_squeeze": false, "vwap": false}, "bear": {"supertrend": true, "rsi": true, "ema": true, "macd": true, "volume": false, "stoch": false, "bb_squeeze": true, "vwap": true}, "mtf": {"1h": {"side": "SELL", "rsi": 44.3}}}, "fees": 0.0, "ticket": "11103894274", "exit_time": "2026-10-26 13:44:03.834863+00:00", "exit": 1.11929, "pnl": 749.1, "exit_reason": "TP", "bars_held": 12}, {"id": 14, "version": 1, "side": "SELL", "status": "closed", "entry_time": "2026-10-26 08:15:03.080425+00:00", "entry": 1.1209, "qty": 7.6, "sl": 1.1209, "tp": 1.1199129168737842, "risk_amount": 500.156, "confidence": 68, "factors": {"adx": 27.159648163627566, "rsi": 41.110431331280196, "bull": {"supertrend": false, "rsi": false, "ema": false, "macd": false, "volume": true, "stoch": true, "bb_squeeze": false, "vwap": false}, "bear": {"supertrend": true, "rsi": true, "ema": true, "macd": true, "volume": false, "stoch": false, "bb_squeeze": false, "vwap": true}, "mtf": {"1h": {"side": "SELL", "rsi": 48.6}}}, "fees": 0.0, "ticket": "11101996217", "exit_time": "2026-10-26 10:20:33.818809+00:00", "exit": 1.1209, "pnl": 0.0, "exit_reason": "SL", "bars_held": 8}, {"id": 13, "version": 1, "side": "SELL", "status": "closed", "entry_time": "2026-10-26 07:15:15.696908+00:00", "entry": 1.12113, "qty": 8.43, "sl": 1.1211149999999999, "tp": 1.1202401799524981, "risk_amount": 500.06759999999997, "confidence": 77, "factors": {"adx": 28.132869005231477, "rsi": 39.948723783540295, "bull": {"supertrend": false, "rsi": false, "ema": false, "macd": false, "volume": false, "stoch": false, "bb_squeeze": false, "vwap": false}, "bear": {"supertrend": true, "rsi": true, "ema": true, "macd": true, "volume": true, "stoch": false, "bb_squeeze": false, "vwap": true}, "mtf": {"1h": {"side": "SELL", "rsi": 50.3}}}, "fees": 0.0, "ticket": "11101064712", "exit_time": "2026-10-26 08:09:01.109239+00:00", "exit": 1.12111, "pnl": 16.86, "exit_reason": "SL", "bars_held": 3}, {"id": 12, "version": 1, "side": "SELL", "status": "closed", "entry_time": "2026-10-23 14:30:01.383669+00:00", "entry": 1.11983, "qty": 4.86, "sl": 1.120863216561246, "tp": 1.1182801751581313, "risk_amount": 502.1352, "confidence": 81, "factors": {"adx": 24.061014813749694, "rsi": 49.180132035199584, "bull": {"supertrend": false, "rsi": false, "ema": false, "macd": true, "volume": false, "stoch": false, "bb_squeeze": false, "vwap": false}, "bear": {"supertrend": true, "rsi": true, "ema": true, "macd": false, "volume": true, "stoch": true, "bb_squeeze": false, "vwap": true}, "mtf": {"1h": {"side": "SELL", "rsi": 43.7}}}, "fees": 4.86, "ticket": "11089849696", "exit_time": "2026-10-26 04:37:23.999130+00:00", "exit": 1.12086, "pnl": -505.44, "exit_reason": "SL", "bars_held": 248}, {"id": 11, "version": 1, "side": "SELL", "status": "closed", "entry_time": "2026-10-23 11:15:36.372997+00:00", "entry": 1.11948, "qty": 6.1, "sl": 1.1203046086910553, "tp": 1.1182430869634172, "risk_amount": 503.0059999999999, "confidence": 81, "factors": {"adx": 27.70588672814166, "rsi": 39.31308862752865, "bull": {"supertrend": false, "rsi": false, "ema": false, "macd": true, "volume": false, "stoch": false, "bb_squeeze": false, "vwap": false}, "bear": {"supertrend": true, "rsi": true, "ema": true, "macd": false, "volume": false, "stoch": true, "bb_squeeze": true, "vwap": true}, "mtf": {"1h": {"side": "SELL", "rsi": 38.2}}}, "fees": 0.0, "ticket": "11085332915", "exit_time": "2026-10-23 11:26:23.158789+00:00", "exit": 1.11965, "pnl": -103.7, "exit_reason": "EXTERNAL", "bars_held": 0}, {"id": 10, "version": 1, "side": "SELL", "status": "closed", "entry_time": "2026-10-23 09:37:15.687315+00:00", "entry": 1.11972, "qty": 6.29, "sl": 1.1205205257455406, "tp": 1.1185192113816893, "risk_amount": 503.5145, "confidence": 77, "factors": {"adx": 33.23496867015755, "rsi": 36.60662855834106, "bull": {"supertrend": false, "rsi": false, "ema": false, "macd": false, "volume": false, "stoch": true, "bb_squeeze": false, "vwap": false}, "bear": {"supertrend": true, "rsi": true, "ema": true, "macd": true, "volume": true, "stoch": false, "bb_squeeze": false, "vwap": true}, "mtf": {"1h": {"side": "SELL", "rsi": 36.0}}}, "fees": 0.0, "ticket": "11084074874", "exit_time": "2026-10-23 10:46:16.584405+00:00", "exit": 1.11995, "pnl": -144.67, "exit_reason": "CLOSED", "bars_held": 4}, {"id": 9, "version": 1, "side": "SELL", "status": "closed", "entry_time": "2026-10-23 09:19:49.121084+00:00", "entry": 1.11928, "qty": 6.17, "sl": 1.1200982584951975, "tp": 1.1180526122572039, "risk_amount": 504.8911, "confidence": 68, "factors": {"adx": 32.03956558082295, "rsi": 37.72258325631741, "bull": {"supertrend": false, "rsi": false, "ema": false, "macd": false, "volume": true, "stoch": true, "bb_squeeze": false, "vwap": false}, "bear": {"supertrend": true, "rsi": true, "ema": true, "macd": true, "volume": false, "stoch": false, "bb_squeeze": false, "vwap": true}, "mtf": {"1h": {"side": "SELL", "rsi": 37.1}}}, "fees": 0.0, "ticket": "11083819358", "exit_time": "2026-10-23 09:36:57.175562+00:00", "exit": 1.11971, "pnl": -265.31, "exit_reason": "CLOSED", "bars_held": 1}, {"id": 8, "version": 1, "side": "SELL", "status": "closed", "entry_time": "2026-10-22 12:15:04.001846+00:00", "entry": 1.12071, "qty": 4.2, "sl": 1.12071, "tp": 1.1189214950216337, "risk_amount": 500.766, "confidence": 68, "factors": {"adx": 39.7937772123456, "rsi": 37.14156045915042, "bull": {"supertrend": false, "rsi": false, "ema": false, "macd": false, "volume": true, "stoch": true, "bb_squeeze": false, "vwap": false}, "bear": {"supertrend": true, "rsi": true, "ema": true, "macd": true, "volume": false, "stoch": false, "bb_squeeze": false, "vwap": true}, "mtf": {"1h": {"side": "SELL", "rsi": 38.6}}}, "fees": 0.0, "ticket": "11066682618", "exit_time": "2026-10-22 14:19:54.911475+00:00", "exit": 1.11892, "pnl": 751.8, "exit_reason": "TP", "bars_held": 8}, {"id": 7, "version": 1, "side": "SELL", "status": "closed", "entry_time": "2026-10-22 11:00:08.845120+00:00", "entry": 1.12138, "qty": 5.03, "sl": 1.12138, "tp": 1.1198954339996043, "risk_amount": 497.8191, "confidence": 68, "factors": {"adx": 28.648656819461056, "rsi": 30.806771298511407, "bull": {"supertrend": false, "rsi": false, "ema": false, "macd": false, "volume": false, "stoch": false, "bb_squeeze": false, "vwap": false}, "bear": {"supertrend": true, "rsi": true, "ema": true, "macd": true, "volume": false, "stoch": false, "bb_squeeze": false, "vwap": true}, "mtf": {"1h": {"side": "SELL", "rsi": 38.3}}}, "fees": 0.0, "ticket": "11064734343", "exit_time": "2026-10-22 11:15:46.622664+00:00", "exit": 1.1199, "pnl": 744.44, "exit_reason": "TP", "bars_held": 1}, {"id": 6, "version": 1, "side": "BUY", "status": "closed", "entry_time": "2026-10-22 10:00:01.790127+00:00", "entry": 1.12199, "qty": 6.9, "sl": 1.121266916826706, "tp": 1.1230746247599412, "risk_amount": 498.939, "confidence": 68, "factors": {"adx": 20.62155127977848, "rsi": 53.36547992350103, "bull": {"supertrend": true, "rsi": true, "ema": true, "macd": false, "volume": false, "stoch": false, "bb_squeeze": true, "vwap": true}, "bear": {"supertrend": false, "rsi": false, "ema": false, "macd": true, "volume": true, "stoch": true, "bb_squeeze": false, "vwap": false}, "mtf": {"1h": {"side": "BUY", "rsi": 56.5}}}, "fees": 0.0, "ticket": "11063852597", "exit_time": "2026-10-22 10:53:54.251483+00:00", "exit": 1.12169, "pnl": -207.0, "exit_reason": "CLOSED", "bars_held": 3}, {"id": 5, "version": 1, "side": "BUY", "status": "closed", "entry_time": "2026-10-21 17:30:17.731228+00:00", "entry": 1.12342, "qty": 6.13, "sl": 1.1226077420950766, "tp": 1.1246383868573853, "risk_amount": 497.9399, "confidence": 68, "factors": {"adx": 17.0496932467531, "rsi": 59.679363176058345, "bull": {"supertrend": true, "rsi": true, "ema": true, "macd": true, "volume": false, "stoch": false, "bb_squeeze": false, "vwap": true}, "bear": {"supertrend": false, "rsi": false, "ema": false, "macd": false, "volume": false, "stoch": false, "bb_squeeze": false, "vwap": false}, "mtf": {"1h": {"side": "BUY", "rsi": 56.1}}}, "fees": 0.0, "ticket": "11052439886", "exit_time": "2026-10-21 17:41:00.555201+00:00", "exit": 1.12361, "pnl": 116.47, "exit_reason": "CLOSED", "bars_held": 0}, {"id": 4, "version": 1, "side": "BUY", "status": "closed", "entry_time": "2026-10-21 17:08:13.233633+00:00", "entry": 1.12342, "qty": 5.8, "sl": 1.1225617600629292, "tp": 1.1247073599056066, "risk_amount": 497.756, "confidence": 81, "factors": {"adx": 15.996530360536376, "rsi": 57.848762709913835, "bull": {"supertrend": true, "rsi": true, "ema": true, "macd": true, "volume": false, "stoch": true, "bb_squeeze": false, "vwap": true}, "bear": {"supertrend": false, "rsi": false, "ema": false, "macd": false, "volume": false, "stoch": false, "bb_squeeze": false, "vwap": false}, "mtf": {"1h": {"side": "BUY", "rsi": 54.8}}}, "fees": 0.0, "ticket": "11052215923", "exit_time": "2026-10-21 17:28:17.241161+00:00", "exit": 1.12343, "pnl": 5.8, "exit_reason": "CLOSED", "bars_held": 1}, {"id": 3, "version": 1, "side": "BUY", "status": "closed", "entry_time": "2026-10-21 16:45:05.606446+00:00", "entry": 1.12321, "qty": 5.64, "sl": 1.122326126221616, "tp": 1.1245358106675762, "risk_amount": 498.51959999999997, "confidence": 90, "factors": {"adx": 15.695970846833216, "rsi": 57.64828384187959, "bull": {"supertrend": true, "rsi": true, "ema": true, "macd": true, "volume": true, "stoch": true, "bb_squeeze": false, "vwap": true}, "bear": {"supertrend": false, "rsi": false, "ema": false, "macd": false, "volume": false, "stoch": false, "bb_squeeze": false, "vwap": false}, "mtf": {"1h": {"side": "BUY", "rsi": 54.7}}}, "fees": 0.0, "ticket": "11051920003", "exit_time": "2026-10-21 16:50:47.409269+00:00", "exit": 1.1231, "pnl": -62.04, "exit_reason": "CLOSED", "bars_held": 0}, {"id": 2, "version": 1, "side": "BUY", "status": "closed", "entry_time": "2026-10-21 16:30:08.413980+00:00", "entry": 1.12271, "qty": 5.85, "sl": 1.1218608282386635, "tp": 1.123983757642005, "risk_amount": 496.782, "confidence": 72, "factors": {"adx": 15.372291370537509, "rsi": 51.91434747706517, "bull": {"supertrend": true, "rsi": true, "ema": true, "macd": false, "volume": false, "stoch": true, "bb_squeeze": false, "vwap": true}, "bear": {"supertrend": false, "rsi": false, "ema": false, "macd": true, "volume": false, "stoch": false, "bb_squeeze": false, "vwap": false}, "mtf": {"1h": {"side": "BUY", "rsi": 50.8}}}, "fees": 0.0, "ticket": "11051642704", "exit_time": "2026-10-21 16:44:25.520650+00:00", "exit": 1.12313, "pnl": 245.7, "exit_reason": "CLOSED", "bars_held": 0}, {"id": 1, "version": 1, "side": "BUY", "status": "closed", "entry_time": "2026-10-20 14:45:19.345248+00:00", "entry": 1.12494, "qty": 3.81, "sl": 1.1236279557895446, "tp": 1.1269080663156832, "risk_amount": 499.87199999999996, "confidence": 68, "factors": {"adx": 28.91742826846191, "rsi": 66.7259481123599, "bull": {"supertrend": true, "rsi": true, "ema": true, "macd": true, "volume": false, "stoch": false, "bb_squeeze": false, "vwap": true}, "bear": {"supertrend": false, "rsi": false, "ema": false, "macd": false, "volume": true, "stoch": true, "bb_squeeze": false, "vwap": false}, "mtf": {"1h": {"side": "BUY", "rsi": 65.8}}}, "fees": 0.0, "ticket": "11032455014", "exit_time": "2026-10-21 16:17:53.142239+00:00", "exit": 1.12363, "pnl": -499.11, "exit_reason": "SL", "bars_held": 102}], "stats": {"trades": 16, "wins": 7, "losses": 9, "win_rate": 0.438, "net_pnl": 339.8, "fees": 4.86, "profit_factor": 1.15, "expectancy_r": 0.044, "avg_win": 375.74, "avg_loss": -254.49, "max_drawdown_pct": 1.08, "sharpe": 0.8, "streak": -1, "max_win_streak": 2, "max_loss_streak": 4, "avg_bars_held": 32.9, "exit_reasons": {"SL": 5, "CLOSED": 7, "TP": 3, "EXTERNAL": 1}}, "session": {"trades": 5, "pnl": -242.58, "wins": 2}, "equity_curve": [100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100001.93, 100002.01, 100001.99, 100001.96, 100001.53, 100000.02, 100000.17, 100000.11, 99999.06, 99999.24, 99998.68, 99997.78, 99857.02, 99500.9, 99701.44, 99742.52, 99665.8, 99807.77, 99808.47, 99808.51, 99807.86, 100096.72, 99917.06, 99599.38, 100345.26, 100345.17, 100345.35, 100345.36, 100345.77, 100345.82, 100345.36, 100345.27, 100585.45, 100463.36, 100471.78, 100682.28, 100715.96, 101098.6, 100832.95, 100732.15, 100732.15, 100732.15, 100732.15, 100732.15, 100732.15, 100688.29, 100688.4, 100585.0, 100584.94, 100585.23, 100585.65, 100585.15, 100078.14, 100069.23, 100094.37, 100253.68, 100238.5, 100238.5, 100209.38, 100413.38, 100637.78, 100658.18, 100887.12, 100700.25, 100338.73], "gate": {"version": 1, "passed": false, "summary": {"trades": 16, "wins": 7, "losses": 9, "win_rate": 0.438, "net_pnl": 339.8, "fees": 4.86, "profit_factor": 1.15, "expectancy_r": 0.044, "avg_win": 375.74, "avg_loss": -254.49, "max_drawdown_pct": 1.08, "sharpe": 0.8, "streak": -1, "max_win_streak": 2, "max_loss_streak": 4, "avg_bars_held": 32.9, "exit_reasons": {"SL": 5, "CLOSED": 7, "TP": 3, "EXTERNAL": 1}}, "checks": [{"name": "Enough trades", "ok": false, "detail": "16 / 100"}, {"name": "Enough days on demo", "ok": false, "detail": "9 / 21 days"}, {"name": "Profit after fees", "ok": true, "detail": "+339.80"}, {"name": "Profit factor", "ok": false, "detail": "1.15 (needs 1.3+)"}, {"name": "Drawdown within limit", "ok": true, "detail": "1.08% (limit 10.0%)"}, {"name": "Close to its backtest", "ok": true, "detail": "live 0.044R vs backtest 0.006R"}, {"name": "No crashes", "ok": false, "detail": "225 crashes"}]}, "events": [{"ts": "2026-10-26 17:15:37.336057+00:00", "level": "TRADE", "msg": "CLOSE SELL @ 1.1188 (SL)  pnl -503.10"}, {"ts": "2026-10-26 17:15:37.250418+00:00", "level": "WARN", "msg": "position NOT opened by Sailar-x is open on EURUSD: BUY 0.01 lots #11100852338 opened Oct 26 09:00 UTC, NO stop loss, floating -2.48. Sailar-x does not touch it. Close it by hand, or set foreign_positions to 'close'."}, {"ts": "2026-10-26 16:47:55.381294+00:00", "level": "WARN", "msg": "position NOT opened by Sailar-x is open on EURUSD: BUY 0.01 lots #11100852338 opened Oct 26 09:00 UTC, NO stop loss, floating -3.11. Sailar-x does not touch it. Close it by hand, or set foreign_positions to 'close'."}, {"ts": "2026-10-26 16:47:33.230711+00:00", "level": "WARN", "msg": "position NOT opened by Sailar-x is open on EURUSD: BUY 0.01 lots #11100852338 opened Oct 26 09:00 UTC, NO stop loss, floating -3.07. Sailar-x does not touch it. Close it by hand, or set foreign_positions to 'close'."}, {"ts": "2026-10-26 16:46:42.576643+00:00", "level": "CRASH", "msg": "Traceback (most recent call last):\n  File \"C:\\workspace\\sailar-x\\sailar-x\\sailar\\runner.py\", line 132, in run\n    df = fetch_candles(cfg, ex)\n  File \"C:\\workspace\\sailar-x\\sailar-x\\sailar\\data.py\", line 48, in fetch_candles\n    return mt5_candles(cfg, cfg[\"candles\"]).iloc[:-1]\n           ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^\n  File \"C:\\workspace\\sailar-x\\sailar-x\\sailar\\data.py\", line 28, in mt5_candles\n    raise RuntimeError(f\"MT5 returned no candles for {cfg['symbol']}: {m.last_error()}\")\nRuntimeError: MT5 returned no candles for EURUSD: (-10001, 'IPC send failed')\n"}, {"ts": "2026-10-26 16:45:42.540785+00:00", "level": "CRASH", "msg": "Traceback (most recent call last):\n  File \"C:\\workspace\\sailar-x\\sailar-x\\sailar\\runner.py\", line 132, in run\n    df = fetch_candles(cfg, ex)\n  File \"C:\\workspace\\sailar-x\\sailar-x\\sailar\\data.py\", line 48, in fetch_candles\n    return mt5_candles(cfg, cfg[\"candles\"]).iloc[:-1]\n           ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^\n  File \"C:\\workspace\\sailar-x\\sailar-x\\sailar\\data.py\", line 28, in mt5_candles\n    raise RuntimeError(f\"MT5 returned no candles for {cfg['symbol']}: {m.last_error()}\")\nRuntimeError: MT5 returned no candles for EURUSD: (-10001, 'IPC send failed')\n"}, {"ts": "2026-10-26 16:44:42.513798+00:00", "level": "CRASH", "msg": "Traceback (most recent call last):\n  File \"C:\\workspace\\sailar-x\\sailar-x\\sailar\\runner.py\", line 132, in run\n    df = fetch_candles(cfg, ex)\n  File \"C:\\workspace\\sailar-x\\sailar-x\\sailar\\data.py\", line 48, in fetch_candles\n    return mt5_candles(cfg, cfg[\"candles\"]).iloc[:-1]\n           ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^\n  File \"C:\\workspace\\sailar-x\\sailar-x\\sailar\\data.py\", line 28, in mt5_candles\n    raise RuntimeError(f\"MT5 returned no candles for {cfg['symbol']}: {m.last_error()}\")\nRuntimeError: MT5 returned no candles for EURUSD: (-10001, 'IPC send failed')\n"}, {"ts": "2026-10-26 16:43:42.490658+00:00", "level": "CRASH", "msg": "Traceback (most recent call last):\n  File \"C:\\workspace\\sailar-x\\sailar-x\\sailar\\runner.py\", line 132, in run\n    df = fetch_candles(cfg, ex)\n  File \"C:\\workspace\\sailar-x\\sailar-x\\sailar\\data.py\", line 48, in fetch_candles\n    return mt5_candles(cfg, cfg[\"candles\"]).iloc[:-1]\n           ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^\n  File \"C:\\workspace\\sailar-x\\sailar-x\\sailar\\data.py\", line 28, in mt5_candles\n    raise RuntimeError(f\"MT5 returned no candles for {cfg['symbol']}: {m.last_error()}\")\nRuntimeError: MT5 returned no candles for EURUSD: (-10001, 'IPC send failed')\n"}, {"ts": "2026-10-26 16:42:42.463097+00:00", "level": "CRASH", "msg": "Traceback (most recent call last):\n  File \"C:\\workspace\\sailar-x\\sailar-x\\sailar\\runner.py\", line 132, in run\n    df = fetch_candles(cfg, ex)\n  File \"C:\\workspace\\sailar-x\\sailar-x\\sailar\\data.py\", line 48, in fetch_candles\n    return mt5_candles(cfg, cfg[\"candles\"]).iloc[:-1]\n           ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^\n  File \"C:\\workspace\\sailar-x\\sailar-x\\sailar\\data.py\", line 28, in mt5_candles\n    raise RuntimeError(f\"MT5 returned no candles for {cfg['symbol']}: {m.last_error()}\")\nRuntimeError: MT5 returned no candles for EURUSD: (-10001, 'IPC send failed')\n"}, {"ts": "2026-10-26 16:41:42.453641+00:00", "level": "CRASH", "msg": "Traceback (most recent call last):\n  File \"C:\\workspace\\sailar-x\\sailar-x\\sailar\\runner.py\", line 132, in run\n    df = fetch_candles(cfg, ex)\n  File \"C:\\workspace\\sailar-x\\sailar-x\\sailar\\data.py\", line 48, in fetch_candles\n    return mt5_candles(cfg, cfg[\"candles\"]).iloc[:-1]\n           ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^\n  File \"C:\\workspace\\sailar-x\\sailar-x\\sailar\\data.py\", line 28, in mt5_candles\n    raise RuntimeError(f\"MT5 returned no candles for {cfg['symbol']}: {m.last_error()}\")\nRuntimeError: MT5 returned no candles for EURUSD: (-10001, 'IPC send failed')\n"}, {"ts": "2026-10-26 16:40:42.426818+00:00", "level": "CRASH", "msg": "Traceback (most recent call last):\n  File \"C:\\workspace\\sailar-x\\sailar-x\\sailar\\runner.py\", line 132, in run\n    df = fetch_candles(cfg, ex)\n  File \"C:\\workspace\\sailar-x\\sailar-x\\sailar\\data.py\", line 48, in fetch_candles\n    return mt5_candles(cfg, cfg[\"candles\"]).iloc[:-1]\n           ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^\n  File \"C:\\workspace\\sailar-x\\sailar-x\\sailar\\data.py\", line 28, in mt5_candles\n    raise RuntimeError(f\"MT5 returned no candles for {cfg['symbol']}: {m.last_error()}\")\nRuntimeError: MT5 returned no candles for EURUSD: (-10001, 'IPC send failed')\n"}, {"ts": "2026-10-26 16:39:42.383443+00:00", "level": "CRASH", "msg": "Traceback (most recent call last):\n  File \"C:\\workspace\\sailar-x\\sailar-x\\sailar\\runner.py\", line 132, in run\n    df = fetch_candles(cfg, ex)\n  File \"C:\\workspace\\sailar-x\\sailar-x\\sailar\\data.py\", line 48, in fetch_candles\n    return mt5_candles(cfg, cfg[\"candles\"]).iloc[:-1]\n           ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^\n  File \"C:\\workspace\\sailar-x\\sailar-x\\sailar\\data.py\", line 28, in mt5_candles\n    raise RuntimeError(f\"MT5 returned no candles for {cfg['symbol']}: {m.last_error()}\")\nRuntimeError: MT5 returned no candles for EURUSD: (-10001, 'IPC send failed')\n"}, {"ts": "2026-10-26 16:26:48.781116+00:00", "level": "WARN", "msg": "position NOT opened by Sailar-x is open on EURUSD: BUY 0.01 lots #11100852338 opened Oct 26 09:00 UTC, NO stop loss, floating -3.35. Sailar-x does not touch it. Close it by hand, or set foreign_positions to 'close'."}, {"ts": "2026-10-26 16:21:43.581461+00:00", "level": "CRASH", "msg": "Traceback (most recent call last):\n  File \"C:\\workspace\\sailar-x\\sailar-x\\sailar\\runner.py\", line 132, in run\n    df = fetch_candles(cfg, ex)\n  File \"C:\\workspace\\sailar-x\\sailar-x\\sailar\\data.py\", line 48, in fetch_candles\n    return mt5_candles(cfg, cfg[\"candles\"]).iloc[:-1]\n           ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^\n  File \"C:\\workspace\\sailar-x\\sailar-x\\sailar\\data.py\", line 28, in mt5_candles\n    raise RuntimeError(f\"MT5 returned no candles for {cfg['symbol']}: {m.last_error()}\")\nRuntimeError: MT5 returned no candles for EURUSD: (-10001, 'IPC send failed')\n"}, {"ts": "2026-10-26 16:09:34.092126+00:00", "level": "TRADE", "msg": "OPEN SELL 5.85 @ 1.1179  SL 1.1188  TP 1.1166  conf 77%"}, {"ts": "2026-10-26 16:09:30.753682+00:00", "level": "WARN", "msg": "position NOT opened by Sailar-x is open on EURUSD: BUY 0.01 lots #11100852338 opened Oct 26 09:00 UTC, NO stop loss, floating -3.69. Sailar-x does not touch it. Close it by hand, or set foreign_positions to 'close'."}, {"ts": "2026-10-26 13:44:03.918645+00:00", "level": "TRADE", "msg": "CLOSE SELL @ 1.1193 (TP)  pnl +749.10"}, {"ts": "2026-10-26 13:44:03.834863+00:00", "level": "WARN", "msg": "position NOT opened by Sailar-x is open on EURUSD: BUY 0.01 lots #11100852338 opened Oct 26 09:00 UTC, NO stop loss, floating -3.31. Sailar-x does not touch it. Close it by hand, or set foreign_positions to 'close'."}, {"ts": "2026-10-26 13:43:43.788323+00:00", "level": "TRADE", "msg": "position is closed at the broker; waiting for its deal history"}, {"ts": "2026-10-26 11:30:05.300044+00:00", "level": "INFO", "msg": "AI watch (shadow): tighten to lock_half_r, 80% sure. profit >1R; no adverse news; downtrend persists -> SHADOW: would tighten to lock_half_r"}], "versions": [{"version": 1, "parent": null, "status": "active", "created": "2026-10-17 07:41:49.004161+00:00", "retired": null, "reason": null, "account": 1}], "brain": {"mode": "shadow", "enabled": true, "providers": {"groq": {"model": "openai/gpt-oss-120b", "fails": 0, "cooling_s": 0, "ok": true}, "gemini": {"model": null, "fails": 0, "cooling_s": 0, "ok": true}, "serper": {"model": "google-search", "fails": 0, "cooling_s": 0, "ok": true}}, "calls_today": 25, "budget": 300, "last_error": "", "research": {"as_of": "2026-10-26 17:15:37.250418+00:00", "events": [], "headlines": [], "mood": "unclear", "bias": {}, "summary": "", "provider": "groq", "model": "openai/gpt-oss-120b", "search_engine": "serper", "age_min": 8, "sources": [{"title": "Economic Calendar", "uri": "https://www.fxstreet.com/economic-calendar"}, {"title": "Calendar", "uri": "https://www.forexfactory.com/calendar"}, {"title": "EURUSD \u2013 Economic Events \u2014 Forex Calendar", "uri": "https://www.tradingview.com/symbols/EURUSD/economic-calendar/"}, {"title": "Economic Calendar", "uri": "https://www.myfxbook.com/forex-economic-calendar"}, {"title": "Economic Calendar", "uri": "https://www.investing.com/economic-calendar"}, {"title": "Forex Calendar: Economic Calendar for FX Traders", "uri": "https://www.babypips.com/economic-calendar"}]}, "research_error": "", "reviews": [{"id": 26, "ts": "2026-10-26 16:09:30.753682+00:00", "version": 1, "kind": "review", "provider": "groq", "model": "openai/gpt-oss-120b", "latency_ms": 2570, "ok": 1, "applied": "SHADOW: reduce size to 0.60x", "summary": "Trend is strong and higher\u2011timeframe aligns, but RSI is oversold and recent SELLs have been mostly losers; reduce size.", "response": {"decision": "REDUCE", "confidence": 70, "event_risk": "low", "reasons": ["Strong ADX trend", "Higher\u2011timeframe SELL alignment", "Zero spread"], "risks": ["Oversold RSI", "Recent losing streak", "Volume disagreement"], "size_multiplier": 0.6, "blackout": null}, "trade_id": 16, "error": ""}, {"id": 19, "ts": "2026-10-26 10:30:16.500758+00:00", "version": 1, "kind": "review", "provider": "groq", "model": "openai/gpt-oss-120b", "latency_ms": 1886, "ok": 1, "applied": "SHADOW: reduce size to 0.50x", "summary": "Sell entry aligns with higher TF but ADX is low, volume signal disagrees and recent trades show a losing streak; reduce size.", "response": {"decision": "REDUCE", "confidence": 65, "event_risk": "none", "reasons": ["low ADX", "recent losses", "stoch disagreement"], "risks": ["weak trend", "thin volume", "recent losing streak"], "size_multiplier": 0.5, "blackout": null}, "trade_id": 15, "error": ""}, {"id": 14, "ts": "2026-10-26 08:15:03.080425+00:00", "version": 1, "kind": "review", "provider": "groq", "model": "openai/gpt-oss-120b", "latency_ms": 2872, "ok": 1, "applied": "SHADOW: reduce size to 0.60x", "summary": "Sell EURUSD 1.1209 fits 1h trend but recent losing SELL trades and weak volume suggest reducing size.", "response": {"decision": "REDUCE", "confidence": 65, "event_risk": "none", "reasons": ["Higher TF aligns", "Moderate ADX trend", "Reward/Risk 1.5"], "risks": ["Recent SELL losing streak", "Low volume signal", "Potential thin liquidity"], "size_multiplier": 0.6, "blackout": null}, "trade_id": 14, "error": ""}, {"id": 11, "ts": "2026-10-26 07:15:15.696908+00:00", "version": 1, "kind": "review", "provider": "groq", "model": "openai/gpt-oss-120b", "latency_ms": 3512, "ok": 1, "applied": "SHADOW: reduce size to 0.60x", "summary": "Setup looks decent but recent SELL losses suggest scaling down size.", "response": {"decision": "REDUCE", "confidence": 68, "event_risk": "none", "reasons": ["higher TF aligns", "tight spread", "moderate ADX"], "risks": ["recent SELL losing streak", "RSI near oversold", "stop close to ATR"], "size_multiplier": 0.6, "blackout": null}, "trade_id": 13, "error": ""}, {"id": 9, "ts": "2026-10-23 14:30:01.383669+00:00", "version": 1, "kind": "review", "provider": "groq", "model": "openai/gpt-oss-120b", "latency_ms": 5150, "ok": 1, "applied": "SHADOW: reduce size to 0.60x", "summary": "Sell EURUSD 15m has strong signal but low ADX and recent losing shorts suggest reducing size.", "response": {"decision": "REDUCE", "confidence": 65, "event_risk": "none", "reasons": ["high signal confidence", "higher timeframe alignment", "tight spread"], "risks": ["low ADX trend", "recent short losses"], "size_multiplier": 0.6, "blackout": null}, "trade_id": 12, "error": ""}, {"id": 7, "ts": "2026-10-23 11:15:36.372997+00:00", "version": 1, "kind": "review", "provider": "groq", "model": "openai/gpt-oss-120b", "latency_ms": 3863, "ok": 1, "applied": "SHADOW: reduce size to 0.60x", "summary": "Sell EURUSD 15m aligns with 1h trend, strong signal confidence, but moderate ADX and RSI near oversold suggest reducing size.", "response": {"decision": "REDUCE", "confidence": 70, "event_risk": "none", "reasons": ["Higher timeframe SELL alignment", "Signal confidence 81%", "Zero spread"], "risks": ["Moderate ADX", "RSI near oversold", "MACD disagreement"], "size_multiplier": 0.6, "blackout": null}, "trade_id": 11, "error": ""}, {"id": 6, "ts": "2026-10-23 09:37:15.687315+00:00", "version": 1, "kind": "review", "provider": "groq", "model": "openai/gpt-oss-120b", "latency_ms": 3349, "ok": 1, "applied": "SHADOW: reduce size to 0.80x", "summary": "Sell setup aligns with 1h trend and tight spread, but oversold indicators and recent BUY streak suggest modest size reduction.", "response": {"decision": "REDUCE", "confidence": 70, "event_risk": "low", "reasons": ["higher timeframe SELL alignment", "tight spread", "moderate ADX trend"], "risks": ["oversold RSI/stoch", "recent BUY bias", "low volatility BB squeeze"], "size_multiplier": 0.8, "blackout": null}, "trade_id": 10, "error": ""}, {"id": 5, "ts": "2026-10-23 09:19:49.121084+00:00", "version": 1, "kind": "review", "provider": "groq", "model": "openai/gpt-oss-120b", "latency_ms": 3357, "ok": 1, "applied": "SHADOW: reduce size to 0.60x", "summary": "Sell entry aligns with 1h trend and moderate ADX, but low volume and tight volatility suggest reducing size.", "response": {"decision": "REDUCE", "confidence": 70, "event_risk": "none", "reasons": ["Higher TF SELL alignment", "Moderate ADX trend", "Zero spread"], "risks": ["Low volume", "Bollinger squeeze", "Stoch low"], "size_multiplier": 0.6, "blackout": null}, "trade_id": 9, "error": ""}], "postmortem_categories": {"stop_too_tight": 3, "good_trade": 3, "range_chop": 1, "spread_or_slippage": 1}, "postmortems": [{"id": 33, "ts": "2026-10-26 17:15:37.250418+00:00", "version": 1, "kind": "postmortem", "provider": "groq", "model": "openai/gpt-oss-120b", "latency_ms": 4914, "ok": 1, "applied": "stop_too_tight", "summary": "A very tight stop (\u22488\u202fpips) in a high\u2011ADX (strong trend) market caused the trade to be stopped out by normal price noise.", "response": {"category": "stop_too_tight", "lesson": "A very tight stop (\u22488\u202fpips) in a high\u2011ADX (strong trend) market caused the trade to be stopped out by normal price noise.", "suggestion": "Test a volatility\u2011based stop size (e.g., 1.5\u202f\u00d7\u202fATR or a minimum of 12\u201115\u202fpips) for SELL entries when ADX > 30."}, "trade_id": 16, "error": ""}, {"id": 25, "ts": "2026-10-26 13:44:03.834863+00:00", "version": 1, "kind": "postmortem", "provider": "groq", "model": "openai/gpt-oss-120b", "latency_ms": 1665, "ok": 1, "applied": "good_trade", "summary": "Trade hit TP quickly with strong bearish confluence (supertrend, EMA, MACD) and RSI near oversold, confirming sell direction.", "response": {"category": "good_trade", "lesson": "Trade hit TP quickly with strong bearish confluence (supertrend, EMA, MACD) and RSI near oversold, confirming sell direction.", "suggestion": "Test a tighter stop just above the recent swing high to reduce risk while keeping the same TP for better risk\u2011reward."}, "trade_id": 15, "error": ""}, {"id": 18, "ts": "2026-10-26 10:20:33.818809+00:00", "version": 1, "kind": "postmortem", "provider": "groq", "model": "openai/gpt-oss-120b", "latency_ms": 1997, "ok": 1, "applied": "stop_too_tight", "summary": "The stop was set at the entry price, causing an immediate exit with zero P&L. Stops must be placed away from entry to allow the trade room to move.", "response": {"category": "stop_too_tight", "lesson": "The stop was set at the entry price, causing an immediate exit with zero P&L. Stops must be placed away from entry to allow the trade room to move.", "suggestion": "Test a rule that sets the stop at least 1\u20112% of the current price or uses a multiple of the ATR (e.g., 1.5\u202f\u00d7\u202fATR) instead of at the entry level."}, "trade_id": 14, "error": ""}, {"id": 13, "ts": "2026-10-26 08:09:01.109239+00:00", "version": 1, "kind": "postmortem", "provider": "groq", "model": "openai/gpt-oss-120b", "latency_ms": 3409, "ok": 1, "applied": "stop_too_tight", "summary": "The stop loss was set only ~1.5\u202fpips away from the entry, far tighter than market noise, causing the trade to be stopped out almost immediately.", "response": {"category": "stop_too_tight", "lesson": "The stop loss was set only ~1.5\u202fpips away from the entry, far tighter than market noise, causing the trade to be stopped out almost immediately.", "suggestion": "Implement a rule that the stop distance must be at least 1.5\u202f\u00d7\u202fATR (or a minimum of X pips) away from the entry and always on the correct side for the trade direction."}, "trade_id": 13, "error": ""}, {"id": 10, "ts": "2026-10-26 04:37:23.999130+00:00", "version": 1, "kind": "postmortem", "provider": "groq", "model": "openai/gpt-oss-120b", "latency_ms": 4543, "ok": 1, "applied": "range_chop", "summary": "Low ADX (\u224824) indicated a weak trend, yet the system entered a sell based on bearish signals. The price stayed in a tight range and hit the stop.", "response": {"category": "range_chop", "lesson": "Low ADX (\u224824) indicated a weak trend, yet the system entered a sell based on bearish signals. The price stayed in a tight range and hit the stop.", "suggestion": "Add a pre\u2011trade filter: only trade when ADX > 25 and the stop distance is at least 1.5\u202f\u00d7\u202fthe current ATR, to avoid choppy, low\u2011trend markets."}, "trade_id": 12, "error": ""}, {"id": 8, "ts": "2026-10-23 11:26:23.158789+00:00", "version": 1, "kind": "postmortem", "provider": "groq", "model": "openai/gpt-oss-120b", "latency_ms": 2113, "ok": 1, "applied": "spread_or_slippage", "summary": "The trade was closed instantly, likely because the spread or slippage ate the tiny expected move, turning a near\u2011break\u2011even into a loss.", "response": {"category": "spread_or_slippage", "lesson": "The trade was closed instantly, likely because the spread or slippage ate the tiny expected move, turning a near\u2011break\u2011even into a loss.", "suggestion": "Implement a rule to skip entries when the current spread exceeds a set threshold (e.g., >0.5\u202fpips) or when the projected profit is less than twice the spread."}, "trade_id": 11, "error": ""}], "conclusions": [], "value": {"REDUCE": {"trades": 9, "win_rate": 0.333, "avg_r": 0.001, "net": -4.46}, "_summary": {"reviewed_trades": 9, "money_saved_if_rejects_were_skipped": -0.0, "enough_data": false}}}}