Iscriviti ora
ProBacktest/probacktest · proorder

COUNTOFLONGSHARES

COUNTOFLONGSHARES restituisce il numero di unità detenute long da una strategia ProBacktest o ProOrder, usato per limitare la position size quando si accumulano più ordini.

Sintassi

probuilder
COUNTOFLONGSHARES

Come funziona

La funzione legge la posizione aperta e restituisce un intero: la quantità di unità detenute sul lato long al momento della valutazione. Non richiede parametri né parentesi. Quando la strategia è flat o short, restituisce 0.

Il conteggio è espresso in unità, non in operazioni. Un singolo ordine di 3 contratti e tre ordini cumulati di 1 contratto restituiscono entrambi 3. Per ragionare sui singoli ingressi, combinalo con TRADEINDEX e TRADEPRICE, che indirizzano gli ordini tramite il loro indice.

Il contesto tipico è una strategia con DEFPARAM CumulateOrders = true, dove più ordini di ingresso possono sommarsi in una sola posizione. Confrontare COUNTOFLONGSHARES rispetto a un limite massimo prima di ogni ulteriore BUY mantiene l'esposizione totale entro un limite pianificato. L'equivalente sul lato short è COUNTOFSHORTSHARES, e COUNTOFPOSITION riporta la dimensione con segno di qualsiasi posizione aperta.

Esempi

Esempio 1, Piramidazione limitata a tre unità (ProBacktest)

probuilder
DEFPARAM CumulateOrders = true

myMACD = MACD[12,26,9](close)
long = myMACD crosses over 0

// First entry when flat
IF NOT LongOnMarket AND long THEN
    BUY 1 CONTRACTS AT MARKET
ENDIF

// Allow additions only while holding three units or fewer
MAXSHARES = COUNTOFLONGSHARES <= 3

// Add a unit if the last entry is seasoned and in profit
IF TRADEINDEX(1) > 5 AND Close - TRADEPRICE(1) > 10 AND LongOnMarket AND MAXSHARES THEN
    BUY 1 CONTRACTS AT MARKET
ENDIF
SET STOP TRAILING 50

La strategia apre su un incrocio del MACD, poi aggiunge un contratto alla volta mentre il conteggio corrente resta a tre o meno, l'ultimo ingresso ha almeno cinque bar, e il prezzo si è mosso di 10 punti oltre di esso.

Esempio 2, Tetto rigido di esposizione prima di ogni aggiunta (ProOrder)

probuilder
DEFPARAM CumulateOrders = true

trendUp = close > Average[100](close)
pullback = RSI[7](close) < 35

// Never hold more than 5 units long
IF trendUp AND pullback AND COUNTOFLONGSHARES < 5 THEN
    BUY 1 CONTRACT AT MARKET
ENDIF
SET STOP %TRAILING 2

Ogni pullback in un trend rialzista aggiunge un'unità, ma la condizione su COUNTOFLONGSHARES garantisce che la posizione accumulata non superi mai cinque unità.

Esempio 3, Uscita graduale quando la posizione è grande (ProOrder)

probuilder
DEFPARAM CumulateOrders = true

IF close crosses over Average[50](close) AND COUNTOFLONGSHARES < 4 THEN
    BUY 1 CONTRACT AT MARKET
ENDIF

// When fully loaded and momentum fades, shed one unit
IF COUNTOFLONGSHARES >= 4 AND RSI[14](close) crosses under 70 THEN
    SELL 1 CONTRACT AT MARKET
ENDIF
SET STOP %LOSS 3

Il conteggio guida entrambe le direzioni: limita i nuovi ingressi sotto le quattro unità e attiva un'uscita parziale una volta che la posizione è completamente costruita e il momentum gira.

Errori e insidie comuni

  • Unità, non operazioni. Il valore restituito conta azioni, contratti o lotti, non il numero di ordini di ingresso. Una strategia che compra 2 contratti per segnale raggiunge un limite di 6 dopo tre segnali, non dopo sei.
  • Inutile senza ordini cumulati. Con il predefinito CumulateOrders = false, una strategia mantiene al massimo un ingresso per volta, quindi la funzione restituisce sempre solo la quantità di quell'unico ordine o 0. La logica di piramidaggio richiede DEFPARAM CumulateOrders = true a contare.
  • Zero quando short o flat. La funzione ignora completamente l'esposizione short e restituisce 0. Testare COUNTOFLONGSHARES = 0 non significa che la strategia sia flat; combinalo con ONMARKET o COUNTOFSHORTSHARES per il quadro completo.
  • Valutato al momento della bar. Il conteggio riflette gli ordini eseguiti alla bar corrente. Un ordine inviato in questa bar ma non ancora eseguito non è incluso, quindi aggiunte consecutive in una stessa bar possono superare un limite verificato prima nel codice.