Bli medlem i dag
ProBacktest/probacktest · proorder

ROUNDEDUP

ROUNDEDUP i ProBacktest og ProOrder runder en verdi opp til neste hele tall, brukt når ordreantall må rundes oppover. Syntaks, eksempler og fallgruver.

Syntaks

probuilder
ROUNDEDUP(value)

Parametere

NavnTypeStandardBeskrivelse
valuetallingenVerdien som skal rundes av. Enhver literal, variabel eller aritmetisk uttrykk som evalueres til et tall.

Slik fungerer det

ROUNDEDUP tar en numerisk verdi og returnerer det neste høyere hele tallet når verdien har en desimaldel. En verdi som allerede er et helt tall returneres uendret. Siden ordreinstruksjoner i ProBacktest og ProOrder arbeider med hele antall aksjer, kontrakter eller lots, trenger enhver størrelsesformel som involverer divisjon et avrundingstrinn før resultatet kan legges inn som en ordre.

Å runde opp er riktig retning når den beregnede verdien representerer et minimum som må oppfylles, for eksempel antallet aksjer som trengs for at en posisjon skal nå en måleksponering, eller antallet som kreves for å hedge en annen posisjon fullstendig. I de tilfellene ville avrunding nedover gjort posisjonen for liten.

Avveiningen er kostnad: å runde opp betyr at ordren kan kreve litt mer kontanter enn den rene beregningen antydet. Når beregningen representerer et budsjett som ikke må overskrides, er ROUNDEDDOWN det riktige motstykket.

Eksempler

Eksempel 1, Hele aksjer fra et kontantbeløp (ProBacktest)

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

Divisjonen gir omtrent 8.1 og ROUNDEDUP hever det til 9. Merk at å kjøpe 9 aksjer koster litt mer enn de 1000 i kontanter; se fallgruvene nedenfor. Dette er eksempelet fra den offisielle referansen.

Eksempel 2, Nå en minimumseksponering (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

Fordi antallet rundes opp, når den nominelle verdien av posisjonen alltid målet på 10000 i stedet for å stoppe like under.

Eksempel 3, Tilpasse en short-hedge til en long-posisjon (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

Et desimalt hedge-forhold rundes opp til neste hele antall, slik at short-benet dekker den tilsiktede eksponeringen fullt ut.

Vanlige feil og fallgruver

  • Avrunding oppover kan overskride budsjettet. Anvendt på en divisjon av kontanter på pris gir ROUNDEDUP et antall som koster mer enn den tilgjengelige kontantbeholdningen, 9 aksjer til 123.45 er 1111.05 mot et budsjett på 1000. For budsjettbegrenset størrelsesberegning bruk ROUNDEDDOWN i stedet.
  • Ikke tilgjengelig i indikatorer. ROUNDEDUP hører til strategispråkene. I indikator- eller screener-kode er ekvivalenten CEIL; ROUNDEDUP der gir kompileringsfeil.
  • Hele verdier forblir uendret. ROUNDEDUP(8) er 8, ikke 9. Logikk som forventer at funksjonen alltid legger til én, oppfører seg feil på eksakte hele tall.
  • Rund av én gang, til slutt. Å runde av mellomverdier, som prisen eller forholdstallet, før den siste divisjonen forsterker avrundingsfeilen. Anvend ROUNDEDUP bare på det endelige antallet.
  • ROUNDEDDOWN, runder en verdi ned til nærmeste hele tall.
  • ROUND, runder av til nærmeste hele tall.
  • CEIL, runder opp, tilgjengelig i alle underspråk.
  • FLOOR, runder ned, tilgjengelig i alle underspråk.
  • SHARES, nøkkelord for kvantumsenhet ved aksjeordrer.
  • CASH, nøkkelord for kontantbasert posisjonsstørrelse.
  • BUY, åpner en long-posisjon med det beregnede kvantumet.
  • SELLSHORT, åpner en short-posisjon med det beregnede antallet.