COUNTOFPOSITION
COUNTOFPOSITION renvoie la taille signée de la position ouverte dans ProBacktest et ProOrder, positive en long et négative en short. Syntaxe et exemples.
Syntaxe
COUNTOFPOSITIONLe mot-clé ne prend aucun paramètre et s'utilise comme une variable en lecture seule à l'intérieur des expressions.
Comment ça marche
À chaque bar, COUNTOFPOSITION reflète la quantité actuellement détenue par la stratégie. Le signe encode la direction : une stratégie long de 3 contrats affiche 3, une stratégie short de 3 contrats affiche -3, et une stratégie à plat donne 0. La valeur se met à jour au fur et à mesure de l'exécution des ordres, donc après une sortie partielle elle affiche la quantité restante, et non la taille d'entrée initiale.
La convention signée rend le mot-clé utile dans deux situations. D'abord, les tests de direction : COUNTOFPOSITION > 0 est équivalent à LONGONMARKET, et COUNTOFPOSITION < 0 à SHORTONMARKET. Ensuite, les plafonds d'exposition : ABS(COUNTOFPOSITION) donne la taille totale indépendamment du sens, ce qui est la façon habituelle de limiter le pyramidage lorsque DEFPARAM CumulateOrders = true autorise des entrées répétées dans la même direction.
Seule la quantité exécutée est comptée. Les ordres limite ou stop en attente qui n'ont pas été exécutés ne changent pas la valeur. Pour des décomptes non signés par direction, COUNTOFLONGSHARES et COUNTOFSHORTSHARES indiquent séparément les quantités long et short.
Exemples
Exemple 1, Plafonner une position short pyramidée (ProBacktest)
myMACD = MACD[12,26,9](close)
short = myMACD crosses under 0
// First short entry when flat on the short side
IF NOT ShortOnMarket AND short THEN
SELLSHORT 1 CONTRACTS AT MARKET
ENDIF
// Allow re-entries only while total size stays at or below 10 contracts
MAXSHARES = abs(COUNTOFPOSITION) <= 10
IF TRADEINDEX(1) > 5 AND TRADEPRICE(1) - Close > 10 * pointsize AND ShortOnMarket AND MAXSHARES THEN
SELLSHORT 1 CONTRACTS AT MARKET
ENDIF
SET STOP TRAILING 50La stratégie renforce une position short à mesure que le prix baisse. Comme COUNTOFPOSITION est négatif en position short, ABS() le convertit en taille totale avant de le comparer au plafond de 10.
Exemple 2, Vérification de la direction sans les mots-clés ONMARKET (ProOrder)
DEFPARAM CumulateOrders = false
fastMA = Average[20](close)
slowMA = Average[50](close)
// Enter long on a bullish crossover when flat
IF COUNTOFPOSITION = 0 AND fastMA crosses over slowMA THEN
BUY 2 CONTRACTS AT MARKET
ENDIF
// Close the long on a bearish crossover
IF COUNTOFPOSITION > 0 AND fastMA crosses under slowMA THEN
SELL AT MARKET
ENDIFCOUNTOFPOSITION = 0 détecte une stratégie à plat et COUNTOFPOSITION > 0 détecte un long ouvert, en miroir de ONMARKET et LONGONMARKET avec un seul mot-clé.
Exemple 3, Dimensionner une sortie partielle à partir de la position en cours (ProOrder)
DEFPARAM CumulateOrders = true
// Scale into a long, then bank half once the trade is 20 points onside
IF LongOnMarket AND close - TRADEPRICE >= 20 * pointsize AND COUNTOFPOSITION >= 4 THEN
// Exit half of whatever is currently held
SELL COUNTOFPOSITION / 2 CONTRACTS AT MARKET
ENDIFLire la taille en cours permet à la sortie de s'adapter au nombre d'entrées réellement exécutées, au lieu de coder en dur une quantité.
Erreurs et pièges courants
- Oublier le signe sur les positions short. En position short,
COUNTOFPOSITIONest négatif, donc une protection commeCOUNTOFPOSITION <= 10est toujours vrai et ne limite jamais rien. ComparezABS(COUNTOFPOSITION)lorsque l'objectif est la taille totale. - S'attendre à ce que les ordres en attente soient comptés. La valeur ne reflète que la quantité exécutée. Un ordre limite en attente qui n'a pas été exécuté laisse
COUNTOFPOSITIONinchangé, donc les plafonds d'exposition fondés sur lui ne tiennent pas compte des ordres en attente chez le courtier. - Pas d'accumulation sans CumulateOrders. Avec la valeur par défaut
DEFPARAM CumulateOrders = false, les ordres supplémentaires dans le même sens ne se cumulent pas, doncCOUNTOFPOSITIONne dépasse jamais la première entrée et la logique de pyramidage ne fait rien, sans erreur. - L'utiliser en dehors des stratégies. Le mot-clé n'existe pas dans les indicateurs ProBuilder ni dans ProScreener. La logique tenant compte de la position doit se trouver dans le code ProBacktest ou ProOrder lui-même.
Instructions liées
COUNTOFLONGSHARES, nombre non signé d'actions détenues en long.COUNTOFSHORTSHARES, nombre non signé d'actions détenues en short.CumulateOrders, paramètre DEFPARAM qui permet d'empiler des entrées dans la même direction.ONMARKET, vrai tant qu'une position est ouverte.LONGONMARKET, vrai tant qu'une position long est ouverte.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.