ROUNDEDDOWN
ROUNDEDDOWN rundet in ProBacktest und ProOrder einen Wert auf die nächste ganze Zahl ab, verwendet, um Aktienstückzahlen aus verfügbarem Kapital zu bestimmen. Syntax und Beispiele.
Syntax
ROUNDEDDOWN(expression)Parameter
| Name | Typ | Standard | Beschreibung |
|---|---|---|---|
expression | Zahl | keine | Zu rundender Wert. Jedes Literal, jede Variable oder jeder arithmetische Ausdruck, der zu einer Zahl ausgewertet wird. |
So funktioniert es
ROUNDEDDOWN verwirft den Bruchteil eines Wertes und gibt die nächstniedrigere ganze Zahl zurück. Das verfügbare Kapital durch einen Aktienkurs zu teilen, ergibt meist einen Bruchteil, und da die meisten Märkte nur ganze Aktienstückzahlen akzeptieren, muss das Ergebnis gerundet werden, bevor es in einen Orderbefehl einfließen kann. Abrunden ist die budgetsichere Richtung: die resultierende Stückzahl kostet nie mehr als das verfügbare Kapital.
Das typische Muster ist ein dreizeiliger Größenblock, die rohe Stückzahl als Division berechnen, sie abrunden, dann das Ergebnis als Stückzahl einer BUY- oder SELLSHORT-Order übergeben. Da die Funktion vollständige Ausdrücke akzeptiert, kann die Division direkt innerhalb des Aufrufs erfolgen.
Für die entgegengesetzte Richtung, das Aufrunden eines Bruchteils auf die nächste ganze Zahl, verwenden Sie ROUNDEDUP. Für das Runden auf die nächste ganze Zahl in beide Richtungen gilt ROUND.
Beispiele
Beispiel 1, Ganze Aktien aus einem festen Geldbudget (ProBacktest)
// How many whole shares does 1000 in cash buy at 123.45 per share
cash = 1000
pricePerShare = 123.45
maxShares = ROUNDEDDOWN(cash / pricePerShare)Die rohe Division ergibt rund 8.1, und ROUNDEDDOWN reduziert sie auf 8, die größte ganze Stückzahl, die in das Budget passt. Dies ist das Beispiel aus der offiziellen Referenz.
Beispiel 2, Eine Order aus einer festen Allokation dimensionieren (ProOrder)
DEFPARAM CumulateOrders = false
// Allocate 5000 in cash per trade, sized at the current close
allocation = 5000
qty = ROUNDEDDOWN(allocation / close)
IF NOT onmarket AND close CROSSES OVER Average[50](close) AND qty >= 1 THEN
BUY qty SHARES AT MARKET
ENDIFJeder Einstieg wandelt denselben Kapitalbetrag zum aktuellen Kurs in eine ganze Stückzahl um. Die qty >= 1 Prüfung verhindert Orders mit Nullmenge bei teuren Instrumenten.
Beispiel 3, Risikobasierte Kontraktgrößenbestimmung (ProOrder)
DEFPARAM CumulateOrders = false
// Risk at most 200 in account currency per trade
riskBudget = 200
stopPoints = 20
contracts = ROUNDEDDOWN(riskBudget / (stopPoints * PointValue))
IF NOT onmarket AND RSI[14](close) < 30 AND contracts >= 1 THEN
BUY contracts CONTRACT AT MARKET
SET STOP PLOSS stopPoints
ENDIFDie Position Size ergibt sich aus dem Risikobudget geteilt durch den Geldwert der Stop-Distanz, abgerundet, damit der Worst-Case-Verlust bei oder unter dem Budget bleibt.
Häufige Fehler und Stolperfallen
- Ein Ergebnis von Null bricht den Trade ab. Wenn das Budget kleiner ist als das Risiko einer Aktie oder eines Kontrakts, gibt ROUNDEDDOWN 0 zurück und der Order-Befehl tut nichts. Sichern Sie Einstiege mit einer
qty >= 1Bedingung, um das Verhalten explizit zu machen. - In Indikatoren nicht verfügbar. ROUNDEDDOWN gehört zu den Strategiesprachen. Dieselbe Rundung in Indikator- oder Screener-Code wird mit FLOOR geschrieben; ROUNDEDDOWN dort zu verwenden, schlägt beim Kompilieren fehl.
- Abrunden ist bei negativen Zahlen nicht dasselbe wie Abschneiden. Die Berechnung der Größe sollte immer nur positive Stückzahlen ergeben. Einen negativen Zwischenwert in einen Größenblock einzuspeisen, ergibt eine negative oder null Stückzahl, die niemals eine Order platziert; validieren Sie die Eingaben, anstatt sich auf die Rundung zu verlassen.
- Runden Sie nicht den Preis, runden Sie die Stückzahl. ROUNDEDDOWN auf den Aktienkurs anzuwenden, bevor dividiert wird, verzerrt die Berechnung. Runden Sie einmal, am Ende, auf die Stückzahl selbst.
Verwandte Befehle
ROUNDEDUP, rundet einen Wert auf die nächste ganze Zahl auf.ROUND, rundet auf die nächste ganze Zahl.FLOOR, rundet ab, in allen Untersprachen verfügbar.CEIL, rundet auf, in allen Untersprachen verfügbar.SHARES, Mengeneinheit-Schlüsselwort für Aktienorders.CASH, Schlüsselwort für die Positionsgröße auf Geldbasis.BUY, eröffnet eine Long-Position mit der berechneten Menge.POINTVALUE, Geldwert eines Punktes, verwendet bei der risikobasierten Größenbestimmung.