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ètre | Description |
|---|---|
idTexte Obligatoire | Identifiant unique du bloc. |
order_idTexte 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_idTexte Obligatoire | Identifiant du bloc à exécuter ensuite. |
directionTexte Optionnel | Sens de la position : "long" ou "short".Valeur par défaut : "long" |
qtyDé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_percentDé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. |
limitDé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. |
stopDé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_nameTexte 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_typeTexte Optionnel | Type d’action OCA associé à oca_name : "cancel", "reduce" ou "none".Valeur par défaut : "cancel" |
commentTexte 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_messageTexte Optionnel | Ce paramètre n’a aucun effet sur le backtest. Il sert uniquement à définir le paramètre Pine Script alert_message. |
wait_candlesEntier 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é :
- si
qtyest défini, cette quantité absolue est utilisée ; - sinon, si
qty_percentest défini, ce pourcentage d’équité est utilisé ; - 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
qtyouqty_percentdans un bloc rend le volume de cet ordre statique du point de vue des paramètres globaux. Cet ordre ne sera donc pas affecté pardefault_qty_value,long_size_multiplieroushort_size_multiplierpendant une grid-search.