Iscriviti ora
ProBacktest/probacktest · proorder

ROUNDEDDOWN

ROUNDEDDOWN in ProBacktest e ProOrder arrotonda un valore per difetto al numero intero più vicino, usato per dimensionare le quantità di azioni a partire dalla liquidità disponibile. Sintassi ed esempi.

Sintassi

probuilder
ROUNDEDDOWN(expression)

Parametri

NomeTipoPredefinitoDescrizione
expressionnumeronessunoValore da arrotondare. Qualsiasi letterale, variabile o espressione aritmetica che restituisce un numero.

Come funziona

ROUNDEDDOWN scarta la parte frazionaria di un valore e restituisce il numero intero inferiore successivo. Dividere la liquidità disponibile per il prezzo di un'azione produce di solito una frazione, e poiché la maggior parte dei mercati accetta solo quantità intere di azioni, il risultato deve essere arrotondato prima di poter alimentare un'istruzione di ordine. Arrotondare per difetto è la direzione sicura per il budget: la quantità risultante non costa mai più della liquidità che era disponibile.

Il pattern tipico è un blocco di dimensionamento su tre righe, calcola la quantità grezza come divisione, arrotondala per difetto, poi passa il risultato come quantità di un ordine BUY o SELLSHORT. Poiché la funzione accetta espressioni complete, la divisione può avvenire direttamente dentro la chiamata.

Per la direzione opposta, arrotondare una frazione per eccesso al numero intero successivo, usa ROUNDEDUP. Per arrotondare al numero intero più vicino in entrambe le direzioni, si applica ROUND.

Esempi

Esempio 1, Azioni intere da un budget di liquidità fisso (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)

La divisione grezza dà circa 8.1, e ROUNDEDDOWN la riduce a 8, la quantità intera più grande che rientra nel budget. Questo è l'esempio tratto dal riferimento ufficiale.

Esempio 2, Dimensionare un ordine da un'allocazione fissa (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

Ogni ingresso converte la stessa allocazione di capitale in un numero intero di azioni al prezzo corrente. Il qty >= 1 il controllo impedisce ordini di quantità zero su strumenti costosi.

Esempio 3, Dimensionamento dei contratti basato sul rischio (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

La position size è ricavata dal budget di rischio diviso per il valore in denaro della distanza dello stop, arrotondato per difetto in modo che la perdita nel caso peggiore resti pari o inferiore al budget.

Errori e insidie comuni

  • Un risultato pari a zero annulla l'operazione. Quando il budget è inferiore al rischio di un'azione o di un contratto, ROUNDEDDOWN restituisce 0 e l'istruzione di ordine non fa nulla. Proteggi gli ingressi con un qty >= 1 condizione per rendere esplicito il comportamento.
  • Non disponibile negli indicatori. ROUNDEDDOWN appartiene ai linguaggi delle strategie. Lo stesso arrotondamento nel codice di indicatori o screener si scrive con FLOOR; usare ROUNDEDDOWN in quel contesto non compila.
  • Arrotondare per difetto non equivale al troncamento per i numeri negativi. I calcoli di dimensionamento dovrebbero produrre sempre e solo quantità positive. Immettere un valore intermedio negativo in un blocco di dimensionamento produce una quantità negativa o nulla, che non piazza mai un ordine; convalida gli input anziché affidarti all'arrotondamento.
  • Non arrotondare il prezzo, arrotonda la quantità. Applicare ROUNDEDDOWN al prezzo dell'azione prima di dividere distorce il calcolo. Arrotonda una sola volta, alla fine, sulla quantità stessa.
  • ROUNDEDUP, arrotonda un valore per eccesso al numero intero successivo.
  • ROUND, arrotonda al numero intero più vicino.
  • FLOOR, arrotonda per difetto, disponibile in tutti i sottolinguaggi.
  • CEIL, arrotonda per eccesso, disponibile in tutti i sottolinguaggi.
  • SHARES, parola chiave dell'unità di quantità per gli ordini su azioni.
  • CASH, parola chiave per il dimensionamento della posizione basato sul contante.
  • BUY, apre una posizione long con la quantità calcolata.
  • POINTVALUE, valore in denaro di un punto, usato nel dimensionamento del rischio.