Únete hoy
Matemáticas/probuilder · probacktest · proorder · proscreener

MOD

MOD en ProBuilder devuelve el resto de dividir un número por otro, la operación módulo. Sintaxis infija, uso para ciclos y divisibilidad, ejemplos.

Sintaxis

probuilder
result = a MOD b

Parámetros

NombreTipoDescripción
anúmeroEl dividendo, el valor que se divide.
bnúmeroEl divisor. No debe ser cero, ya que la división por cero no está definida.

Fórmula

código
MOD(a, b) = remainder of a / b

Por ejemplo 10 MOD 3 es 1, porque 10 dividido entre 3 es 3 con un resto de 1. Cuando a es un múltiplo exacto de b, el resto es 0.

Cómo funciona

MOD se escribe entre sus dos operandos, como a MOD b, en lugar de como MOD(a, b). Devuelve lo que queda tras la división entera. Esto lo convierte en la herramienta de referencia para dos tareas: comprobar la divisibilidad, donde a MOD b = 0 significa a se divide exactamente entre b, y recorrer cíclicamente un rango repetido, donde barCount MOD n cuenta 0, 1, ... n-1 y vuelve a 0.

El divisor no debe ser cero. Un MOD 0 no está definido y genera un error, así que protege b siempre que pueda llegar a cero.

Ejemplos

Ejemplo 1, Resto de una división (Indicador)

probuilder
// Remainder when 10 is divided by 3
remainder = 10 MOD 3
RETURN remainder AS "10 MOD 3"

El resultado es 1, lo que queda tras dividir 10 entre 3. Sustituir las constantes por variables generaliza el cálculo.

Ejemplo 2, Marca de cada tercer bar (ProScreener)

probuilder
// Flag instruments on a repeating three-bar cycle
cyclePos = BarIndex MOD 3
SCREENER[cyclePos = 0](cyclePos AS "Cycle position")

BarIndex MOD 3 recorre 0, 1, 2 y vuelve a empezar, por lo que la condición se dispara una vez cada tres bars.

Ejemplo 3, Operar solo en bars pares (ProOrder)

probuilder
// Restrict entries to every second bar using MOD
phase = BarIndex MOD 2
IF phase = 0 AND NOT LongOnMarket AND close CROSSES OVER Average[20](close) THEN
  BUY 1 CONTRACT AT MARKET
ENDIF

El MOD 2 la prueba divide los bars en pares e impares, lo que permite a la estrategia actuar solo en uno de los dos.

Errores y trampas habituales

  • El divisor no puede ser cero. a MOD 0 no está definido y genera un error. Protege el divisor cuando pueda llegar a cero.
  • Operador infijo, no una función. Escribe a MOD b, no MOD(a, b). La forma de llamada a función es un error de sintaxis.
  • El signo del resultado sigue al dividendo. Con dividendos negativos, el resto no siempre es el que esperas. Envuélvelo con ABS primero si necesitas una posición de ciclo no negativa.
  • FLOOR, redondea hacia abajo a un entero, relacionado con el cociente detrás de MOD.
  • CEIL, redondea al alza hasta un número entero.
  • ROUND, redondea al entero o decimal más próximo.
  • ABS, valor absoluto, útil para normalizar un MOD el resultado a no negativo.
  • SGN, signo de un valor.
  • MAX, el mayor de dos valores.
  • MIN, el menor de dos valores.