Únete hoy
ProBacktest/probacktest · proorder

TRADEINDEX

TRADEINDEX(N) devuelve el índice de barra donde se ejecutó una operación pasada en ProBacktest y ProOrder, lo que permite a las estrategias contar barras desde la enésima entrada más reciente.

Sintaxis

probuilder
TRADEINDEX(N)

Parámetros

NombreTipoPor defectoDescripción
Nentero1Número de operación contado hacia atrás en el tiempo. 1 es la operación más reciente, 2 la anterior, y así sucesivamente.

Cómo funciona

Cada orden ejecutada se registra junto con el índice de la bar en la que se ejecutó. TRADEINDEX(N) busca ese índice para la N-ésima operación más reciente. El valor es un índice de bar absoluto, la misma numeración que BARINDEX usa para la bar actual, no un recuento de bars transcurridas.

La pregunta sobre el tiempo transcurrido se responde por tanto con una resta: BARINDEX - TRADEINDEX(1) es el número de bars desde la última ejecución. Esto permite una gestión de la operación basada en el tiempo, por ejemplo cerrar una posición estancada tras un número fijo de bars, imponer un tiempo de espera entre entradas, o permitir piramidar solo cuando la ejecución anterior ha envejecido.

Con DEFPARAM CumulateOrders = true, cada entrada parcial cuenta como su propia operación, por lo que TRADEINDEX(1) se refiere a la última incorporación, no a la entrada original de la posición acumulada. TRADEPRICE(N) sigue la misma numeración y devuelve el precio de ejecución en lugar del índice de bar; ambos se usan a menudo juntos.

Ejemplos

Ejemplo 1, Stop temporal después de cinco barras en la operación (ProOrder)

probuilder
// Close everything once 5 bars have passed since the last execution
IF onmarket AND BARINDEX - TRADEINDEX(1) >= 5 THEN
  SELL AT MARKET
  EXITSHORT AT MARKET
ENDIF

Cualquiera que sea la dirección de la posición, se cierra una vez transcurridas cinco barras desde la última ejecución. Este es el ejemplo de referencia para la instrucción.

Ejemplo 2, Pirámide condicionada por el número de barras y el avance del precio (ProBacktest)

probuilder
DEFPARAM CumulateOrders = true
myMACD = MACD[12,26,9](close)
long = myMACD crosses over 0
exit = myMACD crosses under 0

// Initial entry
IF NOT LongOnMarket AND long THEN
  BUY 1 CONTRACTS AT MARKET
ENDIF

IF LongOnMarket AND exit THEN
  SELL AT MARKET
ENDIF

// Add only if 5 bars have passed and price is 10 points beyond the last fill
IF BARINDEX - TRADEINDEX(1) > 5 AND Close - TRADEPRICE(1) > 10 AND LongOnMarket THEN
  BUY 1 CONTRACTS AT MARKET
ENDIF

// One trailing stop protects the whole accumulated position
SET STOP %TRAILING 1.5

Solo se compran contratos adicionales cuando la última ejecución tiene al menos cinco bars de antigüedad y el precio ha avanzado diez puntos más allá de ella, un filtro de piramidación estándar que combina TRADEINDEX con TRADEPRICE.

Ejemplo 3, Periodo de espera entre entradas consecutivas (ProOrder)

probuilder
// No new trade within 20 bars of the previous execution
signal = close crosses over average[20](close)
coolingDown = BARINDEX - TRADEINDEX(1) < 20

IF NOT onmarket AND signal AND NOT coolingDown THEN
  BUY 1 CONTRACT AT MARKET
  SET STOP LOSS 25
ENDIF

Después de cualquier ejecución, la estrategia rechaza nuevas entradas durante 20 barras, lo que evita el exceso de reentradas rápidas en condiciones erráticas.

Errores y trampas habituales

  • Índice, no antigüedad. TRADEINDEX(1) devuelve un índice de bar, no el número de bars desde la operación. Compararlo directamente con una constante pequeña no tiene sentido; réstalo siempre de BARINDEX.
  • Numeración inversa. N cuenta hacia atrás, 1 es la operación más reciente. Suponer que 1 significa la primera operación de la sesión invierte la lógica de forma silenciosa.
  • Todavía no hay operaciones. En los primeros bars de un backtest, antes de cualquier ejecución, el valor no es significativo. Protege las condiciones basadas en el tiempo con onmarket o una bandera que se invierte tras la primera entrada.
  • CumulateOrders cambia el significado. Con posiciones acumuladas cada ejecución parcial es una operación, así que TRADEINDEX(1) sigue la última incorporación en lugar de la entrada original de la posición. Usa una variable guardada en la primera entrada si importa la barra original.
  • BarIndex, índice de la barra actual, la referencia para el cálculo de barras transcurridas.
  • TRADEPRICE, precio de ejecución de la enésima operación más reciente.
  • POSITIONPRICE, precio medio de la posición abierta.
  • ONMARKET, verdadero mientras hay alguna posición abierta.
  • CumulateOrders, DEFPARAM que hace que cada entrada parcial cuente como una operación.
  • BarsSince, cuenta las barras desde que una condición fue cierta.
  • COUNTOFPOSITION, tamaño de la posición actualmente abierta.
  • LONGONMARKET, verdadero mientras hay una posición long abierta.