Bli medlem i dag
ProBacktest/probacktest · proorder

ROUNDEDDOWN

ROUNDEDDOWN i ProBacktest og ProOrder runder en verdi ned til nærmeste hele tall, brukt til å beregne antall aksjer ut fra tilgjengelig kontantbeholdning. Syntaks og eksempler.

Syntaks

probuilder
ROUNDEDDOWN(expression)

Parametere

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

Slik fungerer det

ROUNDEDDOWN forkaster desimaldelen av en verdi og returnerer det neste lavere hele tallet. Å dele tilgjengelig kontantbeholdning på en aksjekurs gir vanligvis en brøkdel, og siden de fleste markeder bare godtar hele antall aksjer, må resultatet rundes av før det kan mates inn i en ordreinstruksjon. Å runde ned er den budsjettsikre retningen: det resulterende antallet koster aldri mer enn kontantbeholdningen som var tilgjengelig.

Det typiske mønsteret er en størrelsesblokk på tre linjer, beregn det rene antallet som en divisjon, rund det ned, og send deretter resultatet som antallet i en BUY- eller SELLSHORT-ordre. Fordi funksjonen godtar fulle uttrykk, kan divisjonen skje direkte inne i kallet.

For motsatt retning, å runde en brøkdel opp til neste hele tall, bruk ROUNDEDUP. For avrunding til nærmeste hele tall i begge retninger gjelder ROUND.

Eksempler

Eksempel 1, Hele aksjer fra et fast kontantbudsjett (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)

Den rene divisjonen gir omtrent 8.1, og ROUNDEDDOWN reduserer det til 8, det største hele antallet som passer inn i budsjettet. Dette er eksempelet fra den offisielle referansen.

Eksempel 2, Beregne ordrestørrelse fra en fast allokering (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

Hver inngang konverterer den samme kontantallokeringen til et helt antall aksjer til gjeldende pris. Den qty >= 1 vakt hindrer ordrer med null antall på dyre instrumenter.

Eksempel 3, Risikobasert beregning av kontraktantall (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

Position size utledes fra risikobudsjettet delt på kontantverdien av stoppavstanden, rundet ned slik at tapet i verste fall holder seg på eller under budsjettet.

Vanlige feil og fallgruver

  • Et resultat på null avbryter handelen. Når budsjettet er mindre enn én aksje eller én kontrakt med risiko, returnerer ROUNDEDDOWN 0 og ordreinstruksjonen gjør ingenting. Sikre innganger med en qty >= 1 betingelse for å gjøre oppførselen eksplisitt.
  • Ikke tilgjengelig i indikatorer. ROUNDEDDOWN hører til strategispråkene. Den samme avrundingen i indikator- eller screener-kode skrives med FLOOR; å bruke ROUNDEDDOWN der gir kompileringsfeil.
  • Avrunding nedover er ikke avkutting for negative tall. Størrelsesberegninger skal aldri gi annet enn positive antall. Å mate en negativ mellomverdi inn i en størrelsesblokk gir et negativt antall eller null, som aldri legger inn en ordre; valider inndataene i stedet for å stole på avrundingen.
  • Ikke rund av prisen, rund av antallet. Å anvende ROUNDEDDOWN på aksjekursen før divisjonen forvrenger beregningen. Rund av én gang, til slutt, på selve antallet.
  • ROUNDEDUP, runder en verdi opp til neste hele tall.
  • ROUND, runder av til nærmeste hele tall.
  • FLOOR, runder ned, tilgjengelig i alle underspråk.
  • CEIL, runder opp, 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.
  • POINTVALUE, kontantverdien av ett poeng, brukt ved risikobasert posisjonsberegning.