Word nu lid
ProBacktest/probacktest · proorder

ROUNDEDUP

ROUNDEDUP rondt in ProBacktest en ProOrder een waarde naar boven af op het volgende gehele getal, gebruikt wanneer orderhoeveelheden naar boven moeten worden afgerond. Syntaxis, voorbeelden en valkuilen.

Syntaxis

probuilder
ROUNDEDUP(value)

Parameters

NaamTypeStandaardBeschrijving
valuegetalgeenDe af te ronden waarde. Elke literal, variabele of rekenkundige expressie die een getal oplevert.

Hoe het werkt

ROUNDEDUP neemt een numerieke waarde en geeft het eerstvolgende hogere gehele getal terug zodra de waarde een fractioneel deel heeft. Een waarde die al geheel is, wordt onveranderd teruggegeven. Omdat orderinstructies in ProBacktest en ProOrder met hele aantallen aandelen, contracten of lots werken, heeft elke sizing-formule met een deling een afrondingsstap nodig voordat het resultaat als order kan worden geplaatst.

Naar boven afronden is de juiste richting wanneer de berekende waarde een minimum voorstelt dat gehaald moet worden, bijvoorbeeld het aantal aandelen dat nodig is om een positie een doelexposure te laten bereiken, of de hoeveelheid die nodig is om een andere positie volledig te hedgen. In die gevallen zou naar beneden afronden de positie te klein maken.

De afweging is de kosten: naar boven afronden betekent dat de order iets meer cash kan vereisen dan de ruwe berekening suggereerde. Wanneer de berekening een budget voorstelt dat niet overschreden mag worden, is ROUNDEDDOWN de juiste tegenhanger.

Voorbeelden

Voorbeeld 1, Hele aandelen uit een cashbedrag (ProBacktest)

probuilder
// Convert a cash amount into a whole number of shares
myCash = 1000
stockPrice = 123.45
maxShares = ROUNDEDUP(myCash / stockPrice)

De deling geeft ongeveer 8.1 en ROUNDEDUP verhoogt dat naar 9. Let op dat het kopen van 9 aandelen iets meer kost dan de 1000 aan cash; zie de valkuilen hieronder. Dit is het voorbeeld uit de officiële referentie.

Voorbeeld 2, Een minimale exposure bereiken (ProOrder)

probuilder
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
ENDIF

Omdat de hoeveelheid naar boven wordt afgerond, bereikt de notionele waarde van de positie altijd het doel van 10000 in plaats van er net onder te blijven.

Voorbeeld 3, Een short hedge afstemmen op een long positie (ProOrder)

probuilder
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
ENDIF

Een fractionele hedgeratio wordt naar boven afgerond op de volgende hele hoeveelheid, zodat de short leg de bedoelde exposure volledig dekt.

Veelvoorkomende fouten en valkuilen

  • Naar boven afronden kan het budget overschrijden. Toegepast op een deling van cash door prijs levert ROUNDEDUP een hoeveelheid op die meer kost dan de beschikbare cash, 9 aandelen tegen 123.45 is 1111.05 tegenover een budget van 1000. Gebruik voor sizing met een budgetplafond ROUNDEDDOWN.
  • Niet beschikbaar in indicatoren. ROUNDEDUP hoort bij de strategietalen. In indicator- of screenercode is het equivalent CEIL; ROUNDEDUP daar gebruiken compileert niet.
  • Hele waarden blijven onveranderd. ROUNDEDUP(8) is 8, niet 9. Logica die verwacht dat de functie altijd één optelt, gedraagt zich onjuist bij exacte gehele getallen.
  • Rond één keer af, aan het eind. Tussenwaarden afronden, zoals de prijs of de ratio, voor de laatste deling vergroot de afrondingsfout. Pas ROUNDEDUP alleen toe op de uiteindelijke hoeveelheid.
  • ROUNDEDDOWN, rondt een waarde naar beneden af op het naastgelegen gehele getal.
  • ROUND, rondt af op het dichtstbijzijnde hele getal.
  • CEIL, rondt naar boven af, beschikbaar in alle subtalen.
  • FLOOR, rondt naar beneden af, beschikbaar in alle subtalen.
  • SHARES, sleutelwoord voor de hoeveelheidseenheid bij aandelenorders.
  • CASH, sleutelwoord voor position sizing op basis van geld.
  • BUY, opent een long positie met de berekende hoeveelheid.
  • SELLSHORT, opent een short positie met de berekende hoeveelheid.