Bracket orders from a TradingView alert: ticks, points, or dollars
Short answer
Add take_profit and stop_loss to the entry alert and Shifu rests both legs at the broker the moment the entry fills, one cancelling the other. Give them as prices, or — with "price": "{{close}}" in the message as the entry reference — as a distance in ticks (take_profit_ticks), points (take_profit_points) or dollars per contract (take_profit_usd), so one fixed message works on every trade. Add trail_distance to make the stop follow.
Updated: September 18, 2026
A bracket is the entry plus two resting exits: a take-profit limit above (for a long) and a stop below. Shifu places both at the broker as one group the instant the entry fills, and a fill on one cancels the other. The exit is already sitting at the broker, so it does not wait on TradingView, your chart, or your computer.
| Unit | Fields | Needs | Best for |
|---|---|---|---|
| Price | take_profit, stop_loss, trail_distance, trail_trigger | Nothing extra — the values are absolute prices. | Strategies that compute their own levels and can write them into the alert. |
| Ticks | take_profit_ticks, stop_loss_ticks, trail_distance_ticks, trail_trigger_ticks | "price": "{{close}}" in the message as the entry reference, and a supported contract. | One fixed message for every trade — “40 ticks” is the same number on every bar. |
| Points | take_profit_points, stop_loss_points | "price": "{{close}}" in the message. | Levels you think of in index points, such as 10 points on MNQ. |
| Dollars per contract | take_profit_usd, stop_loss_usd, trail_distance_usd, trail_trigger_usd | "price": "{{close}}" in the message, and a supported contract. | Risk you think of in money per contract; converted through the contract’s tick value. |
Distances are converted to prices as the alert arrives. The broker only ever sees prices. Dollars here are P&L per contract, not dollars of price.
{
"action": "buy",
"symbol": "MNQ1!",
"quantity": 1,
"price": "{{close}}",
"take_profit_ticks": 40,
"stop_loss_ticks": 20,
"time": "{{timenow}}"
}{
"action": "sell",
"symbol": "MNQ1!",
"quantity": 1,
"price": 18250.00,
"stop_loss": 18270.00,
"trail_distance": 8,
"trail_trigger": 12,
"time": "{{timenow}}"
}trail_distance turns the stop leg into a trailing stop at the broker; your initial stop still sits exactly where stop_loss put it, so your opening risk matches your plan. trail_trigger is how far price must move in your favour before the trail starts following — leave it out to trail from entry. It is honoured on Tradovate and Rithmic and simulated on paper.
Questions people ask
Which brokers rest the bracket at the broker?
Tradovate and Rithmic, both with a trailing stop and an arm-after trigger; on Tradovate it is the broker’s own trailing stop. Paper simulates all of it from your own alerts.
Can I send only a stop, with no take-profit?
Yes. Leave take_profit out and only the stop leg rests. Leave both out and there is no bracket at all — never send 0 as a placeholder.
What happens if I send ticks without a price?
The alert is refused with the reason. Distance-based legs need "price": "{{close}}" in the message as the entry reference so Shifu can turn the distance into a price.
Are dollars per contract or per position?
Per contract. take_profit_usd of 100 on two contracts is a $200 target for the position, converted through the contract’s tick value. An unknown contract is refused rather than guessed at.
