POSITIONPRICE
POSITIONPRICE restituisce il prezzo medio di ingresso dell'intera posizione aperta in ProBacktest e ProOrder, a differenza di TRADEPRICE che legge i singoli ordini di ingresso.
Sintassi
POSITIONPRICEI valori passati sono disponibili con un offset di indice, quindi PositionPrice[1] legge il prezzo medio della posizione così come era sulla bar precedente.
Come funziona
POSITIONPRICE riporta il prezzo medio al quale è stata costruita la posizione aperta. Finché la posizione è composta da un singolo ordine di ingresso, equivale al prezzo di esecuzione di quell'ordine. Appena la strategia aggiunge contratti, tramite piramidaggio o mediando al ribasso, il valore diventa la media di tutti gli ingressi aperti ponderata per le loro dimensioni, e ogni aggiunta successiva lo sposta di nuovo.
La distinzione da TRADEPRICE è importante ed è una fonte frequente di bug. TRADEPRICE è a livello di ordine: TRADEPRICE(1) restituisce il prezzo di ingresso dell'ordine individuale più recente, TRADEPRICE(2) quello precedente. POSITIONPRICE è a livello di posizione: un unico numero che sintetizza l'intera posizione aperta. I due coincidono solo quando è aperto esattamente un ordine di ingresso. La logica di uscita che deve reagire al punto di breakeven complessivo della posizione va affidata a POSITIONPRICE; la logica che reagisce all'ultima esecuzione, come le regole di distanza tra ingressi di mediazione, va affidata a TRADEPRICE.
Le istruzioni che misurano le distanze dall'ingresso, come SET STOP PLOSS, sono ancorati anche a questa media, quindi capire come si sposta la media quando vengono aggiunti contratti fa parte del prevedere dove finiranno quei livelli.
Esempi
Esempio 1, Mediare al ribasso e uscire sopra la media (ProOrder)
// Unrealized profit of the whole position
floatingprofit = (((close - positionprice) * pointvalue) * countofposition) / pipsize
myMACD = MACD[12,26,9](close)
// Initial entry on a MACD zero-line cross
long = myMACD CROSSES OVER 0
IF NOT LongOnMarket AND long THEN
BUY 1 CONTRACT AT MARKET
ENDIF
// Add a contract if the last order is aged and price fell 20 points below it
IF TRADEINDEX(1) > 5 AND TRADEPRICE(1) - Close > 20 AND LongOnMarket THEN
BUY 1 CONTRACT AT MARKET
ENDIF
// Exit the averaged position once price recovers above its average entry
IF COUNTOFPOSITION >= 2 AND Close > POSITIONPRICE THEN
SELL AT MARKET
ENDIF
SET TARGET PROFIT 20La regola di mediazione distanzia i nuovi ingressi usando TRADEPRICE a livello di ordine, mentre l'uscita confronta il mercato con POSITIONPRICE a livello di posizione, chiudendo tutto appena l'operazione mediata torna in positivo. Questo è l'esempio di riferimento della documentazione originale con i commenti riscritti.
Esempio 2, Media della posizione a confronto con il prezzo dell'ultimo ordine (ProBacktest)
// Plot the two entry price references side by side
IF onmarket THEN
GRAPH positionprice AS "Average position price"
GRAPH tradeprice AS "Latest order entry price"
ENDIFFinché è aperto un solo ordine le due linee si sovrappongono. Dopo ogni ingresso aggiuntivo TRADEPRICE salta all'esecuzione più recente mentre POSITIONPRICE si sposta solo in parte, mostrando la media ponderata all'opera.
Esempio 3, Stop a breakeven misurato dalla media della posizione (ProOrder)
// Promote the stop to the average entry after a 15 point gain
IF longonmarket AND (close - positionprice) >= 15 * pointsize THEN
SET STOP BREAKEVEN
ENDIFLa condizione di profitto è misurata da POSITIONPRICE, quindi dopo aver mediato, il requisito di 15 punti si applica all'intera posizione invece che alla prima esecuzione.
Errori e insidie comuni
- Confonderlo con TRADEPRICE. POSITIONPRICE è la media dell'intera posizione, TRADEPRICE il prezzo di un singolo ordine. Le regole di uscita scritte su TRADEPRICE si comportano in modo inatteso quando la posizione contiene più di un ingresso, e viceversa.
- Leggerlo senza posizione aperta. Senza una posizione aperta il valore non contiene un prezzo di ingresso significativo. Proteggi ogni calcolo su POSITIONPRICE con
ONMARKET,LONGONMARKET, oSHORTONMARKETper evitare di confrontare con un valore obsoleto o zero. - La media si muove. Ogni ordine aggiunto sposta POSITIONPRICE verso la nuova esecuzione. Anche gli stop e le condizioni di profitto ancorati a esso si spostano, il che può ampliare o restringere silenziosamente il rischio dopo il piramidaggio.
- Gli offset di indice leggono lo storico, non gli ordini.
PositionPrice[1]è l'istantanea della media sulla bar precedente, non il prezzo dell'ordine precedente. L'accesso ordine per ordine richiedeTRADEPRICE(N).
Istruzioni correlate
TRADEPRICE, prezzo di ingresso di un singolo ordine, la controparte a livello di ordine.TRADEINDEX, l'indice di bar in cui un ordine è stato eseguito.COUNTOFPOSITION, la dimensione con segno della posizione aperta.POSITIONPERF, performance di una posizione come rapporto tra guadagno e costo.POINTVALUE, il valore in contanti di un movimento di un punto.PIPSIZE, la dimensione di un pip in unità di prezzo.ONMARKET, vero mentre una qualsiasi posizione è aperta.BREAKEVEN, sposta lo stop o il target al prezzo di ingresso.