Bli medlem idag
Matematik/probuilder · probacktest · proorder · proscreener

CEIL

CEIL i ProBuilder avrundar ett tal uppåt till närmaste heltal, eller till ett angivet antal decimaler. Syntax, den valfria digits-parametern och exempel.

Syntax

probuilder
ceil(var, digits)

Parametrar

NamnTypBeskrivning
vartalVärdet som ska avrundas uppåt.
digitsheltalValfritt. Antal decimaler att avrunda uppåt till. Om det utelämnas, var avrundas uppåt till närmaste heltal.

Formel

kod
CEIL(x) = smallest integer >= x

Med digits, skalas värdet med 10^digits, avrundas uppåt och skalas sedan tillbaka, så ceil(x, d) avrundar x upp till d decimaler.

Så fungerar det

CEIL avrundar alltid mot plus oändligheten, aldrig mot noll. ceil(3.1) och ceil(3.9) returnerar båda 4 eftersom varje decimaldel trycker resultatet uppåt. För negativa tal flyttas det mot noll: ceil(-3.7) returnerar -3, det minsta heltalet som inte är mindre än -3.7.

Den valfria digits argumentet låter dig avrunda uppåt med valfri precision. ceil(3.14159, 2) returnerar 3.15. Detta skiljer sig från ROUND, som väljer det närmaste värdet i båda riktningarna, och från FLOOR, som alltid avrundar nedåt.

Exempel

Exempel 1, Avrunda ett medelvärde uppåt till hela enheter (Indikator)

probuilder
// Whole-number ceiling of a moving average
ma = Average[20](close)
upTicks = ceil(ma)
RETURN upTicks AS "MA rounded up"

Varje decimaldel av medelvärdet skjuts upp till nästa heltal, så den plottade linjen ligger på eller över det råa medelvärdet.

Exempel 2, Dela in ett förhållande i övre steg (ProScreener)

probuilder
// Group price-to-average ratio into 0.1 upper buckets
ratio = close / Average[50](close)
bucket = ceil(ratio, 1)
SCREENER[ratio > 1](bucket AS "Ratio ceiling")

Avrundning uppåt till en decimal grupperar instrument i grova band samtidigt som varje bands tak behålls.

Exempel 3, Position size som täcker ett mål (ProOrder)

probuilder
// Round required contracts up so exposure is never short of target
targetExposure = 10000
priceValue = close
rawQty = targetExposure / priceValue
qty = ceil(rawQty)
IF NOT LongOnMarket AND close CROSSES OVER Average[20](close) THEN
  BUY qty CONTRACT AT MARKET
ENDIF

Att avrunda den råa kvantiteten uppåt säkerställer att den fyllda storleken täcker målexponeringen i stället för att hamna strax under den. För att avrunda ett orderpris till en giltig tick, använd ROUNDEDUP istället.

Vanliga fel och fallgropar

  • Avrundar alltid uppåt, inte mot närmaste. ceil(3.1) är 4, inte 3. Om du vill ha närmaste heltal, använd ROUND; för att avrunda nedåt, använd FLOOR.
  • Negativa tal rör sig mot noll. ceil(-2.5) returnerar -2, inte -3, eftersom -2 är det minsta heltal som är minst -2.5.
  • Inte samma som ROUNDEDUP. CEIL avrundar uppåt till heltal eller decimaler. ROUNDEDUP avrundar ett orderpris uppåt till instrumentets närmaste giltiga tick.
  • FLOOR, avrundar nedåt till närmaste heltal eller decimal, i motsatt riktning.
  • ROUND, avrundar till närmaste heltal eller decimal.
  • ROUNDEDUP, avrundar ett orderpris uppåt till närmaste handelsbara tick.
  • ROUNDEDDOWN, avrundar ett orderpris nedåt till närmaste handelsbara tick.
  • ABS, absolutvärde, ofta kombinerat med avrundning.
  • SGN, tecknet för ett värde.
  • MOD, resten vid en division, en annan heltalsorienterad operation.