Order
[[order]] permet de placer un ordre d’achat (long) ou de vente (short) dit “brut”. Contrairement au bloc d’entrée classique, il n’intègre aucune intelligence de gestion de position et se contente d’exécuter l’instruction de volume demandée.
Enchaînement après un bloc Order
Un bloc [[order]] 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 [[order]] enchaîne vers le bloc suivant avec la clé wait_candles :
- Avec
wait_candles = 1, après un signal sur une bougie, le moteur attend la bougie suivante avant d’évaluer le bloc suivant, ce qui laisse le temps aux informations de position (position, prix moyen, etc.) d’être à jour. - Avec
wait_candles = 0, le bloc suivant est évalué sur la même bougie que le signal, ce qui rend l’enchaînement immédiat.
Par défaut, wait_candles vaut 1.
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.
Différences avec le bloc Entry
Bien que les deux blocs permettent d’ouvrir une position, le bloc Order se distingue par un comportement beaucoup plus permissif et manuel :
| Caractéristique | Bloc Entry | Bloc Order |
|---|---|---|
| Pyramiding | Respecte la limite globale. L’entrée est bloquée si le nombre max de positions est atteint. | Ignore la limite. Permet d’ajouter du volume même si la limite de pyramiding est dépassée. |
| Gestion du sens opposé | Renversement automatique : Clôture toute la position opposée avant d’ouvrir la nouvelle. | Réduction additive : Se contente de réduire la position opposée du montant demandé (ou d’inverser partiellement). |
| Usage recommandé | Recommandé pour 99% des stratégies. | Usage expert (gestion complexe de legs, hedging spécifique). |
Dans la plupart des cas, préférez [[Entry]] : il respecte le pyramiding et gère proprement les inversions. [[order]] est réservé aux usages avancés et demande de contrôler précisément l’exposition.
Type d’ordre
Le type d’ordre dépend de la présence de limit et de stop. Sans limit ni stop, le bloc soumet un ordre au marché. Avec limit seul, il soumet un ordre limite. Avec stop seul, il soumet un ordre stop marché. Avec limit et stop, il soumet un ordre stop-limit. Le niveau stop sert alors de déclencheur. Une fois ce niveau atteint, l’ordre devient un ordre limite au prix limit.
Déclaration du bloc
Une stratégie peut contenir plusieurs blocs [[order]].
Exemples
Ordre minimal
Cet exemple place un ordre long simple avec une quantité fixe, puis enchaîne vers monitor_exit.
[[order]]
id = "buy_order_1"
order_id = "buy_1"
direction = "long"
qty = 1
next_block_id = "monitor_exit"Ordre stop-limit
Cet exemple place un ordre stop-limit long. Lorsque le marché atteint stop, Whale-E active un ordre limite au prix limit, puis la stratégie passe au bloc next_step.
[[order]]
id = "breakout_long"
order_id = "long_bk"
direction = "long"
stop = "high + 10"
limit = "high + 10"
next_block_id = "next_step"Groupe OCA entre plusieurs ordres
Dans cet exemple, les deux blocs [[order]] créent deux ordres distincts qui appartiennent au même groupe OCA. Si l’un est exécuté, l’autre est annulé. Le groupe OCA relie donc plusieurs ordres distincts. Il ne correspond pas à l’association entre limit et stop à l’intérieur d’un même bloc.
[[order]]
id = "breakout_long"
order_id = "long_bk"
direction = "long"
stop = "high + 10"
oca_name = "breakout_grp"
oca_type = "cancel"
next_block_id = "next_step"
[[order]]
id = "breakout_short"
order_id = "short_bk"
direction = "short"
stop = "low - 10"
oca_name = "breakout_grp"
oca_type = "cancel"
next_block_id = "next_step"Paramètres du bloc
| Paramètre | Description |
|---|---|
idTexte Obligatoire | Identifiant unique du bloc dans le flux de la stratégie. |
order_idTexte Obligatoire | Identifiant propre à cet ordre. Il sert à identifier les ordres émis par ce bloc, notamment lorsqu’un bloc [[cancel]] doit annuler les ordres en attente correspondants. Il n’est pas utilisé par [[close]]. Il n’est pas non plus utilisé par le filtre from_entry de [[exit]], qui ne peut référencer qu’une entrée issue d’un bloc [[entry]]. Sans from_entry, [[exit]] s’applique à la position ouverte sans distinguer si elle provient de [[entry]] ou de [[order]]. |
next_block_idTexte Obligatoire | Identifiant du bloc à exécuter ensuite. |
directionTexte Optionnel | Sens de l’ordre : "long" (achat) ou "short" (vente).Valeur par défaut : "long" |
qtyDécimal ou Texte Optionnel | Quantité absolue (nombre de contrats/actions). Surcharge les paramètres globaux. |
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. Sans stop, ce paramètre crée un ordre limite. Avec stop, il définit le prix limite d’un ordre stop-limit. |
stopDécimal ou Texte Optionnel | Prix stop de l’ordre. Sans limit, ce paramètre crée un ordre stop marché. Avec limit, il définit le prix de déclenchement d’un ordre stop-limit. |
oca_nameTexte Optionnel | Nom d’un groupe OCA partagé par plusieurs ordres distincts. |
oca_typeTexte Optionnel | Action appliquée aux autres ordres du même groupe OCA : "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. |
disable_alertBooléen Optionnel | Ce paramètre n’a aucun effet sur le backtest. Il sert uniquement à définir le paramètre Pine Script disable_alert.Valeur par défaut : false |
wait_candlesEntier Optionnel | Nombre de bougies a attendre avant de passer au bloc suivant. Ce delai ne change pas l’execution des ordres. Valeur par defaut : 1 |
Priorité du sizing local
Dans [[order]], 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 [[order]], qty_percent signifie toujours pourcentage d’équité.
Quand qty_percent est présent, [[order]] est traité comme un ordre en percent_of_equity, même si [backtest].default_qty_type vaut fixed ou cash.
Pour les détails sur le prix de sizing et le prix d’exécution, reportez-vous à la page « Marges et leviers ».