Bli medlem idag
Matematik/probuilder · probacktest · proorder · proscreener

MOD

MOD i ProBuilder returnerar resten vid division av ett tal med ett annat, modulooperationen. Infixsyntax, användning för cykler och delbarhet, exempel.

Syntax

probuilder
result = a MOD b

Parametrar

NamnTypBeskrivning
atalDividenden, det värde som divideras.
btalDivisorn. Får inte vara noll, eftersom division med noll är odefinierad.

Formel

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

Till exempel 10 MOD 3 är 1, eftersom 10 delat med 3 är 3 med resten 1. När a är en exakt multipel av b, är resten 0.

Så fungerar det

MOD skrivs mellan sina två operander, som a MOD b, snarare än som MOD(a, b). Den returnerar vad som återstår efter heltalsdivision. Det gör den till förstahandsvalet för två uppgifter: att testa delbarhet, där a MOD b = 0 betyder a är jämnt delbart med b, och cykling genom ett repeterande intervall, där barCount MOD n räknar 0, 1, ... n-1 och går tillbaka till 0.

Divisorn får inte vara noll. En MOD 0 är odefinierad och ger ett fel, så gardera b närhelst det kan bli noll.

Exempel

Exempel 1, Rest vid en division (Indikator)

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

Resultatet är 1, det som återstår efter division av 10 med 3. Att byta ut konstanterna mot variabler generaliserar beräkningen.

Exempel 2, Flagga var 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 växlar genom 0, 1, 2 och tillbaka, så villkoret utlöses en gång var tredje bar.

Exempel 3, Handla endast på jämna 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 testet delar barer i jämna och ojämna, så att strategin bara agerar på en av de två.

Vanliga fel och fallgropar

  • Divisorn kan inte vara noll. a MOD 0 är odefinierat och ger ett fel. Skydda nämnaren när den kan bli noll.
  • Infixoperator, inte en funktion. Skriv a MOD b, inte MOD(a, b). Formen med funktionsanrop är ett syntaxfel.
  • Resultatets tecken följer dividenden. För negativa täljare är resten inte alltid vad man förväntar sig. Omslut med ABS först om du behöver en icke-negativ cykelposition.
  • FLOOR, avrundar nedåt till ett heltal, relaterat till kvoten bakom MOD.
  • CEIL, avrundar uppåt till ett heltal.
  • ROUND, avrundar till närmaste heltal eller decimal.
  • ABS, absolutvärde, användbart för att normalisera en MOD resultatet till icke-negativt.
  • SGN, tecknet för ett värde.
  • MAX, det största av två värden.
  • MIN, det minsta av två värden.