Iscriviti ora
ProBacktest/probacktest · proorder

MINORDER

MINORDER è un'impostazione DEFPARAM in ProBacktest e ProOrder che stabilisce la dimensione minima dell'ordine eseguita. Gli ordini sotto la soglia vengono ignorati completamente.

Sintassi

probuilder
DEFPARAM MINORDER = value

Parametri

NomeTipoPredefinitoDescrizione
valuenumericonessunoNumero minimo di unità, contratti o lotti che può essere eseguito in un singolo ordine.

Come funziona

DEFPARAM le istruzioni configurano l'ambiente di esecuzione e devono comparire all'inizio della strategia, prima di qualsiasi istruzione eseguibile. MINORDER imposta un limite minimo alla dimensione dell'ordine: ogni ordine la cui quantità scende sotto il valore configurato viene scartato invece di essere eseguito.

L'impostazione esiste per realismo. Molti strumenti impongono una dimensione minima negoziabile: un lotto su un conto Forex, un contratto su un future, una puntata minima su un CFD. Una formula di dimensionamento che divide il capitale per il prezzo può produrre quantità frazionarie o molto piccole che nessun broker accetterebbe. MINORDER filtra quegli ordini, così la simulazione contiene solo operazioni che potrebbero esistere nella pratica.

A differenza di MAXORDER, che riduce gli ordini sovradimensionati al limite massimo, MINORDER non arrotonda per eccesso un ordine di dimensione insufficiente. L'ordine semplicemente non viene inviato. Una strategia la cui dimensione calcolata resta sotto la soglia non entra quindi mai sul mercato, il che è di per sé una diagnostica utile: rivela che il capitale o la formula di dimensionamento è insufficiente per lo strumento.

Esempi

Esempio 1, Imporre un minimo di una unità (ProBacktest)

probuilder
// orders below 1 unit are not executed
DEFPARAM MINORDER = 1

IF NOT OnMarket AND close crosses over Average[50](close) THEN
  BUY 1 CONTRACT AT MARKET
ENDIF

La configurazione di base presa dal riferimento. Ogni ordine di almeno un contratto passa, qualsiasi cosa più piccola verrebbe scartata.

Esempio 2, Sizing basato sulla liquidità che può scendere sotto il limite minimo (ProBacktest)

probuilder
DEFPARAM MINORDER = 1

// invest a fixed cash slice per trade
capitalPerTrade = 5000
positionsize = FLOOR(capitalPerTrade / close)

IF NOT OnMarket AND RSI[14](close) < 30 THEN
  BUY positionsize SHARES AT MARKET
ENDIF

Quando il prezzo dell'azione sale sopra 5000, positionsize vale 0 e l'ordine ricade sotto il MINORDER soglia, quindi non viene aperta nessuna operazione. Il filtro impedisce che ordini di quantità zero raggiungano il motore.

Esempio 3, Dimensione minima del lotto su una strategia Forex (ProOrder)

probuilder
DEFPARAM MINORDER = 1

long = ExponentialAverage[20](close) crosses over ExponentialAverage[50](close)

IF NOT OnMarket AND long THEN
  BUY 1 LOT AT MARKET
  SET STOP PLOSS 40
ENDIF

IF LongOnMarket AND close < ExponentialAverage[50](close) THEN
  SELL AT MARKET
ENDIF

Il limite minimo di ordine rispecchia il lotto negoziabile più piccolo del conto, così il backtest non può simulare posizioni che il broker rifiuterebbe.

Errori e insidie comuni

  • Gli ordini sottodimensionati svaniscono silenziosamente. Gli ordini sotto la soglia vengono ignorati senza errore né voce di log. Una strategia che non opera mai in un backtest può semplicemente generare quantità inferiori a MINORDER, non il mancato rispetto delle sue condizioni di ingresso.
  • Nessun arrotondamento per eccesso. MINORDER filtra, non porta gli ordini piccoli al minimo. Il codice che si affida al motore per portare un ordine di 0.4 lotti a 1 lotto si comporta in modo diverso dall'atteso, l'ordine viene scartato.
  • DEFPARAM posizionamento. Tutte DEFPARAM istruzioni devono precedere la prima riga eseguibile. Un DEFPARAM MINORDER più in basso il codice non compila.
  • Anche le uscite sono ordini. Anche un'uscita parziale la cui quantità scende sotto la soglia viene ignorata, cosa che può lasciare una posizione aperta più a lungo del previsto quando si riduce gradualmente con quantità calcolate.
  • MAXORDER, dimensione massima consentita per un singolo ordine.
  • DEFPARAM, dichiara i parametri di esecuzione a livello di strategia.
  • CASH, dimensionamento della posizione basato su un importo in contanti.
  • BUY, apre o incrementa una posizione long.
  • SELL, chiude parzialmente o totalmente una posizione long.
  • LOT, quantità dell'ordine espressa in lotti.
  • CONTRACT, quantità dell'ordine espressa in contratti.
  • SHARES, quantità dell'ordine espressa in azioni.