POSITIONPRICE
POSITIONPRICE renvoie le prix d'entrée moyen de l'ensemble de la position ouverte dans ProBacktest et ProOrder, contrairement à TRADEPRICE qui lit les ordres d'entrée individuels.
Syntaxe
POSITIONPRICELes valeurs passées sont accessibles avec un décalage d'indice, donc PositionPrice[1] lit le prix moyen de la position tel qu'il était sur la bar précédente.
Comment ça marche
POSITIONPRICE indique le prix moyen auquel la position ouverte a été construite. Tant que la position se compose d'un seul ordre d'entrée, il est égal au prix d'exécution de cet ordre. Dès que la stratégie ajoute des contrats, par pyramidage ou par moyenne à la baisse, la valeur devient la moyenne de toutes les entrées ouvertes pondérée par leurs tailles, et chaque ajout ultérieur la déplace de nouveau.
La distinction avec TRADEPRICE est importante et constitue une source fréquente de bugs. TRADEPRICE est au niveau de l'ordre : TRADEPRICE(1) renvoie le prix d'entrée de l'ordre individuel le plus récent, TRADEPRICE(2) celui qui le précède. POSITIONPRICE se situe au niveau de la position : un seul nombre qui résume toute la position ouverte. Les deux ne coïncident que tant qu'un seul ordre d'entrée est ouvert. La logique de sortie qui doit réagir au point mort global de la position relève de POSITIONPRICE ; celle qui réagit à la dernière exécution, comme les règles d'espacement entre entrées de renforcement, relève de TRADEPRICE.
Les instructions qui mesurent les distances depuis l'entrée, telles que SET STOP PLOSS, sont également ancrés sur cette moyenne, de sorte que comprendre comment la moyenne se déplace quand des contrats sont ajoutés fait partie de la prévision de l'endroit où ces niveaux aboutissent.
Exemples
Exemple 1, Moyenne à la baisse et sortie au-dessus de la moyenne (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 règle de moyenne espace les nouvelles entrées à l'aide de TRADEPRICE au niveau de l'ordre, tandis que la sortie compare le marché à POSITIONPRICE au niveau de la position, fermant tout dès que le trade moyenné repasse au-dessus de l'eau. Il s'agit de l'exemple de référence de la documentation source avec des commentaires réécrits.
Exemple 2, Moyenne de la position par rapport au prix du dernier ordre (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"
ENDIFTant qu'un seul ordre est ouvert, les deux lignes se superposent. Après chaque entrée supplémentaire, TRADEPRICE saute à la dernière exécution tandis que POSITIONPRICE ne se déplace que partiellement, montrant la moyenne pondérée à l'œuvre.
Exemple 3, Stop au seuil de rentabilité mesuré depuis la moyenne de la position (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 condition de profit est mesurée depuis POSITIONPRICE, donc après un renforcement en moyenne, l'exigence de 15 points s'applique à l'ensemble de la position plutôt qu'à la première exécution.
Erreurs et pièges courants
- Le confondre avec TRADEPRICE. POSITIONPRICE est la moyenne de l'ensemble de la position, TRADEPRICE le prix d'un seul ordre. Les règles de sortie écrites sur TRADEPRICE se comportent de façon inattendue dès que la position comporte plus d'une entrée, et inversement.
- Le lire sans position ouverte. En l'absence de position ouverte, la valeur ne contient aucun prix d'entrée exploitable. Protégez tout calcul sur POSITIONPRICE avec
ONMARKET,LONGONMARKET, ouSHORTONMARKETpour éviter de comparer à une valeur obsolète ou nulle. - La moyenne se déplace. Chaque ordre ajouté déplace POSITIONPRICE vers la nouvelle exécution. Les stops et les conditions de profit qui y sont ancrés se déplacent aussi, ce qui peut silencieusement élargir ou resserrer le risque après un pyramidage.
- Les décalages d'index lisent l'historique, pas les ordres.
PositionPrice[1]est l'instantané de la moyenne sur la barre précédente, et non le prix de l'ordre précédent. Un accès ordre par ordre exigeTRADEPRICE(N).
Instructions liées
TRADEPRICE, prix d'entrée d'un ordre individuel, l'équivalent au niveau de l'ordre.TRADEINDEX, l'indice de bar auquel un ordre a été exécuté.COUNTOFPOSITION, la taille signée de la position ouverte.POSITIONPERF, performance d'une position sous forme de rapport gain/coût.POINTVALUE, la valeur en espèces d'un mouvement d'un point.PIPSIZE, la taille d'un pip en unités de prix.ONMARKET, vrai tant qu'une position est ouverte.BREAKEVEN, déplace le stop ou l'objectif au prix d'entrée.