ROUNDEDDOWN
ROUNDEDDOWN dans ProBacktest et ProOrder arrondit une valeur au nombre entier inférieur, utilisé pour dimensionner les quantités d'actions à partir des liquidités disponibles. Syntaxe et exemples.
Syntaxe
ROUNDEDDOWN(expression)Paramètres
| Nom | Type | Par défaut | Description |
|---|---|---|---|
expression | nombre | aucun | Valeur à arrondir. Tout littéral, variable ou expression arithmétique qui s'évalue en un nombre. |
Comment ça marche
ROUNDEDDOWN supprime la partie fractionnaire d'une valeur et renvoie le nombre entier inférieur. Diviser les liquidités disponibles par un prix d'action produit généralement une fraction, et comme la plupart des marchés n'acceptent que des quantités entières d'actions, le résultat doit être arrondi avant de pouvoir alimenter une instruction d'ordre. Arrondir à l'inférieur est le sens sûr pour le budget : la quantité obtenue ne coûte jamais plus que les liquidités qui étaient disponibles.
Le schéma typique est un bloc de dimensionnement en trois lignes, calculer la quantité brute par une division, l'arrondir à l'inférieur, puis passer le résultat comme quantité d'un ordre BUY ou SELLSHORT. Comme la fonction accepte des expressions complètes, la division peut se faire directement à l'intérieur de l'appel.
Pour le sens inverse, arrondir une fraction au nombre entier supérieur, utilisez ROUNDEDUP. Pour arrondir au nombre entier le plus proche dans un sens ou dans l'autre, ROUND s'applique.
Exemples
Exemple 1, Actions entières à partir d'un budget en liquidités fixe (ProBacktest)
// How many whole shares does 1000 in cash buy at 123.45 per share
cash = 1000
pricePerShare = 123.45
maxShares = ROUNDEDDOWN(cash / pricePerShare)La division brute donne environ 8.1, et ROUNDEDDOWN la réduit à 8, la plus grande quantité entière qui tient dans le budget. C'est l'exemple tiré de la référence officielle.
Exemple 2, Dimensionner un ordre à partir d'une allocation fixe (ProOrder)
DEFPARAM CumulateOrders = false
// Allocate 5000 in cash per trade, sized at the current close
allocation = 5000
qty = ROUNDEDDOWN(allocation / close)
IF NOT onmarket AND close CROSSES OVER Average[50](close) AND qty >= 1 THEN
BUY qty SHARES AT MARKET
ENDIFChaque entrée convertit la même allocation en liquidités en un nombre entier d'actions au prix courant. Le qty >= 1 garde empêche les ordres de quantité nulle sur les instruments coûteux.
Exemple 3, Dimensionnement des contrats basé sur le risque (ProOrder)
DEFPARAM CumulateOrders = false
// Risk at most 200 in account currency per trade
riskBudget = 200
stopPoints = 20
contracts = ROUNDEDDOWN(riskBudget / (stopPoints * PointValue))
IF NOT onmarket AND RSI[14](close) < 30 AND contracts >= 1 THEN
BUY contracts CONTRACT AT MARKET
SET STOP PLOSS stopPoints
ENDIFLa position size est dérivée du budget de risque divisé par la valeur monétaire de la distance du stop, arrondie à l'inférieur pour que la perte dans le pire des cas reste égale ou inférieure au budget.
Erreurs et pièges courants
- Un résultat de zéro annule le trade. Lorsque le budget est inférieur au risque d'une action ou d'un contrat, ROUNDEDDOWN renvoie 0 et l'instruction d'ordre ne fait rien. Protégez les entrées avec un
qty >= 1condition pour rendre le comportement explicite. - Non disponible dans les indicateurs. ROUNDEDDOWN appartient aux langages de stratégie. Le même arrondi dans le code d'indicateur ou de screener s'écrit avec FLOOR ; y utiliser ROUNDEDDOWN ne compile pas.
- Arrondir à l'inférieur n'est pas une troncature pour les nombres négatifs. Les calculs de dimensionnement ne doivent produire que des quantités positives. Injecter une valeur intermédiaire négative dans un bloc de dimensionnement donne une quantité négative ou nulle, qui ne place jamais d'ordre ; validez les entrées plutôt que de compter sur l'arrondi.
- N'arrondissez pas le prix, arrondissez la quantité. Appliquer ROUNDEDDOWN au prix de l'action avant de diviser fausse le calcul. Arrondissez une seule fois, à la fin, sur la quantité elle-même.
Instructions liées
ROUNDEDUP, arrondit une valeur au nombre entier supérieur.ROUND, arrondit au nombre entier le plus proche.FLOOR, arrondit vers le bas, disponible dans tous les sous-langages.CEIL, arrondit vers le haut, disponible dans tous les sous-langages.SHARES, mot-clé d'unité de quantité pour les ordres sur actions.CASH, mot-clé de dimensionnement de position basé sur les espèces.BUY, ouvre une position long avec la quantité calculée.POINTVALUE, valeur monétaire d'un point, utilisée dans le dimensionnement du risque.