Únete hoy
ProBacktest/probacktest · proorder

MINORDER

MINORDER es un ajuste de DEFPARAM en ProBacktest y ProOrder que establece el tamaño de orden más pequeño que se ejecuta. Las órdenes por debajo del umbral se ignoran por completo.

Sintaxis

probuilder
DEFPARAM MINORDER = value

Parámetros

NombreTipoPor defectoDescripción
valuenumériconingunoNúmero más pequeño de unidades, contratos o lotes que se puede ejecutar en una sola orden.

Cómo funciona

DEFPARAM instrucciones configuran el entorno de ejecución y deben aparecer al principio de la estrategia, antes de cualquier instrucción ejecutable. MINORDER fija un mínimo en el tamaño de orden: cualquier orden cuya cantidad quede por debajo del valor configurado se descarta en lugar de ejecutarse.

El ajuste existe por realismo. Muchos instrumentos imponen un tamaño mínimo negociable, un lote en una cuenta de Forex, un contrato en un futuro, una apuesta mínima en un CFD. Una fórmula de dimensionamiento que divide el capital por el precio puede producir cantidades fraccionarias o muy pequeñas que ningún bróker aceptaría. MINORDER filtra esas órdenes para que la simulación solo contenga operaciones que podrían existir en la práctica.

A diferencia de MAXORDER, que recorta las órdenes excesivas hasta el límite, MINORDER no redondea al alza una orden de tamaño insuficiente. La orden simplemente no se envía. Por tanto, una estrategia cuyo tamaño calculado se mantiene por debajo del umbral nunca entra en el mercado, lo que en sí mismo es un diagnóstico útil: revela que el capital o la fórmula de dimensionamiento son insuficientes para el instrumento.

Ejemplos

Ejemplo 1, Imponer un mínimo de una unidad (ProBacktest)

probuilder
// orders below 1 unit are not executed
DEFPARAM MINORDER = 1

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

La configuración básica de la referencia. Toda orden de al menos un contrato pasa, cualquier cosa menor se descartaría.

Ejemplo 2, Dimensionamiento basado en efectivo que puede caer por debajo del mínimo (ProBacktest)

probuilder
DEFPARAM MINORDER = 1

// invest a fixed cash slice per trade
capitalPerTrade = 5000
positionsize = FLOOR(capitalPerTrade / close)

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

Cuando el precio de la acción supera 5000, positionsize se calcula como 0 y la orden queda por debajo del MINORDER umbral, por lo que no se produce ninguna operación. El filtro evita que las órdenes de cantidad cero lleguen al motor.

Ejemplo 3, Tamaño mínimo de lote en una estrategia de Forex (ProOrder)

probuilder
DEFPARAM MINORDER = 1

long = ExponentialAverage[20](close) crosses over ExponentialAverage[50](close)

IF NOT OnMarket AND long THEN
  BUY 1 LOT AT MARKET
  SET STOP PLOSS 40
ENDIF

IF LongOnMarket AND close < ExponentialAverage[50](close) THEN
  SELL AT MARKET
ENDIF

El mínimo de orden refleja el lote más pequeño negociable de la cuenta, de modo que el backtest no puede simular posiciones que el bróker rechazaría.

Errores y trampas habituales

  • Las órdenes demasiado pequeñas desaparecen en silencio. Las órdenes por debajo del umbral se omiten sin error ni entrada en el registro. Una estrategia que nunca opera en un backtest puede estar simplemente generando cantidades por debajo de MINORDER, no que no cumpla sus condiciones de entrada.
  • No hay redondeo al alza. MINORDER filtra, no eleva las órdenes pequeñas al mínimo. El código que confía en que el motor suba una orden de 0.4 lotes a 1 lote se comporta de forma distinta a la esperada: la orden se descarta.
  • DEFPARAM colocación. Todas DEFPARAM instrucciones deben preceder a la primera línea ejecutable. Una DEFPARAM MINORDER más abajo el código no compila.
  • Las salidas también son órdenes. Una salida parcial cuya cantidad queda por debajo del umbral también se omite, lo que puede dejar una posición abierta más tiempo de lo previsto al reducir posición con cantidades calculadas.
  • MAXORDER, tamaño máximo permitido para una sola orden.
  • DEFPARAM, declara parámetros de ejecución a nivel de estrategia.
  • CASH, dimensionamiento de posición basado en un importe en efectivo.
  • BUY, abre o amplía una posición long.
  • SELL, cierra parte o toda una posición long.
  • LOT, cantidad de la orden expresada en lotes.
  • CONTRACT, cantidad de la orden expresada en contratos.
  • SHARES, cantidad de la orden expresada en acciones.