MOD
MOD in ProBuilder gibt den Rest der Division einer Zahl durch eine andere zurück, die Modulo-Operation. Infix-Syntax, Verwendung für Zyklen und Teilbarkeit, Beispiele.
Syntax
result = a MOD bParameter
| Name | Typ | Beschreibung |
|---|---|---|
a | Zahl | Der Dividend, der zu teilende Wert. |
b | Zahl | Der Divisor. Darf nicht Null sein, da die Division durch Null undefiniert ist. |
Formel
MOD(a, b) = remainder of a / bZum Beispiel 10 MOD 3 ist 1, weil 10 geteilt durch 3 gleich 3 ist mit Rest 1. Wenn a ist ein exaktes Vielfaches von b, ist der Rest 0.
So funktioniert es
MOD wird zwischen seine beiden Operanden geschrieben, etwa a MOD b, anstatt als MOD(a, b). Sie gibt zurück, was nach der Ganzzahldivision übrig bleibt. Das macht sie zum Standardwerkzeug für zwei Aufgaben: Teilbarkeit prüfen, wobei a MOD b = 0 bedeutet a ist ohne Rest teilbar durch b, und das Durchlaufen eines sich wiederholenden Bereichs, wobei barCount MOD n zählt 0, 1, ... n-1 und springt zurück auf 0.
Der Divisor darf nicht null sein. Ein MOD 0 ist undefiniert und löst einen Fehler aus, also prüfen Sie b wann immer es null erreichen kann.
Beispiele
Beispiel 1, Rest einer Division (Indikator)
// Remainder when 10 is divided by 3
remainder = 10 MOD 3
RETURN remainder AS "10 MOD 3"Das Ergebnis ist 1, der Rest nach der Division von 10 durch 3. Das Ersetzen der Konstanten durch Variablen verallgemeinert die Berechnung.
Beispiel 2, Markierung jeder dritten Bar (ProScreener)
// Flag instruments on a repeating three-bar cycle
cyclePos = BarIndex MOD 3
SCREENER[cyclePos = 0](cyclePos AS "Cycle position")BarIndex MOD 3 zählt zyklisch 0, 1, 2 und zurück, daher löst die Bedingung einmal alle drei Bars aus.
Beispiel 3, Nur auf geraden Bars handeln (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
ENDIFDer MOD 2 Test teilt Bars in gerade und ungerade, sodass die Strategie nur auf einer der beiden handelt.
Häufige Fehler und Stolperfallen
- Der Divisor darf nicht Null sein.
a MOD 0ist undefiniert und löst einen Fehler aus. Sichern Sie den Divisor ab, wenn er null erreichen kann. - Infix-Operator, keine Funktion. Schreiben Sie
a MOD b, nichtMOD(a, b). Die Form als Funktionsaufruf ist ein Syntaxfehler. - Das Vorzeichen des Ergebnisses folgt dem Dividenden. Bei negativen Dividenden ist der Rest nicht immer der erwartete. Umschließen mit
ABSzuerst, wenn Sie eine nicht negative Zyklusposition benötigen.
Verwandte Befehle
FLOOR, rundet auf eine ganze Zahl ab, verwandt mit dem Quotienten hinterMOD.CEIL, rundet auf eine ganze Zahl auf.ROUND, rundet auf die nächste Ganzzahl oder Dezimalstelle.ABS, Absolutwert, nützlich zum Normalisieren einesMODErgebnis auf nicht negativ.SGN, Vorzeichen eines Werts.MAX, größerer von zwei Werten.MIN, kleinerer von zwei Werten.