Rejoindre la liste d'attente
Stratégies / Volatilité / DAX Survivor

DAX Survivor

L'ADX(14) décide du mode. Sur les marchés calmes, le système achète après une grande bougie baissière et passe short après une grande bougie haussière, et quand l'ADX est élevé il suit plutôt la bougie. Les longs se clôturent 30 bars après le dernier trade et les shorts après 5 bars.

VolatilitéLong & shortSwingFTSE 1004 heures
1.17Profit factor
7,580Gain net EUR
55.75%Taux de réussite
1,514Trades
-1,646Max drawdown
5.01Trade moyen

Meilleure exécution sur 4. FTSE 100, 4 heures, spread 2, à partir de l'exécution pf:2026-09-24-FTSE100-4h.tsv:2.

Règles d'entrée, long

  1. Mode breakout : l'ADX(14) est au-dessus de 36 et le corps d'une bougie haussière est plus grand que 1 x ATR(14)
  2. L'ATR(14) est en dessous de 100
  3. Le tableau saisonnier ne bloque pas la moitié de mois en cours (la seconde moitié de janvier et la seconde moitié de septembre sont bloquées)

Règles d'entrée, short

  1. Mode breakout : l'ADX(14) est au-dessus de 24 et le corps d'une bougie baissière est plus grand que 2 x ATR(14)
  2. L'ATR(14) est en dessous de 200

Règles de sortie

  1. Clôturer un short 5 bars après le dernier trade
  2. Pas de stop loss ni d'objectif

Conditions de test

PériodeJusqu'au 2026-09-25
InstrumentFTSE 100, 4 heures
Spread2 points
Contrats1
Capital de départ1,000,000
CoûtsSpread uniquement. Les commissions et le financement overnight ne sont pas inclus.
BarresJusqu'à 200,000 barres, moins lorsque l'instrument a moins d'historique
Dernier test2026-09-25
Paramètres (38)
positionSize
Contrats par trade
1
atrPeriod
Longueur de l'ATR pour la taille des bougies et le plafond de volatilité
14
adxPeriod
Longueur de l'ADX pour le changement de régime
14
adxLongThreshold
Longs : ADX au-dessus = régime breakout, en dessous = mean reversion
36
adxShortThreshold
Shorts : ADX au-dessus = régime breakout, en dessous = mean reversion
24
atrMaxLong
Pas de longs quand l'ATR est à ce niveau ou au-dessus
100
atrMaxShort
Pas de shorts quand l'ATR est à ce niveau ou au-dessus
200
longReversionMultiplier
Long après une bougie baissière plus grande que ce nombre d'ATR
1
longBreakoutMultiplier
Long après une bougie haussière plus grande que ce nombre d'ATR
1
shortReversionMultiplier
Short après une bougie haussière plus grande que ce nombre d'ATR
1
shortBreakoutMultiplier
Short après une bougie baissière plus grande que ce nombre d'ATR
2
maxBarsLong
Clôturer un long après ce nombre de bars
30
maxBarsShort
Clôturer un short après ce nombre de bars
5
midMonthDay
Les jours jusqu'à celui-ci comptent comme la première moitié du mois
15
janFirstHalf
Poids saisonnier, première moitié de janvier (zéro bloque les nouveaux longs)
3
janSecondHalf
Poids saisonnier, seconde moitié de janvier (zéro bloque les nouveaux longs)
0
febFirstHalf
Poids saisonnier, première moitié de février (zéro bloque les nouveaux longs)
3
febSecondHalf
Poids saisonnier, seconde moitié de février (zéro bloque les nouveaux longs)
3
marFirstHalf
Poids saisonnier, première moitié de mars (zéro bloque les nouveaux longs)
3
marSecondHalf
Poids saisonnier, seconde moitié de mars (zéro bloque les nouveaux longs)
2
aprFirstHalf
Poids saisonnier, première moitié d'avril (zéro bloque les nouveaux longs)
3
aprSecondHalf
Poids saisonnier, seconde moitié d'avril (zéro bloque les nouveaux longs)
3
mayFirstHalf
Poids saisonnier, première moitié de mai (zéro bloque les nouveaux longs)
1
maySecondHalf
Poids saisonnier, seconde moitié de mai (zéro bloque les nouveaux longs)
1
junFirstHalf
Poids saisonnier, première moitié de juin (zéro bloque les nouveaux longs)
1
junSecondHalf
Poids saisonnier, seconde moitié de juin (zéro bloque les nouveaux longs)
2
julFirstHalf
Poids saisonnier, première moitié de juillet (zéro bloque les nouveaux longs)
3
julSecondHalf
Poids saisonnier, seconde moitié de juillet (zéro bloque les nouveaux longs)
2
augFirstHalf
Poids saisonnier, première moitié d'août (zéro bloque les nouveaux longs)
2
augSecondHalf
Poids saisonnier, seconde moitié d'août (zéro bloque les nouveaux longs)
3
sepFirstHalf
Poids saisonnier, première moitié de septembre (zéro bloque les nouveaux longs)
3
sepSecondHalf
Poids saisonnier, seconde moitié de septembre (zéro bloque les nouveaux longs)
0
octFirstHalf
Poids saisonnier, première moitié d'octobre (zéro bloque les nouveaux longs)
3
octSecondHalf
Poids saisonnier, seconde moitié d'octobre (zéro bloque les nouveaux longs)
2
novFirstHalf
Poids saisonnier, première moitié de novembre (zéro bloque les nouveaux longs)
1
novSecondHalf
Poids saisonnier, seconde moitié de novembre (zéro bloque les nouveaux longs)
3
decFirstHalf
Poids saisonnier, première moitié de décembre (zéro bloque les nouveaux longs)
3
decSecondHalf
Poids saisonnier, seconde moitié de décembre (zéro bloque les nouveaux longs)
2

Chaque exécution

Marchés et unités de temps testés

MarchéUnité de tempsPFTrades% de réussiteNetMax DD
FTSE 100Meilleure exécution4 heures1.17 1,51455.757,580 EUR-1,646
DAX 40Journaliern/a 34758.219,871 EUR-2,471
GBP/USDJournaliern/a 79955.697,847 USD-7,788
Nasdaq 100Journaliern/a 58550.772,959 EUR-1,721

Graphiques

Résultats par exécution

Gain netMax drawdown

Le code

ProBuilder, réécrit selon le standard maison

// ============================================================
// DAX Survivor
// ProRealAlgos Strategy Library  |  prorealalgos.com
// Type: Volatility
// Direction: Long & short
// Timeframe tested: 4 hours
// ============================================================

// --- Settings ---
DEFPARAM CumulateOrders = false

// --- Parameters ---
positionSize = 1                // contracts per trade
atrPeriod = 14                  // ATR length for candle size and volatility cap
adxPeriod = 14                  // ADX length for the regime switch
adxLongThreshold = 36           // longs: ADX above = breakout regime, below = mean reversion
adxShortThreshold = 24          // shorts: ADX above = breakout regime, below = mean reversion
atrMaxLong = 100                // no longs when ATR is at or above this
atrMaxShort = 200               // no shorts when ATR is at or above this
longReversionMultiplier = 1     // long after a down candle larger than this many ATRs
longBreakoutMultiplier = 1      // long after an up candle larger than this many ATRs
shortReversionMultiplier = 1    // short after an up candle larger than this many ATRs
shortBreakoutMultiplier = 2     // short after a down candle larger than this many ATRs
maxBarsLong = 30                // close a long after this many bars
maxBarsShort = 5                // close a short after this many bars
midMonthDay = 15                // days up to this count as the first half of the month

// Seasonal weights per half month. Only zero matters now: zero blocks new longs.
janFirstHalf = 3
janSecondHalf = 0
febFirstHalf = 3
febSecondHalf = 3
marFirstHalf = 3
marSecondHalf = 2
aprFirstHalf = 3
aprSecondHalf = 3
mayFirstHalf = 1
maySecondHalf = 1
junFirstHalf = 1
junSecondHalf = 2
julFirstHalf = 3
julSecondHalf = 2
augFirstHalf = 2
augSecondHalf = 3
sepFirstHalf = 3
sepSecondHalf = 0
octFirstHalf = 3
octSecondHalf = 2
novFirstHalf = 1
novSecondHalf = 3
decFirstHalf = 3
decSecondHalf = 2

// --- Indicators ---
atrValue = AverageTrueRange[atrPeriod]
adxValue = ADX[adxPeriod]
candleBody = abs(open - close)

longVolatilityOk = atrValue < atrMaxLong
shortVolatilityOk = atrValue < atrMaxShort
longBreakoutRegime = adxValue > adxLongThreshold
longReversionRegime = adxValue < adxLongThreshold
shortBreakoutRegime = adxValue > adxShortThreshold
shortReversionRegime = adxValue < adxShortThreshold

firstHalf = Day <= midMonthDay
IF CurrentMonth = 1 THEN
  IF firstHalf THEN
    seasonWeight = janFirstHalf
  ELSE
    seasonWeight = janSecondHalf
  ENDIF
ELSIF CurrentMonth = 2 THEN
  IF firstHalf THEN
    seasonWeight = febFirstHalf
  ELSE
    seasonWeight = febSecondHalf
  ENDIF
ELSIF CurrentMonth = 3 THEN
  IF firstHalf THEN
    seasonWeight = marFirstHalf
  ELSE
    seasonWeight = marSecondHalf
  ENDIF
ELSIF CurrentMonth = 4 THEN
  IF firstHalf THEN
    seasonWeight = aprFirstHalf
  ELSE
    seasonWeight = aprSecondHalf
  ENDIF
ELSIF CurrentMonth = 5 THEN
  IF firstHalf THEN
    seasonWeight = mayFirstHalf
  ELSE
    seasonWeight = maySecondHalf
  ENDIF
ELSIF CurrentMonth = 6 THEN
  IF firstHalf THEN
    seasonWeight = junFirstHalf
  ELSE
    seasonWeight = junSecondHalf
  ENDIF
ELSIF CurrentMonth = 7 THEN
  IF firstHalf THEN
    seasonWeight = julFirstHalf
  ELSE
    seasonWeight = julSecondHalf
  ENDIF
ELSIF CurrentMonth = 8 THEN
  IF firstHalf THEN
    seasonWeight = augFirstHalf
  ELSE
    seasonWeight = augSecondHalf
  ENDIF
ELSIF CurrentMonth = 9 THEN
  IF firstHalf THEN
    seasonWeight = sepFirstHalf
  ELSE
    seasonWeight = sepSecondHalf
  ENDIF
ELSIF CurrentMonth = 10 THEN
  IF firstHalf THEN
    seasonWeight = octFirstHalf
  ELSE
    seasonWeight = octSecondHalf
  ENDIF
ELSIF CurrentMonth = 11 THEN
  IF firstHalf THEN
    seasonWeight = novFirstHalf
  ELSE
    seasonWeight = novSecondHalf
  ENDIF
ELSE
  IF firstHalf THEN
    seasonWeight = decFirstHalf
  ELSE
    seasonWeight = decSecondHalf
  ENDIF
ENDIF

// The weight used to scale size; with fixed size a zero weight still means "no long".
seasonAllowsLong = seasonWeight <> 0

35 lignes de plus : les règles d'entrée et de sortie.

Configuration

Comment la charger

  1. Copiez le code avec le bouton Copier du bloc de code.
  2. Dans ProRealTime, ouvrez un graphique de l'instrument et de l'unité de temps que vous voulez tester, puis ouvrez ProOrder > Nouveau système de trading et choisissez "Créer par programmation".
  3. Collez le code, donnez un nom au système et enregistrez-le.
  4. Cliquez sur "Backtest", définissez votre propre spread et votre position size, puis lancez-la avant d'envisager de la trader en réel.

Indicateurs utilisés

ATRADX
À lire d'abordFaiblesses connues4 points
  • Il n'y a ni stop loss ni objectif de profit. Les trades ne se terminent qu'au temps écoulé, donc un mouvement brutal contre une position court jusqu'à ce que le nombre de bars soit atteint.
  • La meilleure exécution sur FTSE 100 4 heures a eu un profit factor de 1.17, un edge mince après les coûts.
  • Sur GBP/USD Journalier, le max drawdown (USD 7,788) égale presque le gain net (USD 7,847.10).
  • La version originale ajustait la taille selon la saison et l'ATR. Le code testé trade 1 contrat fixe, c'est donc une version simplifiée.

Questions

À propos de cette stratégie

DAX Survivor est-il compatible ProOrder ?

Oui. Le code réécrit n'a pas encore été vérifié à la compilation et les statistiques publiées proviennent du code antérieur, donc testez-le en démo avant de passer en réel.

Quels ont été ses résultats sur les différents marchés ?

FTSE 100 4 heures a rapporté EUR 7,579.90 sur 1,514 trades. DAX 40 Journalier a rapporté EUR 9,870.90, GBP/USD Journalier USD 7,847.10 et Nasdaq 100 Journalier EUR 2,959.40.

Que risque 1 contrat ?

Le max drawdown de la meilleure exécution à 1 contrat était de EUR 1,645.70. En l'absence de stop, gardez une marge supplémentaire au-dessus de ce chiffre.

Pourquoi des barres de 4 heures et journalières ?

Des durées de détention de 30 et 5 bars nécessitent des bars plus lents pour capter un vrai swing. Toutes les lignes testées étaient en 4 heures ou en Journalier.

Voir aussi

Des stratégies comme celle-ci

ATR Band

Utilise le même indicateur.

10.31 PF · 53 trades

Bollinger Reversal

Meilleure exécution sur le même marché, FTSE 100.

1.74 PF · 117 trades

Breakout Failures

Un profit factor similaire.

1.17 PF · 911 trades

Le changement de régime est une pièce du puzzle. Rejoignez la liste d'attente ProRealAlgos pour voir le reste.

La communauté ProRealAlgos obtient les règles complètes, le code complet et le portefeuille automatisé.

Les résultats passés de backtest ne garantissent pas les résultats futurs. Ceci n'est pas un conseil financier. Sélectionné et maintenu par ProRealAlgos. ProRealTime™ est une marque de ProRealTime SAS. prorealalgos.comStatsDocumentation