Bli medlem idag
ProBacktest/probacktest · proorder

ROUNDEDDOWN

ROUNDEDDOWN i ProBacktest och ProOrder avrundar ett värde nedåt till närmaste heltal, används för att dimensionera antal aktier utifrån tillgängliga kontanter. Syntax och exempel.

Syntax

probuilder
ROUNDEDDOWN(expression)

Parametrar

NamnTypStandardBeskrivning
expressiontalingenVärdet som ska avrundas. Vilken literal, variabel eller aritmetiskt uttryck som helst som utvärderas till ett tal.

Så fungerar det

ROUNDEDDOWN förkastar värdets decimaldel och returnerar närmast lägre heltal. Att dividera tillgängliga kontanter med en aktiekurs ger vanligtvis en bråkdel, och eftersom de flesta marknader bara accepterar hela antal aktier måste resultatet avrundas innan det kan matas in i en orderinstruktion. Att avrunda nedåt är den budgetsäkra riktningen: det resulterande antalet kostar aldrig mer än de kontanter som fanns tillgängliga.

Det typiska mönstret är ett block för position size på tre rader, beräkna det råa antalet som en division, avrunda det nedåt, och skicka sedan resultatet som antal i en BUY- eller SELLSHORT-order. Eftersom funktionen tar emot fullständiga uttryck kan divisionen ske direkt inuti anropet.

För motsatt riktning, att avrunda en bråkdel uppåt till nästa heltal, använd ROUNDEDUP. För avrundning till närmaste heltal i någon av riktningarna gäller ROUND.

Exempel

Exempel 1, Hela aktier från en fast kontantbudget (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 råa divisionen ger ungefär 8.1, och ROUNDEDDOWN minskar det till 8, det största hela antalet som ryms i budgeten. Detta är exemplet från den officiella referensen.

Exempel 2, Dimensionera en order utifrån 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

Varje entry omvandlar samma kontantallokering till ett helt antal aktier till aktuellt pris. Den qty >= 1 kontrollen förhindrar order med noll kvantitet på dyra instrument.

Exempel 3, Riskbaserad dimensionering av kontrakt (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 härleds från riskbudgeten dividerad med kontantvärdet av stopavståndet, avrundat nedåt så att förlusten i värsta fall stannar på eller under budgeten.

Vanliga fel och fallgropar

  • Ett resultat på noll avbryter affären. När budgeten är mindre än en aktie eller ett kontrakt av risk returnerar ROUNDEDDOWN 0 och orderinstruktionen gör ingenting. Skydda entries med ett qty >= 1 villkoret för att göra beteendet tydligt.
  • Inte tillgänglig i indikatorer. ROUNDEDDOWN hör till strategispråken. Samma avrundning i indikator- eller screenerkod skrivs med FLOOR; att använda ROUNDEDDOWN där går inte att kompilera.
  • Avrundning nedåt är inte trunkering för negativa tal. Beräkningar för position size ska bara ge positiva antal. Att mata in ett negativt mellanvärde i ett block för position size ger ett negativt eller noll antal, vilket aldrig lägger en order; validera indata i stället för att förlita dig på avrundningen.
  • Avrunda inte priset, avrunda antalet. Att tillämpa ROUNDEDDOWN på aktiekursen före divisionen förvränger beräkningen. Avrunda en gång, i slutet, på själva antalet.
  • ROUNDEDUP, avrundar ett värde uppåt till nästa heltal.
  • ROUND, avrundar till närmaste heltal.
  • FLOOR, avrundar nedåt, tillgänglig i alla underspråk.
  • CEIL, avrundar uppåt, tillgänglig i alla underspråk.
  • SHARES, nyckelord för kvantitetsenhet vid aktieordrar.
  • CASH, nyckelord för kontantbaserad position size.
  • BUY, öppnar en long-position med den beräknade kvantiteten.
  • POINTVALUE, kontantvärdet av en punkt, används i riskbaserad position size.