Entry

[[entry]] crée un ordre pour ouvrir une position ou compléter une position existante. Si un ordre non exécuté existe déjà avec le même id, un nouvel appel ne crée pas un second ordre : il met à jour l’ordre associé à cet id.

Pour la logique globale de sizing, les valeurs par défaut et les multiplicateurs, reportez-vous à la page « Marges et leviers ». Cette page décrit seulement la sémantique propre au bloc [[entry]].

Type d’ordre

Le type d’ordre dépend de la présence des paramètres limit et stop. Sans limit ni stop, la commande crée un ordre au marché, exécuté à la prochaine mise à jour de prix disponible. Avec limit seul, elle place un ordre limite, exécuté quand le marché atteint limit ou un meilleur prix (plus bas pour un achat, plus haut pour une vente). Avec stop seul, elle place un ordre stop, exécuté après atteinte de stop, avec une exécution possible à un prix moins favorable si le marché continue (plus haut pour un achat, plus bas pour une vente). Avec limit et stop, elle crée un stop-limit : lorsque le marché atteint stop dans le sens du déclenchement, un ordre limite au prix limit est alors émis.

Effet du paramètre pyramiding

Les ordres issus de ce bloc, contrairement à ceux produits par le bloc [[order]], dépendent du paramètre pyramiding défini dans [backtest]. Le paramètre pyramiding fixe le nombre maximal d’entrées simultanées autorisées pour une position. Avec pyramiding = 3, la stratégie peut maintenir jusqu’à trois entrées ouvertes, et la commande ne peut pas ouvrir d’entrées supplémentaires tant qu’au moins une entrée existante n’est pas clôturée.

Inversion automatique de position

Par défaut, si un ordre est exécuté dans le sens opposé à la position en cours, la stratégie inverse la position.

Enchaînement après un bloc [[entry]]

Un bloc [[entry]] déclenche une demande d’ordre. Cette demande est ensuite traitée par le moteur dans son pipeline d’ordres, puis l’état de la position est mis à jour au cycle de bougie suivant. Selon le moment où la stratégie évalue le bloc suivant, certaines informations de position peuvent donc ne pas être encore à jour.

Vous contrôlez le moment où le bloc [[entry]] enchaîne vers le bloc suivant avec la clé wait_candles :

  • Avec wait_candles = 1, après un signal d’entrée sur une bougie, le moteur attend la bougie suivante avant d’évaluer le bloc suivant. L’enchaînement est donc décalé au cycle suivant, ce qui correspond au moment où l’état de la position a été actualisé par le moteur, notamment la position elle‑même, le prix moyen et les autres champs dérivés.
  • Avec wait_candles = 0, le bloc suivant est évalué sur la même bougie que le signal d’entrée. L’enchaînement devient immédiat, sans décalage d’un cycle.

Dans tous les cas, wait_candles ne change pas l’exécution de l’ordre. Il ne fait que décaler le moment où la stratégie passe au bloc suivant.

Déclaration du bloc

Une stratégie peut contenir plusieurs blocs [[entry]]. Chaque bloc indique le sens de la position et, éventuellement, la quantité à engager. Chaque bloc doit aussi définir un order_id. Cette valeur identifie l’entrée du point de vue du moteur. Elle est notamment utilisée par les blocs [[close]], [[cancel]] et par le filtre from_entry de [[exit]].

Exemples

Long avec une quantité en pourcentage d’équité

Cet exemple ouvre une position longue en engageant 50 % de l’équité, puis passe au bloc set_take_profit.

[[entry]]
id            = "open_long"
order_id      = "open_long"
direction     = "long"
qty_percent   = 50
next_block_id = "set_take_profit"

Short avec une quantité fixe

Cet exemple ouvre une position short avec une quantité fixe de 2 unités, puis passe au bloc monitor_exit.

[[entry]]
id            = "open_short"
order_id      = "open_short"
direction     = "short"
qty           = 2
next_block_id = "monitor_exit"

Long avec un ordre stop-limit

Cet exemple place un ordre stop-limit long : lorsque le marché atteint stop, un ordre limite au prix limit est alors émis, puis la stratégie passe au bloc confirm_entry. stop et limit sont des prix absolus (unités de prix du symbole). Exemple : sur BTCUSDT, si high = 100000, alors high + 10 vaut 100010 (+10 USDT).

[[entry]]
id            = "open_long_stop_limit"
order_id      = "open_long_stop_limit"
direction     = "long"
qty_percent   = 50
stop          = "high + 10"
limit         = "high + 10"
next_block_id = "confirm_entry"

Long avec une quantité en pourcentage et un délai nul

Cet exemple ouvre une position longue en engageant 60 % de l’équité et passe immédiatement au bloc confirm_entry. Avec wait_candles = 0, le bloc suivant est évalué sur la même bougie que le signal d’entrée, sans attendre la bougie suivante. L’ordre est exécuté normalement, mais l’état de position peut ne pas être encore actualisé lors de l’évaluation du bloc suivant.

[[entry]]
id            = "open_long_fast"
order_id      = "open_long_fast"
direction     = "long"
qty_percent   = 60
wait_candles  = 0
next_block_id = "confirm_entry"

Paramètres du bloc

ParamètreDescription
id
 Texte
 Obligatoire
Identifiant unique du bloc.
order_id
 Texte
 Obligatoire
Identifiant logique de l’entrée pour le moteur. Cette valeur sert à identifier les ordres émis par ce bloc et à rattacher cette entrée aux blocs [[close]], [[cancel]] et au filtre from_entry de [[exit]].
next_block_id
 Texte
 Obligatoire
Identifiant du bloc à exécuter ensuite.
direction
 Texte
 Optionnel
Sens de la position : "long" ou "short".
Valeur par défaut : "long"
qty
 Décimal ou Texte
 Optionnel
Quantité absolue. Nombre de contrats, d’actions ou d’unités à échanger. Ce paramètre surcharge toujours les réglages globaux de la stratégie et impose un volume fixe pour cet ordre précis.
qty_percent
 Décimal ou Texte
 Optionnel
Pourcentage d’équité. Ce paramètre remplace le sizing global pour cet ordre. Note : qty et qty_percent ne peuvent pas être utilisés dans le même bloc.
limit
 Décimal ou Texte
 Optionnel
Prix limite de l’ordre. Fournissez un prix fixe ou une expression (chaîne). Sans stop, le bloc correspond à un ordre limite pur.
stop
 Décimal ou Texte
 Optionnel
Prix stop de l’ordre. Fournissez un prix fixe ou une expression (chaîne). Sans limit, le bloc correspond à un ordre stop marché. Lorsque stop et limit sont tous deux présents, le bloc représente un ordre stop-limit.
oca_name
 Texte
 Optionnel
Nom du groupe OCA auquel rattacher l’ordre créé par ce bloc. Les ordres qui partagent ce nom appartiennent au même groupe OCA.
oca_type
 Texte
 Optionnel
Type d’action OCA associé à oca_name : "cancel", "reduce" ou "none".
Valeur par défaut : "cancel"
comment
 Texte
 Optionnel
Renseigne la colonne Signal dans la liste des trades si la valeur est fournie ; sinon order_id est utilisé. Aussi exporté comme comment Pine Script. Aucun impact sur les calculs de backtest.
alert_message
 Texte
 Optionnel
Ce paramètre n’a aucun effet sur le backtest. Il sert uniquement à définir le paramètre Pine Script alert_message.
wait_candles
 Entier
 Optionnel
Nombre de bougies à attendre avant de passer au bloc suivant. Utilisez 0 pour désactiver le délai. Ce délai ne change pas l’exécution des ordres.
Valeur par défaut : 1

Priorité du sizing local

Dans [[entry]], le moteur applique toujours la même priorité :

  1. si qty est défini, cette quantité absolue est utilisée ;
  2. sinon, si qty_percent est défini, ce pourcentage d’équité est utilisé ;
  3. sinon, le moteur revient à la configuration globale du bloc [backtest].

Autrement dit, qty et qty_percent rendent le sizing global inactif pour cet ordre.

Signification de qty_percent

Dans [[entry]], qty_percent signifie toujours pourcentage d’équité.

Ce point reste vrai au niveau du runtime, même si [backtest].default_qty_type vaut fixed ou cash. Dans ce cas, qty_percent force un comportement de type pourcentage d’équité pour cet ordre uniquement.

Prix de sizing et prix d’exécution

Quand le sizing d’entrée dépend d’un budget ou d’un prix de référence, le moteur peut utiliser un prix de sizing distinct du prix de fill réel.

Ce point est surtout important pour les ordres non triviaux, notamment stop, limit ou stop-limit :

  • la quantité peut être calculée à partir d’un prix de sizing
  • l’ordre est ensuite exécuté au prix réel
  • le notionnel final peut donc différer de l’estimation initiale.

Pour la règle générale sur le prix de sizing et le prix d’exécution, reportez-vous à la page « Marges et leviers ».

Important (Grid Search) : L’utilisation de qty ou qty_percent dans un bloc rend le volume de cet ordre statique du point de vue des paramètres globaux. Cet ordre ne sera donc pas affecté par default_qty_value, long_size_multiplier ou short_size_multiplier pendant une grid-search.