Word nu lid
ProBacktest/probacktest · proorder

ROUNDEDDOWN

ROUNDEDDOWN rondt in ProBacktest en ProOrder een waarde naar beneden af op het naastgelegen gehele getal, gebruikt om aantallen aandelen te bepalen op basis van beschikbare cash. Syntaxis en voorbeelden.

Syntaxis

probuilder
ROUNDEDDOWN(expression)

Parameters

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

Hoe het werkt

ROUNDEDDOWN laat het fractionele deel van een waarde vallen en geeft het eerstvolgende lagere gehele getal terug. Beschikbare cash delen door een aandelenkoers levert meestal een fractie op, en omdat de meeste markten alleen hele aantallen aandelen accepteren, moet het resultaat worden afgerond voordat het aan een orderinstructie kan worden doorgegeven. Naar beneden afronden is de budgetveilige richting: de resulterende hoeveelheid kost nooit meer dan de cash die beschikbaar was.

Het typische patroon is een sizing-blok van drie regels, bereken de ruwe hoeveelheid als een deling, rond die naar beneden af, en geef het resultaat dan door als de hoeveelheid van een BUY- of SELLSHORT-order. Omdat de functie volledige expressies accepteert, kan de deling direct binnen de aanroep gebeuren.

Voor de tegenovergestelde richting, een fractie naar boven afronden op het volgende gehele getal, gebruik je ROUNDEDUP. Voor afronden op het naastgelegen gehele getal in beide richtingen geldt ROUND.

Voorbeelden

Voorbeeld 1, Hele aandelen uit een vast cashbudget (ProBacktest)

probuilder
// How many whole shares does 1000 in cash buy at 123.45 per share
cash = 1000
pricePerShare = 123.45
maxShares = ROUNDEDDOWN(cash / pricePerShare)

De ruwe deling geeft ongeveer 8.1, en ROUNDEDDOWN verlaagt dat naar 8, de grootste hele hoeveelheid die binnen het budget past. Dit is het voorbeeld uit de officiële referentie.

Voorbeeld 2, De omvang van een order bepalen op basis van een vaste allocatie (ProOrder)

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

Elke instap zet dezelfde cashallocatie om in een heel aantal aandelen tegen de huidige koers. De qty >= 1 guard voorkomt orders met hoeveelheid nul op dure instrumenten.

Voorbeeld 3, Contractomvang op basis van risico (ProOrder)

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

De position size wordt afgeleid van het risicobudget gedeeld door de geldwaarde van de stopafstand, naar beneden afgerond zodat het verlies in het slechtste geval op of onder het budget blijft.

Veelvoorkomende fouten en valkuilen

  • Een resultaat van nul annuleert de trade. Wanneer het budget kleiner is dan het risico van één aandeel of één contract, geeft ROUNDEDDOWN 0 en doet de orderinstructie niets. Bescherm instappen met een qty >= 1 voorwaarde om het gedrag expliciet te maken.
  • Niet beschikbaar in indicatoren. ROUNDEDDOWN hoort bij de strategietalen. Dezelfde afronding in indicator- of screenercode wordt geschreven met FLOOR; ROUNDEDDOWN daar gebruiken compileert niet.
  • Naar beneden afronden is voor negatieve waarden niet hetzelfde als afkappen. Rekenwerk voor de omvang mag alleen positieve hoeveelheden opleveren. Een negatieve tussenwaarde in een sizing-blok geeft een negatieve hoeveelheid of nul, waarmee nooit een order wordt geplaatst; valideer de invoer in plaats van op de afronding te vertrouwen.
  • Rond niet de prijs af, rond de hoeveelheid af. ROUNDEDDOWN toepassen op de aandelenkoers voordat je deelt, vertekent de berekening. Rond één keer af, aan het eind, op de hoeveelheid zelf.
  • ROUNDEDUP, rondt een waarde naar boven af op het volgende gehele getal.
  • ROUND, rondt af op het dichtstbijzijnde hele getal.
  • FLOOR, rondt naar beneden af, beschikbaar in alle subtalen.
  • CEIL, rondt naar boven 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.
  • POINTVALUE, geldwaarde van één punt, gebruikt bij het bepalen van de omvang op basis van risico.