ONMARKET
ONMARKET en ProBacktest et ProOrder renvoie vrai tant qu'une position est ouverte, long ou short. Utilisé pour éviter les entrées en double et protéger la gestion de position.
Syntaxe
ONMARKETComment ça marche
ONMARKET ne prend aucun argument et renvoie vrai lorsque la stratégie détient au moins une position ouverte, long ou short, et faux lorsqu'elle est hors position. C'est l'équivalent indifférent à la direction de LONGONMARKET et SHORTONMARKET, qui testent chacun un seul côté.
La valeur ne reflète que les ordres exécutés. Un ordre limite ou stop en attente qui n'a pas été exécuté laisse ONMARKET à false, et l'indicateur repasse à false sur le bar suivant la clôture complète de la position. Avec CumulateOrders activé, un empilement d'entrées se lit toujours comme une seule valeur vraie ; COUNTOFPOSITION indique la taille réelle.
Les usages typiques se répartissent en deux groupes. Le code d'entrée est encadré par IF NOT OnMarket THEN ... ENDIF de sorte qu'un nouveau trade ne démarre qu'à plat. Le code de gestion, comme la logique de trailing stop ou les réinitialisations d'état, est encadré par IF OnMarket THEN ... ENDIF, ou son inverse sert à réinitialiser les variables entre les trades.
Exemples
Exemple 1, Garde-fou d'entrée hors position (ProBacktest)
// Open a position only when nothing is currently held
IF NOT ONMARKET THEN
BUY 1 CONTRACT AT MARKET
ENDIFLa stratégie achète un contrat uniquement lorsqu'elle est hors position, de sorte que les positions ne s'accumulent jamais. C'est l'exemple tiré de la référence officielle.
Exemple 2, Entrées long et short symétriques (ProOrder)
DEFPARAM CumulateOrders = false
fastMA = Average[20](close)
slowMA = Average[50](close)
// Take either direction, but only from flat
IF NOT onmarket THEN
IF fastMA CROSSES OVER slowMA THEN
BUY 1 CONTRACT AT MARKET
ELSIF fastMA CROSSES UNDER slowMA THEN
SELLSHORT 1 CONTRACT AT MARKET
ENDIF
ENDIFUn seul garde-fou ONMARKET couvre les deux directions, ce qui est plus simple que d'associer des contrôles LONGONMARKET et SHORTONMARKET distincts autour de chaque entrée.
Exemple 3, Réinitialisation des variables d'état de trade entre les positions (ProOrder)
// Clear the breakeven flag whenever the strategy is flat
IF NOT onmarket THEN
beArmed = 0
ENDIF
// Arm breakeven once the long shows 10 points of profit
IF longonmarket AND close - tradeprice >= 10 * pointsize THEN
beArmed = 1
ENDIF
IF beArmed = 1 THEN
SET STOP BREAKEVEN
ENDIFONMARKET est le déclencheur naturel de réinitialisation pour l'état propre à chaque trade. Le drapeau est effacé hors position, de sorte que chaque nouvelle position démarre sur une base vierge.
Erreurs et pièges courants
- Insensible à la direction par conception. ONMARKET ne peut pas distinguer long et short. Le code de sortie ou de stop qui n'a de sens que d'un seul côté doit utiliser LONGONMARKET ou SHORTONMARKET, sinon une position short peut déclencher la gestion du côté long.
- Les ordres en attente ne comptent pas. Entre le placement d'une entrée à cours limité ou stop et son exécution, ONMARKET reste faux, de sorte qu'un bloc non protégé peut mettre en file plusieurs ordres qui seront tous exécutés ensuite. Annulez ou comptez les ordres en attente dans la logique d'entrée.
- Aucune information de taille. Avec
CumulateOrdersactivé, ONMARKET reste vrai que la position porte un contrat ou vingt. Limitez le pyramidage avec COUNTOFPOSITION plutôt qu'avec le booléen. - Mauvaise portée. ONMARKET dans un indicateur ProBuilder ou un ProScreener ne compile pas. L'état de position n'existe que dans le code ProBacktest et ProOrder.
Instructions liées
LONGONMARKET, vrai tant qu'une position long est ouverte.SHORTONMARKET, vrai tant qu'une position short est ouverte.MARKET, exécute les ordres au prix du marché courant.BUY, ouvre une position long.SELLSHORT, ouvre une position short.COUNTOFPOSITION, la taille de la position ouverte.POSITIONPERF, la performance de la position ouverte.TRADEPRICE, le prix d'exécution d'un trade passé.