← Dashboard 50K

NQ Looper 50K — Bot DCA Loop2

TopStep 50K Trading Combine · MNQ · Config V8 "zero-SL" · 2026-04-19

● PRÊT — départ manuel Trading Combine LIVE Backtest 18j · 0 SL · 18/18 TP days SL $1,600 (buffer DD ~$40)

Headlines du 50K

Balance départ $50,000 compte live Trading Combine
Daily TP target $1,520 kill-switch après cycle
SL hard cap $1,600 marge 88 pts post-SO3 · buffer DD ~$40
Max exposure 9 micros $18/pt max en full DCA

Compte & instrument

Compte TopStep 50K Trading Combine

Nom50KTC-V2-46786-56936760
ID21857049
Balance$50,000 fresh
ModeTRADING_COMBINE (LIVE)
User APIgoldy1971 (clé dédiée, séparée 150K/Bot S)
Credentialsconfig/secrets.env (chmod 600)

Instrument MNQ

SymbolMNQ (Micro E-mini Nasdaq 100)
Contract IDCON.F.US.MNQ.M26
Tick size / value0.25 pt · $0.50
Point value$2.00 / micro
DirectionLONG uniquement

Grille DCA 50K V8 "zero-SL" (sizes [2,2,4] · offsets [10,20,40])

Grille winner grid-search (8 sizes × 6 offsets × 3 DW modes = 144 configs). Offsets élargis + SO1 renforcé (2 ct) = moyenne lissée plus bas, marge SL post-SO3 à 88.9 pts sous avg entry. Backtest 18j (2026-03-24 → 04-17) : 0 SL, 18/18 Daily TP, total $27,818 (avg $1,545/j).

Niveau
Offset
Contracts
Cumul
$/pt
BASE
0 pt
1
1
$2
SO1
−10 pts
2
3
$6
SO2
−20 pts
2
5
$10
SO3
−40 pts
4
9
$18
MAX
−40 pts
9
9
$18/pt
Take-Profitavg +7 ptsfixe, recalculé après chaque fill SO
Max safety orders3place_all_so = True
exit_be_after_last_soFalseSL $1,600 gère la sortie

Budget risque détaillé

Scénario
Perte
Gain
Cycle TP direct (1 micro × 7 pts)
+$14
Cycle complet TP après SO3 (9 micros × 7 pts)
+$126
Perte à SO3 déclenché (clean base case, avg −22.2 pt)
−$400
Perte à SL hard cap $1,600 touché
−$1,600
Worst case : SL + slippage +20 pts (9ct × $2)
−$1,960
Buffer restant avant Max DD $2,000
$40 (2 %)
⚠️ Rationale SL $1,600 — buffer DD serré

Choix validé François 2026-04-19 après grid-search. Backtest 18j démontre 0 SL avec DANGER_WINDOWS actives (la fenêtre EU_LUNCH 12:00-13:00 neutralise le dump isolé du 2026-04-06). Le SL $1,600 est donc filet de sécurité rarement touché, pas un scénario attendu. Marge théorique : 88.9 pts sous avg post-SO3. Si SL + slippage 20 pts déclenché : perte $1,960 → max DD à $40 près. Un seul SL consommerait quasi tout le buffer.

Sessions de trading + DANGER_WINDOWS V8 — heures Paris (CEST)

V8 combine sessions US + 10 DANGER_WINDOWS bloquant les nouvelles entrées (positions en cours continuent). Start effectif à 09:00 Paris (ASIA_SESSION_START_CONTROL), cluster EU 12:00-13:00 bloqué (ajouté V8), 7 fenêtres US data-driven.

00:00 → 09:00 ASIA_SESSION_START_CONTROL — session Asie bloquée (start-time 09:00 Paris) DW bloqué
09:00 → 12:00 Matinée EU tradable — zone propre historiquement tradable
12:00 → 13:00 EU_LUNCH_DUMP — cluster dump EU mid-morning (ajouté V8 : killer du SL 06/04) DW bloqué
13:00 → 14:25 Après-midi EU tradable tradable
14:25 → 14:45 MACRO_US_RELEASE — CPI/NFP/PPI/ISM (jours data) DW bloqué
14:45 → 15:20 Pré-ouverture US tradable tradable
15:20 → 15:55 NY_OPEN — 09:30 ET, drops cumulés max 184 pts/15 min sur 15j DW bloqué
15:55 → 16:30 POST_OPEN_KICKBACK — rebond piège post-open DW bloqué
16:30 → 17:05 MID_MORNING_US — 10:30 ET, vague de dumps récurrents DW bloqué
17:05 → 18:55 Lunch US tradable — zone calme historique tradable
18:55 → 19:35 PRE_POWER_HOUR — flash crash 13:00 ET DW bloqué
19:35 → 19:55 Afternoon gap tradable tradable
19:55 → 20:30 FOMC_OR_2PM_RELEASE — FOMC / 14:00 ET news DW bloqué
20:30 → 20:55 Power hour tradable tradable
20:55 → 22:05 NY_CLOSE — volatilité settlement DW bloqué
22:05 → 22:55 Post-close tradable tradable
22:55 → 23:59 CME_DAILY_BREAK — pause quotidienne CME DW bloqué
Logique : DW priorisé, SESSIONS en filet

Les DANGER_WINDOWS bloquent les nouvelles entrées par horaire Paris (DST-safe, zoneinfo). Les SESSIONS UTC conservées comme filet de trailing stop 3 pts hors fenêtre : exit_on_positive=True, sortie au premier recul si déjà en profit. Position en cours n'est jamais coupée par une DW : seule l'ouverture de nouveau cycle est bloquée.

⚠️ Heures Paris CEST (été). En CET (hiver), les 10 DW restent correctes (gérées en Paris-time via datetime.now(ZoneInfo("Europe/Paris"))).

Scaling 150K → 50K (leverage ÷3)

Paramètre 150K combine 50K combine Ratio
account_size$150,000$50,000×1/3
max_drawdown (trailing)$4,500$2,000×0.44 (contrainte propfirm 50K)
SL hard cap (max_loss_usd)$3,000$1,600V8 : marge 88 pt vs 75 pt
Daily TP kill-switch$4,525$1,520×1/3
Daily Loss Limit$3,000$1,200×0.4
Base order contracts21×0.5
SO sizes[2, 6, 18][2, 2, 4]V8 winner grid-search
SO offsets (pts)[−7, −14, −28][−10, −20, −40]V8 : offsets élargis, 0 SL
Max contracts279×1/3
$/pt max$54$18×1/3
TP fixe7 pts7 ptsinchangé
Max consecutive losses32plus serré
Pause après loss (s)300600×2 (plus prudent)
Pourquoi V8 [2,2,4] offsets [10,20,40] bat V7 [1,2,5] offsets [7,14,28]

Grid-search 144 configs (8 sizes × 6 offsets × 3 DW modes) sur 18j. V7 baseline : 9 SL / 17 Daily TP days, $27,106. V8 winner : 0 SL / 18 Daily TP days, $27,818. Les offsets élargis (SO3 à −40 vs −28) + SO1 renforcé à 2 ct lissent la moyenne plus bas (avg post-SO3 = entry −22.2 pt) ce qui étend la marge SL à 88.9 pt sous avg. DANGER_WINDOWS EU_LUNCH 12:00-13:00 (ajouté V8) neutralise le dump isolé 2026-04-06 à 12:40 Paris (−80 pt / 5 min).

Philosophie : 50K Combine vs Practice 150K

Critère NQ Looper 50K (ici) Practice 150K V7
Type compteTrading Combine LIVEPractice (pas de DLL)
StratégieV8 zero-SLV7 tight martingale
Offsets SO[−10, −20, −40] (large)[−5, −12, −25] (serré)
SO sizes[2, 2, 4][10, 12, 24]
Filtre horaireDANGER_WINDOWS 10 fenêtresDANGER_WINDOWS 9 fenêtres
Heures tradables/jour~9h45 (hors DW)10h55 (hors DW)
Trailing hors fenêtreOui (3 pts)Non (24/7 bypass)
SL hard cap$1,600$4,500
Daily TP$1,520$4,535
Backtest 18j : SL0 SL0 SL
Backtest 18j : Daily TP days18/1818/18

Gestion des risques

Max DD trailing$2,000contrainte propfirm 50K Combine
Daily Loss Limit$1,200TopStep 50K DLL standard
Daily TP vs DD$1,520 > $1,200TP > DLL, compte "sort du trailing"
⚠️ Points de vigilance Trading Combine — SL $1,600 tendu

Un SL $1,600 + slippage +20 pts × 9 ct × $2 = $1,960 de drawdown réel, soit 98 % du buffer max DD $2,000. Un seul SL touché consommerait quasi l'intégralité du buffer DD. Deux SL consécutifs → max_consecutive_losses=2 déclenche pause 600 s et buffer ≤ 0. Le backtest 18j montre 0 SL grâce aux DW actives : le SL $1,600 reste filet de sécurité rarement touché, pas un scénario attendu. Si 1 SL arrive en réel : arrêter le bot manuellement, réévaluer la grille ou passer à SL $1,200.

Infrastructure

Stack technique

Code pathbot_DCA/loop2/propfirm/topstep_combine50k/
Service systemdnq-looper-50k-api
Port interne127.0.0.1:8892
Log API/var/log/nq-looper-50k-api.log
Dashboardnq-looper-50k.html

API Endpoints

HealthGET /api/nq-looper-50k/health
StatusGET /api/nq-looper-50k/status
SettingsGET /api/nq-looper-50k/settings
StartPOST /api/nq-looper-50k/start
StopPOST /api/nq-looper-50k/stop
KillPOST /api/nq-looper-50k/kill

Config finale (config/settings.py)

STRATEGY = { "symbol": "MNQ", "contract_id": "CON.F.US.MNQ.M26", "side": "long", "base_order_contracts": 1, "tp_fixed_pts": 7.0, "exit_be_after_last_so": False, "max_safety_orders": 3, # V8 winner grid-search (8 sizes × 6 offsets × 3 DW modes) "so_sizes_contracts": [2, 2, 4], "so_offsets_pts": [10, 20, 40], "place_all_so": True, } DANGER_WINDOWS = [ # 10 fenêtres Paris, DST-safe {"start": "00:00", "end": "09:00", "label": "ASIA_SESSION_START_CONTROL"}, {"start": "12:00", "end": "13:00", "label": "EU_LUNCH_DUMP"}, # ajouté V8 {"start": "14:25", "end": "14:45", "label": "MACRO_US_RELEASE"}, {"start": "15:20", "end": "15:55", "label": "NY_OPEN"}, {"start": "15:55", "end": "16:30", "label": "POST_OPEN_KICKBACK"}, {"start": "16:30", "end": "17:05", "label": "MID_MORNING_US"}, {"start": "18:55", "end": "19:35", "label": "PRE_POWER_HOUR"}, {"start": "19:55", "end": "20:30", "label": "FOMC_OR_2PM_RELEASE"}, {"start": "20:55", "end": "22:05", "label": "NY_CLOSE"}, {"start": "22:55", "end": "23:59", "label": "CME_DAILY_BREAK"}, ] RISK = { "account_size": 50000, "max_contracts": 9, "daily_loss_limit": 1200, "max_drawdown": 2000, "max_loss_usd": 1600, # V8 : élargi $1000 → $1600, 0 SL backtest "daily_tp_usd": 1520, # Daily TP kill-switch "max_consecutive_losses": 2, "loss_pause_seconds": 600, } TOPSTEPX = { "target_account_id": 21857049, # 50KTC-V2-46786-56936760 }

Actions