Únete hoy
ProBacktest/probacktest · proorder

MAXORDER

MAXORDER es un ajuste de DEFPARAM en ProBacktest y ProOrder que limita el tamaño de cualquier orden individual. Las órdenes por encima del límite se recortan al tamaño máximo.

Sintaxis

probuilder
DEFPARAM MAXORDER = value

Parámetros

NombreTipoPor defectoDescripción
valuenumériconingunoNúmero máximo de unidades, contratos o lotes permitidos en una sola orden.

Cómo funciona

DEFPARAM configuran el entorno de ejecución de una estrategia y deben aparecer al principio del código, antes de cualquier instrucción ejecutable. MAXORDER es uno de estos ajustes: define un límite superior para la cantidad de una sola orden.

El límite se aplica a nivel de orden, no de posición. Cuando una instrucción de orden produce una cantidad superior al valor configurado, el motor ejecuta el tamaño máximo permitido en lugar de rechazar la orden. Una orden de tamaño dinámico de 25 contratos bajo DEFPARAM MAXORDER = 10 se ejecuta como 10 contratos.

El caso de uso principal es el realismo. El position size calculado por fórmula, por ejemplo dividiendo el capital disponible entre el precio, puede producir tamaños de orden que ningún bróker o mercado absorbería a un solo precio. Limitar el tamaño de una orden individual mantiene un backtest más cerca de condiciones ejecutables y protege un sistema en real frente a una fórmula de dimensionamiento descontrolada.

Como el límite es por orden, una estrategia que acumula posiciones con DEFPARAM CumulateOrders = true aún puede construir una posición total mayor que MAXORDER entre varias órdenes.

Ejemplos

Ejemplo 1, Limitar el tamaño de orden a diez unidades (ProBacktest)

probuilder
// no single order may exceed 10 units
DEFPARAM MAXORDER = 10

IF NOT OnMarket AND close crosses over Average[50](close) THEN
  BUY 20 CONTRACTS AT MARKET
ENDIF

La estrategia solicita 20 contratos, pero el MAXORDER ajuste recorta la orden a 10. Por tanto, el backtest simula el tamaño restringido, no el solicitado.

Ejemplo 2, Proteger una fórmula de dimensionamiento basada en el capital (ProOrder)

probuilder
DEFPARAM MAXORDER = 5

// size grows with capital but can never exceed 5 contracts per order
positionsize = MAX(1, ROUND(strategyprofit / 10000))

IF NOT OnMarket AND RSI[14](close) < 30 THEN
  BUY positionsize CONTRACTS AT MARKET
ENDIF

La fórmula de dimensionamiento escala con el beneficio acumulado. MAXORDER actúa como un techo rígido, de modo que un valor de equity elevado no puede llevar una sola orden más allá de 5 contratos.

Ejemplo 3, Límite de orden con acumulación de posición (ProBacktest)

probuilder
DEFPARAM CumulateOrders = true
DEFPARAM MAXORDER = 2

// add on each pullback to the 20-bar average, 2 contracts at most per order
IF close crosses over Average[20](close) AND CountOfPosition < 6 THEN
  BUY 2 CONTRACTS AT MARKET
ENDIF

Cada orden añadida individual respeta el límite de 2 contratos, mientras que la posición acumulada puede alcanzar 6 contratos a lo largo de tres órdenes. El límite restringe las órdenes, no la posición total.

Errores y trampas habituales

  • El recorte es silencioso. Las órdenes por encima del límite se reducen, no se rechazan, y no se genera ningún aviso. Un backtest puede operar en silencio tamaños menores de los que sugiere la fórmula de dimensionamiento, lo que distorsiona las expectativas de beneficio si el recorte pasa desapercibido.
  • Por orden, no por posición. Con CumulateOrders activado, varias órdenes limitadas pueden acumularse en una posición mucho mayor que MAXORDER. Limitar la exposición total requiere una comprobación explícita de CountOfPosition o equivalente.
  • DEFPARAM colocación. Todas DEFPARAM deben aparecer antes de la primera línea ejecutable de la estrategia. Un DEFPARAM MAXORDER colocado después de otro código no compila.
  • No es un límite del bróker. El ajuste limita lo que envía la estrategia, no modela los máximos del mercado ni del bróker. Las órdenes en real dentro de MAXORDER aún puede superar los límites de tamaño del propio bróker.
  • MINORDER, tamaño mínimo de orden ejecutado durante un backtest.
  • DEFPARAM, declara parámetros de ejecución a nivel de estrategia.
  • CumulateOrders, permite que varias órdenes se acumulen en una sola posición.
  • BUY, abre o amplía una posición long.
  • SELLSHORT, abre o amplía una posición short.
  • LOT, cantidad de la orden expresada en lotes.
  • CONTRACT, cantidad de la orden expresada en contratos.
  • SHARES, cantidad de la orden expresada en acciones.