Word nu lid
ProBacktest/probacktest · proorder

POSITIONPRICE

POSITIONPRICE geeft de gemiddelde instapprijs van de hele open positie in ProBacktest en ProOrder, in tegenstelling tot TRADEPRICE, die afzonderlijke instaporders leest.

Syntaxis

probuilder
POSITIONPRICE

Eerdere waarden zijn beschikbaar met een indexoffset, dus PositionPrice[1] leest de gemiddelde positieprijs zoals die op de vorige bar was.

Hoe het werkt

POSITIONPRICE geeft de gemiddelde prijs waartegen de open positie is opgebouwd. Zolang de positie uit één instaporder bestaat, is die gelijk aan de fill-prijs van die order. Zodra de strategie contracten toevoegt, via pyramiding of bijkopen bij een daling, wordt de waarde het gemiddelde van alle open instappen, gewogen naar hun grootte, en elke latere toevoeging verschuift die opnieuw.

Het verschil met TRADEPRICE is belangrijk en een veelvoorkomende bron van bugs. TRADEPRICE is op orderniveau: TRADEPRICE(1) geeft de instapprijs van de meest recente individuele order, TRADEPRICE(2) de voorgaande. POSITIONPRICE zit op positieniveau: één getal dat de hele open positie samenvat. De twee komen alleen overeen zolang er precies één instaporder open staat. Uitstaplogica die moet reageren op het algehele breakevenpunt van de positie hoort bij POSITIONPRICE; logica die op de laatste fill reageert, zoals afstandsregels tussen averaging-instappen, hoort bij TRADEPRICE.

Instructies die afstanden vanaf de instap meten, zoals SET STOP PLOSS, zijn ook aan dit gemiddelde verankerd, dus begrijpen hoe het gemiddelde verschuift wanneer er contracten worden toegevoegd hoort bij het voorspellen waar die niveaus uitkomen.

Voorbeelden

Voorbeeld 1, Bijkopen bij een daling en uitstappen boven het gemiddelde (ProOrder)

probuilder
// 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 20

De bijkoopregel plaatst nieuwe instappen op afstand met de TRADEPRICE op orderniveau, terwijl de uitstap de markt vergelijkt met de POSITIONPRICE op positieniveau en alles sluit zodra de gemiddelde trade weer boven water staat. Dit is het referentievoorbeeld uit de brondocumentatie met herschreven commentaar.

Voorbeeld 2, Positiegemiddelde versus laatste orderprijs (ProBacktest)

probuilder
// 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"
ENDIF

Zolang er maar één order open is, overlappen de twee lijnen. Na elke extra instap springt TRADEPRICE naar de nieuwste fill terwijl POSITIONPRICE maar deels meebeweegt, wat het gewogen gemiddelde in werking laat zien.

Voorbeeld 3, Breakeven-stop gemeten vanaf het positiegemiddelde (ProOrder)

probuilder
// Promote the stop to the average entry after a 15 point gain
IF longonmarket AND (close - positionprice) >= 15 * pointsize THEN
  SET STOP BREAKEVEN
ENDIF

De winstvoorwaarde wordt gemeten vanaf POSITIONPRICE, dus na het bijkopen geldt de eis van 15 punten voor de hele positie in plaats van voor de eerste fill.

Veelvoorkomende fouten en valkuilen

  • Verwarring met TRADEPRICE. POSITIONPRICE is het gemiddelde van de hele positie, TRADEPRICE de prijs van één order. Uitstapregels die op TRADEPRICE zijn geschreven gedragen zich onverwacht zodra de positie meer dan één instap bevat, en omgekeerd.
  • Het uitlezen zonder positie. Zonder open positie bevat de waarde geen zinvolle instapkoers. Beveilig elke berekening met POSITIONPRICE met ONMARKET, LONGONMARKET, of SHORTONMARKET om vergelijken met een verouderde of nulwaarde te voorkomen.
  • Het gemiddelde beweegt. Elke toegevoegde order schuift POSITIONPRICE richting de nieuwe fill. Stops en winstvoorwaarden die eraan verankerd zijn, verschuiven mee, waardoor het risico na pyramiding ongemerkt groter of kleiner kan worden.
  • Index-offsets lezen historie, geen orders. PositionPrice[1] is de momentopname van het gemiddelde op de vorige bar, niet de koers van de vorige order. Toegang per order vereist TRADEPRICE(N).
  • TRADEPRICE, instapprijs van een afzonderlijke order, de tegenhanger op orderniveau.
  • TRADEINDEX, de bar-index waarop een order is uitgevoerd.
  • COUNTOFPOSITION, de grootte van de open positie met teken.
  • POSITIONPERF, prestatie van een positie als verhouding tussen winst en kostprijs.
  • POINTVALUE, de geldwaarde van een beweging van één punt.
  • PIPSIZE, de grootte van één pip in prijseenheden.
  • ONMARKET, waar zolang er een positie open is.
  • BREAKEVEN, verplaatst de stop of het target naar de instapprijs.