Únete hoy
ProBacktest/probacktest · proorder

CumulateOrders

CumulateOrders es un parámetro de DEFPARAM que controla si una estrategia de ProOrder puede acumular varias entradas en la misma dirección. Sintaxis y ejemplos.

Sintaxis

probuilder
DEFPARAM CumulateOrders = true
probuilder
DEFPARAM CumulateOrders = false

Parámetros

NombreTipoPor defectoDescripción
CumulateOrdersbooleanotrueCuando true, las órdenes de entrada en la dirección de una posición abierta se suman a ella. Cuando false, esas órdenes se ignoran hasta que se cierra la posición.

Cómo funciona

CumulateOrders no es una instrucción ejecutable, sino un parámetro de nivel de estrategia declarado con DEFPARAM. Como todos DEFPARAM líneas, debe aparecer al principio del código, antes de cualquier lógica de trading, y se evalúa una sola vez al arrancar la estrategia.

Con CumulateOrders = false, la estrategia mantiene como máximo una porción de posición por dirección. Si un BUY se activa mientras ya hay un long abierto, la orden adicional se descarta. Esto mantiene fijo el position size y es la opción habitual en estrategias donde cada señal representa una operación completa.

Con CumulateOrders = true, cada vez que se cumple una condición de entrada se envía otra orden en la misma dirección, por lo que la posición crece. Esto permite piramidar y promediar la entrada, pero también significa que una condición que se mantiene cierta bar tras bar seguirá comprando hasta que intervengan los límites de margen o de la plataforma. Por eso las estrategias acumulativas casi siempre combinan el parámetro con un control de tamaño construido sobre COUNTOFPOSITION, COUNTOFLONGSHARES o COUNTOFSHORTSHARES.

El parámetro no afecta a las salidas. SELL, EXITSHORT y las instrucciones de stop u objetivo se comportan igual en ambos modos.

Ejemplos

Ejemplo 1, Restringir la estrategia a una entrada por dirección (ProOrder)

probuilder
DEFPARAM CumulateOrders = false
// One position slice at a time. While a long is open,
// further BUY orders in the same direction are ignored.

La declaración conservada de la referencia oficial. Colocada al principio del programa, impide que la estrategia añada a una posición existente.

Ejemplo 2, Piramidación con un límite de tamaño explícito (ProBacktest)

probuilder
DEFPARAM CumulateOrders = true

fastMA = Average[20](close)
slowMA = Average[50](close)

// Add one contract on each new bullish crossover,
// but never hold more than 4 contracts in total
IF fastMA crosses over slowMA AND abs(COUNTOFPOSITION) < 4 THEN
  BUY 1 CONTRACT AT MARKET
ENDIF

// Flatten everything on a bearish crossover
IF LongOnMarket AND fastMA crosses under slowMA THEN
  SELL AT MARKET
ENDIF

Activar CumulateOrders permite que cada cruce añada un contrato, mientras que el COUNTOFPOSITION de protección limita la exposición total a cuatro contratos.

Ejemplo 3, Promediar en un short en las subidas (ProOrder)

probuilder
DEFPARAM CumulateOrders = true

rsiVal = RSI[14](close)

// Open or add to the short each time RSI pushes above 70,
// capped at three lots
IF rsiVal crosses over 70 AND COUNTOFSHORTSHARES < 3 THEN
  SELLSHORT 1 LOT AT MARKET
ENDIF

SET STOP %TRAILING 1

Cada impulso de sobrecompra añade un lote al short. Como la entrada usa crosses over, la orden se dispara una vez por excursión del RSI en lugar de en cada bar en que se mantiene el nivel.

Errores y trampas habituales

  • DEFPARAM placed too late. Todas DEFPARAM declaraciones, incluyendo CumulateOrders, debe ir antes de cualquier otra instrucción. Una declaración después de la lógica de trading provoca un error de compilación.
  • Fallo silencioso de la piramidación. Cuando las entradas adicionales nunca se ejecutan aunque se cumplan las condiciones, la causa habitual es el parámetro dejado en false u omitido en código copiado de una estrategia de entrada única. Las órdenes se descartan sin ningún aviso.
  • Acumulación descontrolada. Con CumulateOrders = true, una condición escrita como estado (rsiVal > 70) en lugar de un evento (rsiVal crosses over 70) envía una orden en cada bar en que sigue siendo verdadera. Combina condiciones de tipo evento con un COUNTOFPOSITION límite.
  • Esperar que fusione órdenes opuestas. El parámetro solo rige la acumulación en la misma dirección. Una orden contraria a una posición abierta sigue reduciéndola o invirtiéndola según la gestión normal de órdenes, independientemente de este ajuste.
  • DEFPARAM, declara los parámetros de la estrategia al principio del código.
  • COUNTOFPOSITION, tamaño con signo de la posición abierta, utilizado para limitar la piramidación.
  • COUNTOFLONGSHARES, número sin signo de acciones mantenidas en long.
  • COUNTOFSHORTSHARES, número sin signo de acciones mantenidas en short.
  • BUY, abre o amplía una posición long.
  • SELLSHORT, abre o amplía una posición short.
  • ONMARKET, verdadero mientras hay alguna posición abierta.
  • FLATAFTER, parámetro de DEFPARAM que fuerza a la estrategia a estar plana después de una hora determinada.
  • FLATBEFORE, parámetro de DEFPARAM que mantiene la estrategia plana antes de una hora determinada.