Iscriviti ora
ProBacktest/probacktest · proorder

CumulateOrders

CumulateOrders è un parametro DEFPARAM che controlla se una strategia ProOrder può accumulare più ingressi nella stessa direzione. Sintassi ed esempi.

Sintassi

probuilder
DEFPARAM CumulateOrders = true
probuilder
DEFPARAM CumulateOrders = false

Parametri

NomeTipoPredefinitoDescrizione
CumulateOrdersbooleanotrueQuando true, gli ordini di ingresso nella direzione di una posizione aperta si aggiungono a essa. Quando false, tali ordini vengono ignorati fino alla chiusura della posizione.

Come funziona

CumulateOrders non è un'istruzione eseguibile ma un parametro a livello di strategia dichiarato con DEFPARAM. Come tutti DEFPARAM righe, deve comparire all'inizio del codice, prima di qualsiasi logica di trading, ed è valutato una volta all'avvio della strategia.

Con CumulateOrders = false, la strategia mantiene al massimo una porzione di posizione per direzione. Se un BUY condizione si attiva mentre un long è già aperto, l'ordine aggiuntivo viene scartato. Questo mantiene fissa la position size ed è la scelta abituale per le strategie in cui ogni segnale rappresenta un'operazione completa.

Con CumulateOrders = true, ogni volta che una condizione di ingresso è soddisfatta viene inviato un altro ordine nella stessa direzione, quindi la posizione cresce. Questo consente il piramidaggio e la mediazione del prezzo di ingresso, ma significa anche che una condizione che resta vera bar dopo bar continuerà a comprare fino all'intervento dei limiti di margine o della piattaforma. Le strategie cumulative abbinano quindi quasi sempre il parametro a un controllo sulla position size basato su COUNTOFPOSITION, COUNTOFLONGSHARES o COUNTOFSHORTSHARES.

Il parametro non influisce sulle uscite. SELL, EXITSHORT e le istruzioni di stop o target si comportano allo stesso modo in entrambe le modalità.

Esempi

Esempio 1, Limitare la strategia a un ingresso per direzione (ProOrder)

probuilder
DEFPARAM CumulateOrders = false
// One position slice at a time. While a long is open,
// further BUY orders in the same direction are ignored.

La dichiarazione conservata dal riferimento ufficiale. Posta all'inizio del programma, impedisce alla strategia di aggiungere a una posizione esistente.

Esempio 2, Piramidazione con un limite esplicito di dimensione (ProBacktest)

probuilder
DEFPARAM CumulateOrders = true

fastMA = Average[20](close)
slowMA = Average[50](close)

// Add one contract on each new bullish crossover,
// but never hold more than 4 contracts in total
IF fastMA crosses over slowMA AND abs(COUNTOFPOSITION) < 4 THEN
  BUY 1 CONTRACT AT MARKET
ENDIF

// Flatten everything on a bearish crossover
IF LongOnMarket AND fastMA crosses under slowMA THEN
  SELL AT MARKET
ENDIF

Attivare CumulateOrders permette a ogni incrocio di aggiungere un contratto, mentre COUNTOFPOSITION guard limita l'esposizione totale a quattro contratti.

Esempio 3, Mediare in uno short sui rialzi (ProOrder)

probuilder
DEFPARAM CumulateOrders = true

rsiVal = RSI[14](close)

// Open or add to the short each time RSI pushes above 70,
// capped at three lots
IF rsiVal crosses over 70 AND COUNTOFSHORTSHARES < 3 THEN
  SELLSHORT 1 LOT AT MARKET
ENDIF

SET STOP %TRAILING 1

Ogni spinta in ipercomprato aggiunge un lotto allo short. Poiché l'ingresso usa crosses over, l'ordine parte una volta per ogni escursione dell'RSI anziché su ogni bar in cui il livello si mantiene.

Errori e insidie comuni

  • DEFPARAM placed too late. Tutte DEFPARAM dichiarazioni, incluse CumulateOrders, deve precedere qualsiasi altra istruzione. Una dichiarazione dopo la logica di trading causa un errore di compilazione.
  • Fallimento silenzioso della piramidazione. Quando gli ingressi aggiuntivi non vengono mai eseguiti nonostante le condizioni siano soddisfatte, la causa consueta è il parametro lasciato a false o omesso in codice copiato da una strategia a ingresso singolo. Gli ordini vengono scartati senza alcun avviso.
  • Accumulo incontrollato. Con CumulateOrders = true, una condizione scritta come stato (rsiVal > 70) invece di un evento (rsiVal crosses over 70) invia un ordine su ogni bar in cui rimane vera. Combina condizioni di tipo evento con un COUNTOFPOSITION limite.
  • Aspettarsi che unisca gli ordini opposti. Il parametro governa solo l'accumulo nella stessa direzione. Un ordine contrario a una posizione aperta la riduce o la inverte comunque secondo la normale gestione degli ordini, indipendentemente da questa impostazione.
  • DEFPARAM, dichiara i parametri della strategia all'inizio del codice.
  • COUNTOFPOSITION, dimensione con segno della posizione aperta, usata per limitare la piramidazione.
  • COUNTOFLONGSHARES, conteggio senza segno delle azioni detenute long.
  • COUNTOFSHORTSHARES, conteggio senza segno delle azioni detenute short.
  • BUY, apre o incrementa una posizione long.
  • SELLSHORT, apre o incrementa una posizione short.
  • ONMARKET, vero mentre una qualsiasi posizione è aperta.
  • FLATAFTER, parametro DEFPARAM che forza la strategia flat dopo un orario stabilito.
  • FLATBEFORE, parametro DEFPARAM che mantiene la strategia flat prima di un orario stabilito.