ROUNDEDUP
ROUNDEDUP rundet in ProBacktest und ProOrder einen Wert auf die nächste ganze Zahl auf, verwendet, wenn Orderstückzahlen aufgerundet werden müssen. Syntax, Beispiele und Stolperfallen.
Syntax
ROUNDEDUP(value)Parameter
| Name | Typ | Standard | Beschreibung |
|---|---|---|---|
value | Zahl | keine | Zu rundender Wert. Jedes Literal, jede Variable oder jeder arithmetische Ausdruck, der zu einer Zahl ausgewertet wird. |
So funktioniert es
ROUNDEDUP nimmt einen numerischen Wert und gibt die nächsthöhere ganze Zahl zurück, wann immer der Wert einen Bruchteil hat. Ein Wert, der bereits ganz ist, wird unverändert zurückgegeben. Da Orderbefehle in ProBacktest und ProOrder mit ganzen Stückzahlen von Aktien, Kontrakten oder Lots arbeiten, benötigt jede Größenformel, die eine Division enthält, einen Rundungsschritt, bevor ihr Ergebnis als Order platziert werden kann.
Aufrunden ist die richtige Richtung, wenn der berechnete Wert ein Minimum darstellt, das erreicht werden muss, zum Beispiel die Anzahl der Aktien, die nötig ist, damit eine Position ein Ziel-Exposure erreicht, oder die Stückzahl, die erforderlich ist, um eine andere Position vollständig zu hedgen. In diesen Fällen wäre die Position beim Abrunden zu klein.
Der Kompromiss sind die Kosten: Aufrunden bedeutet, dass die Order etwas mehr Kapital erfordern kann, als die rohe Berechnung nahegelegt hat. Wenn die Berechnung ein Budget darstellt, das nicht überschritten werden darf, ist ROUNDEDDOWN das richtige Gegenstück.
Beispiele
Beispiel 1, Ganze Aktien aus einem Geldbetrag (ProBacktest)
// Convert a cash amount into a whole number of shares
myCash = 1000
stockPrice = 123.45
maxShares = ROUNDEDUP(myCash / stockPrice)Die Division ergibt rund 8.1 und ROUNDEDUP erhöht sie auf 9. Beachten Sie, dass der Kauf von 9 Aktien etwas mehr kostet als die 1000 an Kapital; siehe die Stolperfallen unten. Dies ist das Beispiel aus der offiziellen Referenz.
Beispiel 2, Ein Mindest-Exposure erreichen (ProOrder)
DEFPARAM CumulateOrders = false
// Size the position so exposure is at least 10000 in notional value
targetExposure = 10000
qty = ROUNDEDUP(targetExposure / close)
IF NOT onmarket AND close CROSSES OVER Average[100](close) THEN
BUY qty SHARES AT MARKET
ENDIFDa die Stückzahl aufgerundet wird, erreicht der Nominalwert der Position immer das Ziel von 10000, anstatt knapp darunter zu bleiben.
Beispiel 3, Einen Short-Hedge an eine Long-Position anpassen (ProOrder)
DEFPARAM CumulateOrders = false
// Hedge ratio derived from relative volatility
hedgeRatio = 1.6
IF NOT onmarket AND close CROSSES UNDER Average[50](close) THEN
// Round up so the hedge is never undersized
SELLSHORT ROUNDEDUP(hedgeRatio * 2) SHARES AT MARKET
ENDIFEin gebrochenes Hedge-Verhältnis wird auf die nächste ganze Stückzahl aufgerundet, sodass die Short-Seite das beabsichtigte Exposure vollständig abdeckt.
Häufige Fehler und Stolperfallen
- Aufrunden kann das Budget überschreiten. Angewendet auf eine Division von Kapital durch Preis erzeugt ROUNDEDUP eine Stückzahl, die mehr kostet als das verfügbare Kapital, 9 Aktien zu 123.45 sind 1111.05 gegenüber einem Budget von 1000. Für budgetbegrenzte Größenbestimmung verwenden Sie stattdessen ROUNDEDDOWN.
- In Indikatoren nicht verfügbar. ROUNDEDUP gehört zu den Strategiesprachen. In Indikator- oder Screener-Code ist das Äquivalent CEIL; ROUNDEDUP dort schlägt beim Kompilieren fehl.
- Ganze Werte bleiben unverändert. ROUNDEDUP(8) ergibt 8, nicht 9. Logik, die erwartet, dass die Funktion immer eins addiert, verhält sich bei exakten ganzen Zahlen falsch.
- Runden Sie einmal, am Ende. Das Runden von Zwischenwerten, etwa des Preises oder des Verhältnisses, vor der endgültigen Division verstärkt den Rundungsfehler. Wenden Sie ROUNDEDUP nur auf die endgültige Stückzahl an.
Verwandte Befehle
ROUNDEDDOWN, rundet einen Wert auf die nächste ganze Zahl ab.ROUND, rundet auf die nächste ganze Zahl.CEIL, rundet auf, in allen Untersprachen verfügbar.FLOOR, rundet ab, 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.SELLSHORT, eröffnet eine Short-Position mit der berechneten Stückzahl.