Bli medlem i dag
Matematisk/probuilder · probacktest · proorder · proscreener

MOD

MOD i ProBuilder returnerer resten av å dele ett tall på et annet, modulo-operasjonen. Infikssyntaks, bruk for sykluser og delelighet, eksempler.

Syntaks

probuilder
result = a MOD b

Parametere

NavnTypeBeskrivelse
atallDividenden, verdien som blir delt.
btallDivisoren. Må ikke være null, siden divisjon med null er udefinert.

Formel

kode
MOD(a, b) = remainder of a / b

For eksempel 10 MOD 3 er 1, fordi 10 delt på 3 er 3 med 1 i rest. Når a er et eksakt multiplum av b, er resten 0.

Slik fungerer det

MOD skrives mellom sine to operander, som a MOD b, heller enn som MOD(a, b). Den returnerer det som er til overs etter heltallsdivisjon. Det gjør den til førstevalget for to oppgaver: å teste delelighet, der a MOD b = 0 betyr a deler jevnt på b, og sykling gjennom et repeterende område, der barCount MOD n teller 0, 1, ... n-1 og går tilbake til 0.

Divisoren må ikke være null. En MOD 0 er udefinert og gir en feil, så sikre b når den kan nå null.

Eksempler

Eksempel 1, Rest av en divisjon (Indikator)

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

Resultatet er 1, resten etter å ha delt 10 på 3. Å erstatte konstantene med variabler generaliserer beregningen.

Eksempel 2, Flagg for hver tredje 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 går gjennom 0, 1, 2 og tilbake, så betingelsen utløses én gang hver tredje bar.

Eksempel 3, Trade bare på like barer (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

Den MOD 2 testen deler barene i like og odde, slik at strategien bare handler på én av de to.

Vanlige feil og fallgruver

  • Divisoren kan ikke være null. a MOD 0 er udefinert og gir en feil. Sikre divisoren når den kan bli null.
  • Infiksoperator, ikke en funksjon. Skriv a MOD b, ikke MOD(a, b). Formen med funksjonskall er en syntaksfeil.
  • Resultatets fortegn følger dividenden. For negative dividender er resten ikke alltid den du forventer. Pakk inn med ABS først hvis du trenger en ikke-negativ syklusposisjon.
  • FLOOR, runder ned til et heltall, beslektet med kvotienten bak MOD.
  • CEIL, runder opp til et heltall.
  • ROUND, runder av til nærmeste heltall eller desimal.
  • ABS, absoluttverdi, nyttig for å normalisere en MOD resultatet til ikke-negativt.
  • SGN, fortegnet til en verdi.
  • MAX, den største av to verdier.
  • MIN, den minste av to verdier.