Word nu lid
Wiskundig/probuilder · probacktest · proorder · proscreener

ROUND

ROUND rondt in ProBuilder een getal af op het naastgelegen gehele getal, of op een vast aantal decimalen. Syntaxis, de opmerking over bankiersafronding en uitgewerkte voorbeelden.

Syntaxis

probuilder
ROUND(a, digits)

Parameters

NaamTypeBeschrijving
agetalDe af te ronden waarde.
digitsgeheel getalOptioneel. Aantal decimalen om op af te ronden. Indien weggelaten, a wordt afgerond op het dichtstbijzijnde gehele getal.

Formule

code
ROUND(x) = nearest integer to x,   halves rounded to the nearest even value

Met digits, a wordt afgerond op dat aantal decimalen, dus ROUND(3.14159, 2) retourneert 3.14.

Hoe het werkt

ROUND kiest de naastbijgelegen waarde in beide richtingen, anders dan CEIL die altijd naar boven afrondt en FLOOR dat altijd naar beneden afrondt. Een decimaal deel onder 0.5 rondt naar beneden af, boven 0.5 naar boven. Exacte halven volgen bankiersafronding: ze gaan naar het naastliggende even getal, dus ROUND(2.5) geeft 2 en ROUND(3.5) geeft 4. Dit vermindert cumulatieve afwijking bij het afronden van veel waarden.

De optionele digits argument bepaalt de precisie van het resultaat, nuttig om prijzen of indicatorwaarden te normaliseren naar een vast aantal decimalen.

Voorbeelden

Voorbeeld 1, Een veranderingssnelheid afronden (Indicator)

probuilder
// Round the 10-period rate of change to a whole number
i1 = ROC[10](close)
roundedROCvalue = ROUND(i1)
RETURN i1 AS "ROC", roundedROCvalue AS "ROC rounded"

Als de ruwe waarde 9.6 is, ROUND geeft 10. Een waarde van 9.4 zou naar beneden worden afgerond op 9.

Voorbeeld 2, Afronden op twee decimalen om te groeperen (ProScreener)

probuilder
// Group instruments by a two-decimal ratio
ratio = close / Average[50](close)
r = ROUND(ratio, 2)
SCREENER[r >= 1](r AS "Ratio 2dp")

Afronden op twee decimalen brengt bijna identieke ratio's samen in gedeelde buckets.

Voorbeeld 3, Een berekende doelprijs afronden (ProOrder)

probuilder
// Round a target price to a whole number before display
entry = close
target = ROUND(entry * 1.015)
IF NOT LongOnMarket AND close CROSSES OVER Average[20](close) THEN
  BUY 1 CONTRACT AT MARKET
ENDIF

ROUND normaliseert het berekende target naar een heel getal. Om een orderprijs in plaats daarvan naar een geldige tick af te ronden, gebruik ROUNDEDUP of ROUNDEDDOWN.

Veelvoorkomende fouten en valkuilen

  • Halve waarden worden afgerond naar even. ROUND(2.5) geeft 2, niet 3, omdat banker's rounding exacte halven naar het naastgelegen even getal stuurt. Ga er niet van uit dat 0.5 altijd naar boven wordt afgerond.
  • Rondt in beide richtingen af. In tegenstelling tot CEIL en FLOOR, ROUND kan stijgen of dalen. Gebruik CEIL om omhoog te forceren en FLOOR om omlaag te forceren.
  • Geen afronding op ticks. ROUND werkt op gehele getallen en decimalen. Gebruik voor het afronden van een orderprijs op de verhandelbare tick van het instrument ROUNDEDUP of ROUNDEDDOWN.
  • CEIL, rondt naar boven af op het naastgelegen geheel getal of decimaal.
  • FLOOR, rondt naar beneden af op het naastgelegen geheel getal of decimaal.
  • ROUNDEDUP, rondt een orderprijs naar boven af op de dichtstbijzijnde verhandelbare tick.
  • ROUNDEDDOWN, rondt een orderprijs naar beneden af op de dichtstbijzijnde verhandelbare tick.
  • ABS, absolute waarde, vaak gecombineerd met afronden.
  • SGN, teken van een waarde.
  • MOD, rest van een deling.