POSITIONPRICE
POSITIONPRICE returnerar det genomsnittliga entrypriset för hela den öppna positionen i ProBacktest och ProOrder, till skillnad från TRADEPRICE som läser enskilda entryorder.
Syntax
POSITIONPRICETidigare värden är tillgängliga med en indexförskjutning, så PositionPrice[1] läser positionens genomsnittspris som det var på föregående bar.
Så fungerar det
POSITIONPRICE rapporterar det genomsnittliga pris till vilket den öppna positionen byggdes upp. Så länge positionen består av en enda entryorder är det lika med den orderns avslutspris. Så snart strategin lägger till kontrakt, genom pyramidering eller genom att snitta ner, blir värdet genomsnittet av alla öppna entries viktade efter sina storlekar, och varje senare tillägg flyttar det igen.
Skillnaden mot TRADEPRICE har betydelse och är en vanlig källa till buggar. TRADEPRICE är på ordernivå: TRADEPRICE(1) returnerar entrypriset för den senaste enskilda ordern, TRADEPRICE(2) den närmast föregående. POSITIONPRICE ligger på positionsnivå: ett enda tal som sammanfattar hela den öppna positionen. De två stämmer överens bara så länge exakt en entryorder är öppen. Exitlogik som ska reagera på positionens totala breakevenpunkt hör till POSITIONPRICE; logik som reagerar på det senaste avslutet, till exempel avståndsregler mellan entryer vid snittköp, hör till TRADEPRICE.
Instruktioner som mäter avstånd från entryn, såsom SET STOP PLOSS, är också förankrade i detta medelvärde, så att förstå hur medelvärdet förskjuts när kontrakt läggs till är en del av att förutsäga var de nivåerna hamnar.
Exempel
Exempel 1, Snitta ner och exit över genomsnittet (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 20Snittningsregeln fördelar nya entries med hjälp av TRADEPRICE på ordernivå, medan exiten jämför marknaden med POSITIONPRICE på positionsnivå och stänger allt så snart den snittade affären är tillbaka på plus. Detta är referensexemplet från källdokumentationen med omskrivna kommentarer.
Exempel 2, Positionens genomsnitt jämfört med senaste orderpris (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"
ENDIFSå länge bara en order är öppen sammanfaller de två linjerna. Efter varje ytterligare entry hoppar TRADEPRICE till det senaste avslutet medan POSITIONPRICE bara flyttar sig en del av vägen, vilket visar det viktade genomsnittet i arbete.
Exempel 3, Breakeven-stop mätt från positionens genomsnitt (ProOrder)
// Promote the stop to the average entry after a 15 point gain
IF longonmarket AND (close - positionprice) >= 15 * pointsize THEN
SET STOP BREAKEVEN
ENDIFVinstvillkoret mäts från POSITIONPRICE, så efter att man snittat in gäller kravet på 15 punkter för hela positionen i stället för för det första avslutet.
Vanliga fel och fallgropar
- Att förväxla den med TRADEPRICE. POSITIONPRICE är genomsnittet för hela positionen, TRADEPRICE priset för en enskild order. Exitregler skrivna mot TRADEPRICE beter sig oväntat så snart positionen innehåller mer än ett entry, och vice versa.
- Att läsa den utan position. Utan öppen position bär värdet inget meningsfullt entrypris. Skydda all aritmetik på POSITIONPRICE med
ONMARKET,LONGONMARKET, ellerSHORTONMARKETför att undvika att jämföra mot ett inaktuellt värde eller noll. - Genomsnittet flyttar sig. Varje tillagd order flyttar POSITIONPRICE mot det nya avslutspriset. Stoppar och vinstvillkor som är förankrade i den flyttas också, vilket tyst kan vidga eller snäva in risken efter pyramidering.
- Indexoffset läser historik, inte order.
PositionPrice[1]är föregående bars avläsning av genomsnittet, inte föregående orders pris. Åtkomst order för order kräverTRADEPRICE(N).
Relaterade instruktioner
TRADEPRICE, entrypris för en enskild order, motsvarigheten på ordernivå.TRADEINDEX, barindexet där en order exekverades.COUNTOFPOSITION, storleken på den öppna positionen med tecken.POSITIONPERF, en positions utveckling som en kvot mellan vinst och kostnad.POINTVALUE, kontantvärdet av en rörelse på en punkt.PIPSIZE, storleken på en pip i prisenheter.ONMARKET, sant så länge någon position är öppen.BREAKEVEN, flyttar stoppen eller målet till entrypriset.