Rejoignez-nous
ProBacktest/probacktest · proorder

MAXORDER

MAXORDER est un réglage DEFPARAM dans ProBacktest et ProOrder qui plafonne la taille de tout ordre individuel. Les ordres supérieurs à la limite sont écrêtés à la taille maximale.

Syntaxe

probuilder
DEFPARAM MAXORDER = value

Paramètres

NomTypePar défautDescription
valuenumériqueaucunNombre maximal d'unités, de contrats ou de lots autorisés dans un seul ordre.

Comment ça marche

DEFPARAM configurent l'environnement d'exécution d'une stratégie et doivent apparaître en haut du code, avant toute instruction exécutable. MAXORDER est l'un de ces réglages : il définit une limite supérieure à la quantité d'un seul ordre.

Le plafond s'applique au niveau de l'ordre, pas de la position. Dès qu'une instruction d'ordre produit une quantité supérieure à la valeur configurée, le moteur exécute la taille maximale autorisée au lieu de rejeter l'ordre. Un ordre dimensionné dynamiquement à 25 contrats sous DEFPARAM MAXORDER = 10 est exécuté comme 10 contrats.

Le principal cas d'usage est le réalisme. Un position sizing piloté par formule, par exemple en divisant le capital disponible par le prix, peut produire des tailles d'ordre qu'aucun broker ni marché n'absorberait à un seul prix. Plafonner la taille d'un ordre individuel rapproche un backtest des conditions exécutables et protège un système en réel contre une formule de dimensionnement qui s'emballe.

Comme la limite s'applique par ordre, une stratégie qui accumule des positions avec DEFPARAM CumulateOrders = true peut tout de même constituer une position totale supérieure à MAXORDER sur plusieurs ordres.

Exemples

Exemple 1, Plafonner la taille d'ordre à dix unités (ProBacktest)

probuilder
// no single order may exceed 10 units
DEFPARAM MAXORDER = 10

IF NOT OnMarket AND close crosses over Average[50](close) THEN
  BUY 20 CONTRACTS AT MARKET
ENDIF

La stratégie demande 20 contrats, mais le MAXORDER ramène l'ordre à 10. Le backtest simule donc la taille contrainte, et non celle demandée.

Exemple 2, Protéger une formule de dimensionnement basée sur le capital (ProOrder)

probuilder
DEFPARAM MAXORDER = 5

// size grows with capital but can never exceed 5 contracts per order
positionsize = MAX(1, ROUND(strategyprofit / 10000))

IF NOT OnMarket AND RSI[14](close) < 30 THEN
  BUY positionsize CONTRACTS AT MARKET
ENDIF

La formule de dimensionnement évolue avec le profit accumulé. MAXORDER agit comme un plafond strict, de sorte qu'une equity élevée ne peut pas pousser un ordre unique au-delà de 5 contrats.

Exemple 3, Plafond d'ordre avec accumulation de position (ProBacktest)

probuilder
DEFPARAM CumulateOrders = true
DEFPARAM MAXORDER = 2

// add on each pullback to the 20-bar average, 2 contracts at most per order
IF close crosses over Average[20](close) AND CountOfPosition < 6 THEN
  BUY 2 CONTRACTS AT MARKET
ENDIF

Chaque ordre de renforcement respecte individuellement le plafond de 2 contrats, tandis que la position accumulée peut atteindre 6 contrats sur trois ordres. Le plafond contraint les ordres, pas la position totale.

Erreurs et pièges courants

  • L'écrêtage est silencieux. Les ordres supérieurs au plafond sont réduits, pas rejetés, et aucun avertissement n'est émis. Un backtest peut discrètement trader des tailles plus petites que celles suggérées par la formule de dimensionnement, ce qui fausse les attentes de gain si l'écrêtage passe inaperçu.
  • Par ordre, pas par position. Avec CumulateOrders activé, plusieurs ordres plafonnés peuvent s'empiler en une position bien plus grande que MAXORDER. Limiter l'exposition totale exige une vérification explicite sur CountOfPosition ou équivalent.
  • DEFPARAM placement. Tout DEFPARAM doivent figurer avant la première ligne exécutable de la stratégie. Un DEFPARAM MAXORDER placé après d'autre code ne compile pas.
  • Ce n'est pas une limite du broker. Le réglage limite ce que la stratégie envoie, il ne modélise pas les maximums de la bourse ou du broker. Les ordres réels situés dans MAXORDER peut tout de même dépasser les limites de taille propres au broker.
  • MINORDER, taille minimale d'ordre exécutée pendant un backtest.
  • DEFPARAM, déclare les paramètres d'exécution au niveau de la stratégie.
  • CumulateOrders, permet à plusieurs ordres de s'accumuler en une seule position.
  • BUY, ouvre une position long ou la renforce.
  • SELLSHORT, ouvre une position short ou la renforce.
  • LOT, quantité de l'ordre exprimée en lots.
  • CONTRACT, quantité de l'ordre exprimée en contrats.
  • SHARES, quantité de l'ordre exprimée en actions.