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éristiqueBloc EntryBloc Order
PyramidingRespecte 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ètreDescription
id
 Texte
 Obligatoire
Identifiant unique du bloc dans le flux de la stratégie.
order_id
 Texte
 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_id
 Texte
 Obligatoire
Identifiant du bloc à exécuter ensuite.
direction
 Texte
 Optionnel
Sens de l’ordre : "long" (achat) ou "short" (vente).
Valeur par défaut : "long"
qty
 Décimal ou Texte
 Optionnel
Quantité absolue (nombre de contrats/actions). Surcharge les paramètres globaux.
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. Sans stop, ce paramètre crée un ordre limite. Avec stop, il définit le prix limite d’un ordre stop-limit.
stop
 Dé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_name
 Texte
 Optionnel
Nom d’un groupe OCA partagé par plusieurs ordres distincts.
oca_type
 Texte
 Optionnel
Action appliquée aux autres ordres du même groupe OCA : "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.
disable_alert
 Boolé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_candles
 Entier
 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é :

  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 [[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 ».