Rejoignez-nous
ProBacktest/probacktest · proorder

NOCASHUPDATE

NOCASHUPDATE est un réglage DEFPARAM de ProBacktest qui maintient le capital initial constant pendant un backtest, supprimant les effets de capitalisation des résultats de la stratégie.

Syntaxe

probuilder
DEFPARAM NOCASHUPDATE = true

Paramètres

NomTypePar défautDescription
NOCASHUPDATEbooléenfalseQuand true, le capital initial n'est pas ajusté par les gains et pertes réalisés pendant le backtest. Lorsque false, le capital est mis à jour à chaque trade clôturé.

Comment ça marche

Par défaut, un backtest tient à jour un montant de capital courant : chaque trade clôturé ajoute son gain ou retranche sa perte, et le montant mis à jour limite ce que la stratégie peut se permettre ensuite. Sur une longue simulation, cela crée un effet de capitalisation. Une stratégie gagnante accumule du capital qui permet des positions plus grandes ou plus fréquentes, et une stratégie perdante peut se retrouver à court de liquidités et cesser de trader.

Définir NOCASHUPDATE à true fige le capital à sa valeur initiale pour toute la simulation. Les trades génèrent toujours des gains et des pertes, et la courbe d'equity les enregistre toujours, mais la trésorerie disponible utilisée par le moteur ne bouge jamais. Chaque trade est pris sur la même base de capital, le premier comme le dernier.

Le réglage isole la qualité brute de la logique de trading du parcours du compte. Deux ensembles de signaux peuvent être comparés sur un pied d'égalité, sans que des pertes précoces dans une exécution ne la privent de capital ni que des gains précoces ne la gonflent. Il empêche aussi une stratégie techniquement saine de s'arrêter en plein backtest parce qu'un drawdown a temporairement épuisé les liquidités simulées.

L'instruction est un DEFPARAM, il doit donc figurer en haut du code, avant toute instruction exécutable.

Exemples

Exemple 1, Backtest à capital fixe (ProBacktest)

probuilder
DEFPARAM NOCASHUPDATE = true
// capital stays at its initial value for the entire simulation

IF NOT OnMarket AND close crosses over Average[50](close) THEN
  BUY 1 CONTRACT AT MARKET
  SET STOP PLOSS 40
ENDIF

IF LongOnMarket AND close crosses under Average[50](close) THEN
  SELL AT MARKET
ENDIF

Un simple système de suivi de tendance évalué sur une base de capital constante. Le gain rapporté reflète uniquement les signaux, et non la capitalisation des résultats antérieurs.

Exemple 2, Survivre à un drawdown profond (ProBacktest)

probuilder
DEFPARAM NOCASHUPDATE = true

// mean-reversion entries continue even after a losing streak,
// because losses never reduce the available cash
IF NOT OnMarket AND RSI[14](close) < 25 THEN
  BUY 2 CONTRACTS AT MARKET
  SET STOP PLOSS 60
  SET TARGET PPROFIT 80
ENDIF

Avec le réglage par défaut, une longue série de pertes pourrait épuiser le capital simulé et arrêter silencieusement le backtest avant la fin. Maintenir les liquidités constantes conserve chaque signal dans l'échantillon.

Exemple 3, Comparer la performance brute entre marchés (ProOrder)

probuilder
DEFPARAM NOCASHUPDATE = true
DEFPARAM CumulateOrders = false

long = ExponentialAverage[20](close) crosses over ExponentialAverage[50](close)

IF NOT OnMarket AND long THEN
  BUY 1 CONTRACT AT MARKET
  SET STOP PLOSS 50
ENDIF

Exécuter le même système à taille fixe sur plusieurs instruments avec un capital constant rend les résultats par marché directement comparables, puisque la courbe d'equity d'aucun marché ne rétroagit sur sa prise de position.

Erreurs et pièges courants

  • La valeur par défaut est false. Omettre l'instruction signifie que le capital se met à jour trade par trade. Une stratégie qui semble cesser de trader en cours de backtest peut simplement avoir épuisé ses liquidités simulées sous le comportement par défaut.
  • Les mesures d'equity évoluent quand même. Le réglage fige les liquidités disponibles pour le moteur, pas les statistiques de gain. Les gains et les pertes apparaissent toujours dans la courbe d'equity et dans STRATEGYPROFIT, seule la base de capital cesse d'y réagir.
  • DEFPARAM placement. Comme chaque DEFPARAM, l'instruction doit précéder la première ligne exécutable du code, sinon la compilation échoue.
  • Aucun effet sur l'argent réel. Sur un compte ProOrder en réel, le solde de liquidités reflète toujours les résultats effectifs. Le paramètre façonne la simulation de backtest, ce n'est pas un contrôle du risque en réel.
  • DEFPARAM, déclare les paramètres d'exécution au niveau de la stratégie.
  • CASH, dimensionnement de la position basé sur un montant en espèces.
  • STRATEGYPROFIT, gain courant de la stratégie en devise.
  • CumulateOrders, permet à plusieurs ordres de s'accumuler en une seule position.
  • PRELOADBARS, nombre de bars historiques chargés avant le début du backtest.
  • FLATBEFORE, empêche la prise de position avant une heure définie.
  • FLATAFTER, force la stratégie à se retrouver sans position après une heure définie.
  • MAXORDER, taille maximale autorisée pour un seul ordre.