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
result = a MOD bParámetros
| Nombre | Tipo | Descripción |
|---|---|---|
a | número | El dividendo, el valor que se divide. |
b | número | El divisor. No debe ser cero, ya que la división por cero no está definida. |
Fórmula
MOD(a, b) = remainder of a / bPor 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)
// 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)
// 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)
// 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
ENDIFEl 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 0no está definido y genera un error. Protege el divisor cuando pueda llegar a cero. - Operador infijo, no una función. Escribe
a MOD b, noMOD(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
ABSprimero si necesitas una posición de ciclo no negativa.
Instrucciones relacionadas
FLOOR, redondea hacia abajo a un entero, relacionado con el cociente detrás deMOD.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 unMODel resultado a no negativo.SGN, signo de un valor.MAX, el mayor de dos valores.MIN, el menor de dos valores.