Rejoignez-nous
ProBacktest/probacktest · proorder

LONGONMARKET

LONGONMARKET dans ProBacktest et ProOrder renvoie vrai tant qu'une position long est ouverte. Utilisé pour protéger les entrées, les sorties et la gestion du stop dans le code de stratégie.

Syntaxe

probuilder
LongOnMarket

Comment ça marche

LONGONMARKET ne prend aucun argument et renvoie vrai lorsque la stratégie détient actuellement une position long, quelle que soit sa taille. Il renvoie faux lorsque la stratégie est hors position et aussi lorsqu'elle est short ; l'équivalent côté short est SHORTONMARKET, et ONMARKET couvre les deux directions à la fois.

La valeur ne reflète que les ordres exécutés. Une entrée limite ou stop en attente qui n'a pas été exécutée laisse LONGONMARKET à false jusqu'à l'exécution. Avec CumulateOrders activé, plusieurs entrées long empilées se lisent toujours comme une seule valeur vraie ; utilisez COUNTOFPOSITION pour examiner la position size.

Les deux figures standard sont IF NOT LongOnMarket THEN ... ENDIF pour éviter les entrées long en double, et IF LongOnMarket THEN ... ENDIF pour que le code de sortie ou de gestion de stop ne s'exécute que pendant qu'un trade long est en cours.

Exemples

Exemple 1, Protection d'entrée contre les longs en double (ProBacktest)

probuilder
// Open a long only when no long position is already held
IF NOT LongOnMarket THEN
    BUY 1 LOT AT MARKET TomorrowOpen
ENDIF

Sans la protection, la stratégie soumettrait un nouvel ordre d'achat à chaque bar. C'est l'exemple de la référence officielle.

Exemple 2, Système de moyennes mobiles avec protections d'entrée et de sortie (ProOrder)

probuilder
DEFPARAM CumulateOrders = false

fastMA = Average[20](close)
slowMA = Average[50](close)

// Enter long on a bullish cross, only when flat
IF NOT LongOnMarket AND fastMA CROSSES OVER slowMA THEN
  BUY 1 CONTRACT AT MARKET
ENDIF

// Exit the long on a bearish cross
IF LongOnMarket AND fastMA CROSSES UNDER slowMA THEN
  SELL AT MARKET
ENDIF

Chaque bloc est conditionné à l'état de la position, de sorte que les entrées ne se déclenchent que hors position et les sorties uniquement en position long.

Exemple 3, Gestion du stop limitée aux longs ouverts (ProOrder)

probuilder
// Promote the stop to breakeven after 15 points of open profit
IF LongOnMarket THEN
  IF close - tradeprice >= 15 * pointsize THEN
    SET STOP BREAKEVEN
  ENDIF
ENDIF

Les instructions de gestion de position comme SET STOP BREAKEVEN exigent une position ouverte, donc la protection LONGONMARKET évite les erreurs d'exécution hors position.

Erreurs et pièges courants

  • Supposer que faux signifie hors position. LONGONMARKET est false à la fois quand la stratégie est hors position et quand elle est short. Le code qui ne doit s'exécuter que lorsqu'aucune position d'aucune sorte n'est ouverte doit tester NOT OnMarket à la place.
  • Les ordres en attente ne comptent pas. Entre le placement d'une entrée à cours limité ou stop et son exécution, LONGONMARKET reste faux, de sorte qu'un bloc d'entrée non protégé peut empiler des ordres supplémentaires. LongTriggered aide à détecter le bar où une entrée long a été exécutée.
  • Aucune information de taille. L'indicateur booléen ne dit rien du nombre de contrats détenus. Une logique de pyramidage qui empile les entrées sous CumulateOrders a besoin de COUNTOFPOSITION pour limiter l'exposition.
  • Mauvaise portée. Coller des extraits de stratégie dans un indicateur y amène LONGONMARKET, et l'indicateur ne compile alors plus. L'état de position n'existe que dans ProBacktest et ProOrder.
  • ONMARKET, vrai tant qu'une position est ouverte, long ou short.
  • SHORTONMARKET, vrai tant qu'une position short est ouverte.
  • MARKET, exécute les ordres au prix du marché courant.
  • BUY, ouvre une position long.
  • SELL, clôture une position long.
  • LongTriggered, signale qu'un ordre d'entrée long a été exécuté.
  • COUNTOFPOSITION, la taille de la position ouverte.
  • TRADEPRICE, le prix d'exécution d'un trade passé.