Iscriviti ora
ProBacktest/probacktest · proorder

COUNTOFPOSITION

COUNTOFPOSITION restituisce la dimensione con segno della posizione aperta in ProBacktest e ProOrder, positiva per long e negativa per short. Sintassi ed esempi.

Sintassi

probuilder
COUNTOFPOSITION

La parola chiave non accetta parametri e si usa come una variabile di sola lettura all'interno delle espressioni.

Come funziona

Su ogni bar, COUNTOFPOSITION riflette la quantità attualmente detenuta dalla strategia. Il segno codifica la direzione: una strategia long di 3 contratti riporta 3, una strategia short di 3 contratti legge -3, e una strategia flat legge 0. Il valore si aggiorna man mano che gli ordini vengono eseguiti, quindi dopo un'uscita parziale mostra la quantità residua, non la dimensione originale dell'ingresso.

La convenzione con segno rende la parola chiave utile in due situazioni. Primo, i controlli di direzione: COUNTOFPOSITION > 0 è equivalente a LONGONMARKET, e COUNTOFPOSITION < 0 a SHORTONMARKET. Secondo, limiti di esposizione: ABS(COUNTOFPOSITION) restituisce la dimensione totale indipendentemente dalla direzione, il modo consueto per limitare il piramidaggio quando DEFPARAM CumulateOrders = true consente ingressi ripetuti nella stessa direzione.

Viene conteggiata solo la quantità eseguita. Gli ordini limit o stop in attesa non ancora eseguiti non modificano il valore. Per conteggi senza segno per singola direzione, COUNTOFLONGSHARES e COUNTOFSHORTSHARES riportano separatamente le quantità long e short.

Esempi

Esempio 1, Limitare una posizione short piramidata (ProBacktest)

probuilder
myMACD = MACD[12,26,9](close)
short = myMACD crosses under 0

// First short entry when flat on the short side
IF NOT ShortOnMarket AND short THEN
  SELLSHORT 1 CONTRACTS AT MARKET
ENDIF

// Allow re-entries only while total size stays at or below 10 contracts
MAXSHARES = abs(COUNTOFPOSITION) <= 10
IF TRADEINDEX(1) > 5 AND TRADEPRICE(1) - Close > 10 * pointsize AND ShortOnMarket AND MAXSHARES THEN
  SELLSHORT 1 CONTRACTS AT MARKET
ENDIF
SET STOP TRAILING 50

La strategia incrementa una posizione short mentre il prezzo scende. Poiché COUNTOFPOSITION è negativo quando si è short, ABS() la converte in una dimensione totale prima di confrontarla con il limite di 10.

Esempio 2, Controllo della direzione senza le parole chiave ONMARKET (ProOrder)

probuilder
DEFPARAM CumulateOrders = false

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

// Enter long on a bullish crossover when flat
IF COUNTOFPOSITION = 0 AND fastMA crosses over slowMA THEN
  BUY 2 CONTRACTS AT MARKET
ENDIF

// Close the long on a bearish crossover
IF COUNTOFPOSITION > 0 AND fastMA crosses under slowMA THEN
  SELL AT MARKET
ENDIF

COUNTOFPOSITION = 0 rileva una strategia flat e COUNTOFPOSITION > 0 rileva una posizione long aperta, rispecchiando ONMARKET e LONGONMARKET con una sola parola chiave.

Esempio 3, Dimensionare un'uscita parziale dalla posizione in corso (ProOrder)

probuilder
DEFPARAM CumulateOrders = true

// Scale into a long, then bank half once the trade is 20 points onside
IF LongOnMarket AND close - TRADEPRICE >= 20 * pointsize AND COUNTOFPOSITION >= 4 THEN
  // Exit half of whatever is currently held
  SELL COUNTOFPOSITION / 2 CONTRACTS AT MARKET
ENDIF

Leggere la dimensione in corso permette all'uscita di adattarsi a quanti ingressi sono stati effettivamente eseguiti, invece di fissare una quantità nel codice.

Errori e insidie comuni

  • Dimenticare il segno sulle posizioni short. Mentre short, COUNTOFPOSITION è negativo, quindi una protezione come COUNTOFPOSITION <= 10 è sempre vero e non limita nulla. Confronta ABS(COUNTOFPOSITION) quando l'intento è la dimensione totale.
  • Aspettarsi che gli ordini pendenti vengano conteggiati. Il valore riflette solo la quantità eseguita. Un ordine limite in attesa che non è stato eseguito lascia COUNTOFPOSITION invariato, quindi i limiti di esposizione basati su di esso non tengono conto degli ordini in attesa presso il broker.
  • Nessuna accumulazione senza CumulateOrders. Con il predefinito DEFPARAM CumulateOrders = false, gli ordini aggiuntivi nella stessa direzione non si sommano, quindi COUNTOFPOSITION non cresce mai oltre il primo ingresso e la logica di pyramiding non fa nulla in silenzio.
  • Usarlo fuori dalle strategie. La parola chiave non esiste negli indicatori ProBuilder né in ProScreener. La logica che tiene conto della posizione deve risiedere nel codice ProBacktest o ProOrder stesso.
  • COUNTOFLONGSHARES, conteggio senza segno delle azioni detenute long.
  • COUNTOFSHORTSHARES, conteggio senza segno delle azioni detenute short.
  • CumulateOrders, parametro DEFPARAM che abilita l'accumulo di ingressi nella stessa direzione.
  • ONMARKET, vero mentre una qualsiasi posizione è aperta.
  • LONGONMARKET, vero mentre una posizione long è aperta.
  • SHORTONMARKET, vero mentre una posizione short è aperta.
  • TRADEINDEX, indice di bar dell'esecuzione di un'operazione precedente.
  • TRADEPRICE, prezzo di ingresso dell'operazione corrente o di una precedente.