Iscriviti ora
ProBacktest/probacktest · proorder

MAXORDER

MAXORDER è un'impostazione DEFPARAM in ProBacktest e ProOrder che limita la dimensione di qualsiasi singolo ordine. Gli ordini superiori al limite vengono troncati alla dimensione massima.

Sintassi

probuilder
DEFPARAM MAXORDER = value

Parametri

NomeTipoPredefinitoDescrizione
valuenumericonessunoNumero massimo di unità, contratti o lotti consentiti in un singolo ordine.

Come funziona

DEFPARAM sono istruzioni che configurano l'ambiente di esecuzione di una strategia e devono comparire all'inizio del codice, prima di qualsiasi istruzione eseguibile. MAXORDER è una di queste impostazioni: definisce un limite massimo sulla quantità di un singolo ordine.

Il limite si applica a livello di ordine, non di posizione. Ogni volta che un'istruzione di ordine produce una quantità superiore al valore configurato, il motore esegue la dimensione massima consentita invece di rifiutare l'ordine. Un ordine dimensionato dinamicamente di 25 contratti con DEFPARAM MAXORDER = 10 viene eseguito come 10 contratti.

Il caso d'uso principale è il realismo. Il position sizing guidato da formule, per esempio dividendo il capitale disponibile per il prezzo, può produrre dimensioni di ordine che nessun broker o mercato assorbirebbe a un unico prezzo. Limitare la dimensione del singolo ordine mantiene un backtest più vicino a condizioni eseguibili e protegge un sistema in tempo reale da una formula di position sizing fuori controllo.

Poiché il limite è per ordine, una strategia che accumula posizioni con DEFPARAM CumulateOrders = true può comunque costruire una posizione totale maggiore di MAXORDER su più ordini.

Esempi

Esempio 1, Limitare la dimensione dell'ordine a dieci unità (ProBacktest)

probuilder
// no single order may exceed 10 units
DEFPARAM MAXORDER = 10

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

La strategia richiede 20 contratti, ma il MAXORDER impostazione riduce l'ordine a 10. Il backtest simula quindi la dimensione vincolata, non quella richiesta.

Esempio 2, Proteggere una formula di position sizing basata sul capitale (ProOrder)

probuilder
DEFPARAM MAXORDER = 5

// size grows with capital but can never exceed 5 contracts per order
positionsize = MAX(1, ROUND(strategyprofit / 10000))

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

La formula di sizing scala con il profitto accumulato. MAXORDER agisce come limite massimo rigido, quindi un valore di equity elevato non può spingere un singolo ordine oltre 5 contratti.

Esempio 3, Limite sull'ordine con accumulo di posizione (ProBacktest)

probuilder
DEFPARAM CumulateOrders = true
DEFPARAM MAXORDER = 2

// add on each pullback to the 20-bar average, 2 contracts at most per order
IF close crosses over Average[20](close) AND CountOfPosition < 6 THEN
  BUY 2 CONTRACTS AT MARKET
ENDIF

Ogni singolo ordine aggiuntivo rispetta il limite di 2 contratti, mentre la posizione accumulata può raggiungere 6 contratti su tre ordini. Il limite vincola gli ordini, non la posizione totale.

Errori e insidie comuni

  • Il troncamento è silenzioso. Gli ordini superiori al limite vengono ridotti, non rifiutati, e non viene prodotto alcun avviso. Un backtest può operare silenziosamente con dimensioni minori di quelle indicate dalla formula di position sizing, cosa che distorce le aspettative di profitto se il troncamento passa inosservato.
  • Per ordine, non per posizione. Con CumulateOrders attivo, diversi ordini limitati possono sommarsi in una posizione molto più grande di MAXORDER. Limitare l'esposizione totale richiede un controllo esplicito su CountOfPosition o equivalente.
  • DEFPARAM posizionamento. Tutte DEFPARAM le istruzioni devono precedere la prima riga eseguibile della strategia. Una DEFPARAM MAXORDER posizionato dopo altro codice non compila.
  • Non è un limite del broker. L'impostazione limita ciò che la strategia invia, non modella i massimi di borsa o del broker. Gli ordini reali entro MAXORDER può comunque superare i limiti di dimensione del broker.
  • MINORDER, dimensione minima dell'ordine eseguita durante un backtest.
  • DEFPARAM, dichiara i parametri di esecuzione a livello di strategia.
  • CumulateOrders, consente a più ordini di accumularsi in un'unica posizione.
  • BUY, apre o incrementa una posizione long.
  • SELLSHORT, apre o incrementa una posizione short.
  • LOT, quantità dell'ordine espressa in lotti.
  • CONTRACT, quantità dell'ordine espressa in contratti.
  • SHARES, quantità dell'ordine espressa in azioni.