COUNTOFPOSITION
COUNTOFPOSITION devuelve el tamaño con signo de la posición abierta en ProBacktest y ProOrder, positivo para long y negativo para short. Sintaxis y ejemplos.
Sintaxis
COUNTOFPOSITIONLa palabra clave no acepta parámetros y se utiliza como una variable de solo lectura dentro de las expresiones.
Cómo funciona
En cada bar, COUNTOFPOSITION refleja la cantidad que mantiene actualmente la estrategia. El signo codifica la dirección: una estrategia long de 3 contratos da 3, una estrategia short de 3 contratos muestra -3, y una estrategia plana lee 0. El valor se actualiza a medida que se ejecutan las órdenes, por lo que tras una salida parcial muestra la cantidad restante, no el tamaño original de entrada.
El convenio con signo hace útil la palabra clave en dos situaciones. Primera, comprobar la dirección: COUNTOFPOSITION > 0 es equivalente a LONGONMARKET, y COUNTOFPOSITION < 0 a SHORTONMARKET. Segundo, límites de exposición: ABS(COUNTOFPOSITION) da el tamaño total con independencia de la dirección, que es la forma habitual de limitar la piramidación cuando DEFPARAM CumulateOrders = true permite entradas repetidas en la misma dirección.
Solo se cuenta la cantidad ejecutada. Las órdenes limitadas o stop pendientes que no se han ejecutado no modifican el valor. Para recuentos sin signo por dirección, COUNTOFLONGSHARES y COUNTOFSHORTSHARES informan por separado de las cantidades long y short.
Ejemplos
Ejemplo 1, Limitar una posición short piramidada (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 estrategia escala en un short a medida que el precio cae. Como COUNTOFPOSITION es negativo mientras está short, ABS() lo convierte en un tamaño total antes de compararlo con el límite de 10.
Ejemplo 2, Comprobación de dirección sin las palabras clave 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 detecta una estrategia plana y COUNTOFPOSITION > 0 detecta un long abierto, replicando ONMARKET y LONGONMARKET con una sola palabra clave.
Ejemplo 3, Dimensionar una salida parcial a partir de la posición en curso (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
ENDIFLeer el tamaño en curso permite que la salida se adapte a cuantas entradas se hayan ejecutado realmente, en lugar de fijar una cantidad en el código.
Errores y trampas habituales
- Olvidar el signo en los shorts. Mientras short,
COUNTOFPOSITIONes negativo, por lo que una protección comoCOUNTOFPOSITION <= 10siempre es verdadero y nunca limita nada. ComparaABS(COUNTOFPOSITION)cuando la intención es el tamaño total. - Esperar que las órdenes pendientes cuenten. El valor solo refleja la cantidad ejecutada. Una orden limitada en espera que no se ha ejecutado deja
COUNTOFPOSITIONsin cambios, por lo que los límites de exposición basados en él no tienen en cuenta las órdenes en espera en el bróker. - Sin acumulación sin CumulateOrders. Con el valor por defecto
DEFPARAM CumulateOrders = false, las órdenes adicionales en la misma dirección no se acumulan, así queCOUNTOFPOSITIONnunca crece más allá de la primera entrada y la lógica de piramidación no hace nada en silencio. - Utilizarlo fuera de las estrategias. La palabra clave no existe en los indicadores de ProBuilder ni en ProScreener. La lógica que depende de la posición tiene que estar en el propio código de ProBacktest o ProOrder.
Instrucciones relacionadas
COUNTOFLONGSHARES, número sin signo de acciones mantenidas en long.COUNTOFSHORTSHARES, número sin signo de acciones mantenidas en short.CumulateOrders, parámetro de DEFPARAM que permite acumular entradas en la misma dirección.ONMARKET, verdadero mientras hay alguna posición abierta.LONGONMARKET, verdadero mientras hay una posición long abierta.SHORTONMARKET, verdadero mientras hay una posición short abierta.TRADEINDEX, índice de bar de la ejecución de una operación anterior.TRADEPRICE, precio de entrada de la operación actual o de una anterior.