Rejoignez-nous
ProBacktest/probacktest · proorder

NextBarOpen

NextBarOpen est un modificateur ProBacktest et ProOrder obsolète qui reportait les ordres à l'ouverture du bar suivant, ce qui est désormais le comportement par défaut de tout ordre au marché.

Syntaxe

probuilder
AT MARKET NextBarOpen

Comment ça marche

Dans les premières versions de la plateforme, NextBarOpen s'ajoutait à un ordre au marché pour indiquer explicitement que l'ordre devait s'exécuter au prix d'ouverture du bar suivant plutôt qu'au prix courant. L'intention était de modéliser une exécution réaliste : un signal calculé sur un bar terminé ne peut être négocié qu'une fois le bar suivant commencé.

Ce modèle d'exécution est devenu par la suite le seul. Le code de la stratégie est évalué une fois par bar, à la clôture, et tout ordre au marché généré pendant cette évaluation est transmis immédiatement après, exécuté à l'ouverture du bar suivant. Le comportement NextBarOpen servait à demander est désormais le comportement par défaut inconditionnel, ce qui rend le modificateur redondant.

La position officielle est que l'instruction n'est plus valide et ne sert à rien. Le code existant qui porte le modificateur documente une intention que le moteur garantit déjà, et le nouveau code ne doit jamais l'inclure. Lorsque le mot-clé apparaît dans d'anciennes stratégies trouvées dans des archives ou sur des forums, il peut être supprimé sans modifier le comportement de la stratégie dans le modèle d'exécution actuel.

NextBarOpen ne doit pas être confondu avec TomorrowOpen, qui est une instruction distincte liée au timing des ordres sur bars journaliers et reste un mot-clé séparé.

Exemples

Exemple 1, Entrée héritée avec le modificateur (ProBacktest)

probuilder
// legacy code: NextBarOpen is redundant under the current engine
IF NOT ONMARKET THEN
  BUY 2 CONTRACTS AT MARKET NextBarOpen
ENDIF

L'ordre est exécuté à l'ouverture du bar suivant, avec ou sans le modificateur. C'est la forme que l'on trouve dans les stratégies publiées plus anciennes.

Exemple 2, Entrée short héritée (ProOrder)

probuilder
short = close < Average[100](close)

// older strategies attached NextBarOpen to short entries as well
IF NOT ShortOnMarket AND short THEN
  SELLSHORT 1 CONTRACT AT MARKET NextBarOpen
ENDIF

La même structure du côté short. Supprimer le mot-clé final laisse l'exécution identique, le short s'ouvre au prix d'ouverture du bar suivant dans les deux cas.

Exemple 3, Migration d'ancien code (ProBacktest)

probuilder
// before: BUY 2 CONTRACTS AT MARKET NextBarOpen
// after, same behavior:
IF NOT ONMARKET THEN
  BUY 2 CONTRACTS AT MARKET
ENDIF

La forme modernisée. Supprimer NextBarOpen d'une ancienne stratégie est un simple nettoyage, aucune compensation ailleurs dans le code n'est nécessaire.

Erreurs et pièges courants

  • S'attendre à une différence de temporisation. Ajouter ou supprimer NextBarOpen ne change rien. Tous les ordres au marché générés à la clôture d'un bar s'exécutent à l'ouverture du bar suivant. Les comparaisons de code qui attribuent des résultats différents à ce modificateur se trompent de variable.
  • Rejet possible par les compilateurs actuels. L'instruction est documentée comme n'étant plus valide. Selon la version de la plateforme, un code qui la contient peut ne pas compiler, la migration sûre consiste donc à supprimer le mot-clé plutôt qu'à le conserver par nostalgie.
  • Confusion avec TomorrowOpen. Les noms se ressemblent mais les instructions ne sont pas interchangeables. TomorrowOpen concerne le placement d'ordres sur bars journalières et reste un mot-clé actif, NextBarOpen est un modificateur mort.
  • Supposer qu'une exécution sur le même bar existe. Supprimer le modificateur n'active pas les exécutions sur le même bar. Aucun type d'ordre ne s'exécute à la clôture du bar de signal, le modèle d'exécution à l'ouverture du bar suivant est inhérent au moteur.
  • TomorrowOpen, instruction de temporisation des ordres pour les bars journaliers.
  • MARKET, exécution immédiate au prix du marché courant.
  • BUY, ouvre une position long ou la renforce.
  • SELL, clôture tout ou partie d'une position long.
  • SELLSHORT, ouvre une position short ou la renforce.
  • EXITSHORT, clôture tout ou partie d'une position short.
  • LIMIT, ordre en attente exécuté à un prix défini ou meilleur.
  • STOP, ordre en attente déclenché dès que le prix atteint un niveau.