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
DEFPARAM MAXORDER = valueParamètres
| Nom | Type | Par défaut | Description |
|---|---|---|---|
value | numérique | aucun | Nombre 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)
// 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
ENDIFLa 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)
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
ENDIFLa 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)
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
ENDIFChaque 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
CumulateOrdersactivé, plusieurs ordres plafonnés peuvent s'empiler en une position bien plus grande queMAXORDER. Limiter l'exposition totale exige une vérification explicite surCountOfPositionou équivalent. DEFPARAMplacement. ToutDEFPARAMdoivent figurer avant la première ligne exécutable de la stratégie. UnDEFPARAM MAXORDERplacé 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
MAXORDERpeut tout de même dépasser les limites de taille propres au broker.
Instructions liées
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.