Rejoignez-nous
ProBacktest/probacktest · proorder

COUNTOFSHORTSHARES

COUNTOFSHORTSHARES renvoie le nombre d'actions ou de lots détenus en short par la stratégie ProBacktest ou ProOrder en cours. Syntaxe, exemples détaillés et pièges courants.

Syntaxe

probuilder
COUNTOFSHORTSHARES

Le mot-clé ne prend aucun paramètre et se lit comme une variable à l'intérieur des conditions et des expressions.

Comment ça marche

Chaque fois que le code de la stratégie s'exécute, COUNTOFSHORTSHARES indique la quantité short exécutée à cet instant. Contrairement à COUNTOFPOSITION, qui est signé, ce mot-clé est toujours nul ou positif, il peut donc être comparé directement à un plafond sans ABS() wrapper. Lorsque la stratégie est hors marché ou long, elle renvoie 0.

Le schéma typique combine trois éléments : DEFPARAM CumulateOrders = true pour que les appels répétés à SELLSHORT les ordres s'empilent au lieu d'être ignorés, une condition d'entrée qui peut se déclencher plus d'une fois, et une protection comme COUNTOFSHORTSHARES < 5 qui empêche la position de croître sans limite. La valeur se met à jour au fur et à mesure des exécutions, de sorte que les sorties partielles via EXITSHORT x SHARES réduire le compte en conséquence.

Les ordres en attente ne sont pas inclus. Un ordre en attente SELLSHORT ... LIMIT un ordre qui n'a pas été exécuté laisse le compte inchangé jusqu'à son exécution. L'équivalent côté long de ce mot-clé est COUNTOFLONGSHARES.

Exemples

Exemple 1, Limiter les entrées short empilées à cinq lots (ProBacktest)

probuilder
// MACD used as the short trigger
myMACD = MACD[12,26,9](close)

// Short signal, MACD line falls through zero
short = myMACD crosses under 0

// First short entry only when no short is open
IF NOT ShortOnMarket AND short THEN
  SELLSHORT 1 CONTRACTS AT MARKET
ENDIF

// Guard, allow re-entry only below five short contracts
MAXSHARES = COUNTOFSHORTSHARES < 5

// Add to the short after a pullback in the strategy's favor
IF TRADEINDEX(1) > 5 AND TRADEPRICE(1) - Close > 10 AND ShortOnMarket AND MAXSHARES THEN
  SELLSHORT 1 CONTRACTS AT MARKET
ENDIF

// Trail the whole position
SET STOP TRAILING 50

La variable de garde MAXSHARES bloque les nouvelles entrées dès que cinq contrats sont short, ce qui borne l'exposition tout en laissant active la logique de renforcement suiveuse de tendance.

Exemple 2, Sortir d'un short par moitiés (ProOrder)

probuilder
DEFPARAM CumulateOrders = true

// Take half the short off after 30 points of profit
IF ShortOnMarket AND TRADEPRICE - close >= 30 * pointsize AND COUNTOFSHORTSHARES >= 2 THEN
  EXITSHORT COUNTOFSHORTSHARES / 2 SHARES AT MARKET
ENDIF

Lire la taille short en cours signifie que la sortie partielle retire toujours la moitié de ce qui est réellement détenu, quel que soit le nombre d'entrées exécutées.

Exemple 3, Bloquer les ré-entrées couvertes (ProOrder)

probuilder
DEFPARAM CumulateOrders = true

rsiVal = RSI[14](close)

// Only open or add to a short when RSI is overbought
// and the short book holds fewer than 3 lots
IF rsiVal > 70 AND COUNTOFSHORTSHARES < 3 THEN
  SELLSHORT 1 LOT AT MARKET
ENDIF

// Flatten the short when RSI normalises
IF ShortOnMarket AND rsiVal < 50 THEN
  EXITSHORT AT MARKET
ENDIF

Le compte sert à la fois de contrôle d'entrée initiale et de plafond de pyramidage, puisque 0 est inférieur à 3 lorsque la stratégie est hors marché.

Erreurs et pièges courants

  • Pas d'empilement sans CumulateOrders. Avec la valeur par défaut DEFPARAM CumulateOrders = false, un second SELLSHORT alors qu'on est déjà short est ignoré, donc COUNTOFSHORTSHARES reste à la taille de la première entrée et la logique d'ajout ne se déclenche jamais.
  • Confondre les actions avec les entrées. Le mot-clé compte les actions ou les lots, non le nombre de trades. Un SELLSHORT 5 CONTRACTS porte le compte à 5, comme cinq entrées distinctes d'un contrat.
  • Les ordres en attente sont invisibles. Les ordres d'entrée limite ou stop non exécutés n'augmentent pas le compteur, donc un plafond écrit uniquement sur COUNTOFSHORTSHARES peut tout de même mettre en attente plus de taille que prévu au sein d'une même bar.
  • Confusions entre valeurs signées et non signées. COUNTOFSHORTSHARES est positif tandis que COUNTOFPOSITION est négatif pour la même position short. Mélanger les deux conventions dans une même condition est une cause fréquente de garde-fous qui ne se déclenchent jamais.
  • COUNTOFLONGSHARES, nombre non signé d'actions détenues en long.
  • COUNTOFPOSITION, taille signée de la position ouverte.
  • CumulateOrders, paramètre DEFPARAM qui permet d'empiler des entrées dans la même direction.
  • SELLSHORT, ouvre une position short ou la renforce.
  • EXITSHORT, ferme tout ou partie d'une position short.
  • SHORTONMARKET, vrai tant qu'une position short est ouverte.
  • TRADEINDEX, indice de bar de l'exécution d'un trade précédent.
  • TRADEPRICE, prix d'entrée du trade courant ou d'un trade précédent.