Understanding GTT Orders on Upstox: Mechanics and Working

Introduction

Good-till-triggered (GTT) orders are an effective tool for automating entry and exit conditions without looking at the market all day. Unlike regular orders, which execute immediately, GTT orders wait for specific pricing conditions to be met before triggering. This makes them important for executing disciplined trading strategies. This article focuses on the mechanics and workings of GTT orders.

The Structure of GTT Orders

A GTT order consists of three legs:

  • Primary Leg (Entry): This starts your trade
  • Stop-loss (SL) Leg: This closes your trade if prices move against you
  • Target Leg: This closes your trade if prices move in your favour

The key aspect to understand is that these legs work together as a unit. When you place a GTT order, you’re essentially creating a mini-strategy that handles both your entry and exit conditions automatically.

How are GTT Orders executed

For any GTT leg to fully execute, the price must arrive at or cross your specified levels twice:

1. First price arrival: When your trigger condition is met, the GTT system triggers and sends a limit order to the exchange
2. Second price arrival: When the last traded price reaches your limit price again for the order to execute at the exchange. Limit orders are fired as market orders are not allowed due to regulatory reasons.

This two-step process is crucial to understand because it means your order won’t execute completely in a single instance.

How the Primary Leg Works

The primary leg has three possible trigger conditions:

  • Price is above: Your order triggers when the market price rises above your specified trigger price
  • Price is below: Your order triggers when the market price falls below your specified trigger price
  • Immediate: A Limit order is sent to the exchange right away without waiting for a price condition

When the primary leg’s trigger condition is met, Upstox’s GTT system recognises this event and sends a limit order to the exchange at your trigger price. However, this doesn’t guarantee immediate execution. The limit order will only execute when the last traded price reaches the limit price again.

Example:

Let’s say you want to buy ABC stock when it rises above ₹500, believing it will continue to climb after breaking this resistance level:

  • You set a GTT order with ā€œPrice is aboveā€ condition
  • Trigger price: ₹500

The execution process works as follows: ABC stock’s price rises above ₹500, triggering the GTT system to send a limit buy order at ₹500 to the exchange. The last traded price needs to be at or below ₹500 again for your limit order to execute.

How the Exit Legs Work (Stop-Loss or Target)

Your exit legs are in an inactive state until the primary leg is completely executed. Once your primary leg executes, both the stop-loss and target legs become active (Scheduled). Whichever condition is met first will trigger, and the other leg will be automatically cancelled. The same two-step execution process applies to exit legs as well.

Example:

Let’s continue with our ABC stock example. Say your primary leg was completed, and you bought at ₹500:

  • Stop-Loss trigger: ₹480 (to limit losses)
  • Target trigger: ₹550 (to lock in profits)

If ABC’s price falls to ₹480, triggering your stop-loss:

  • The GTT system recognises that the price has reached your stop-loss trigger of ₹480
  • The system sends a limit sell order at ₹480 (or at ₹465.60 if you’ve set a 3% MPP)

Similarly, if the price rises to ₹550, triggering your target:

  • The GTT system recognises that the price has reached your target of ₹550
  • The system sends a limit sell order at ₹550

Market Price Protection (MPP): A Safety Net

Market Price Protection (MPP) is a feature designed to improve the execution probability of your stop-loss orders. It creates a price range within which your limit order can execute rather than at a single price point. MPP is expressed as a percentage and applies to the stop-loss leg of your GTT order.

How MPP Works

When you set an MPP value, you’re essentially creating a buffer zone between your stop-loss trigger price and the actual limit price of the order:

  • Without MPP: If your stop-loss trigger is ₹100, your limit order would also be at ₹100
  • With MPP of 3%: If your stop-loss trigger is ₹100, your limit order would be at ₹97 (for a sell order)

This 3% buffer increases the likelihood of your stop-loss order executing, even in volatile markets where prices can jump quickly.

Example:

Let’s say you have a long position in XYZ stock and set a GTT stop-loss at ₹100 with an MPP of 3%:

  • Stop-loss trigger price: ₹100
  • Limit price with MPP: ₹97 (calculated as ₹100 - 3%)

If XYZ’s price falls to ₹100, starting your stop-loss, a limit sell order will go at ₹97. This means your order can be completed at any price between ₹97 and ₹100, giving you better chances of exiting the position.

How Long GTT Orders Last

GTT orders have a maximum validity of 365 days. They remain active until one of the following occurs:

  • They are triggered by meeting price conditions
  • They are manually cancelled by the user
  • The contract expires (for F&O instruments)
  • The 365-day validity period ends

Unlike regular-day orders that expire at the end of the trading session, GTT orders persist across multiple trading days within these validity constraints.

Modification of GTT Orders

GTT orders offer flexibility for modifications at different stages:

Before primary leg execution:

  • You can modify the trigger prices of all legs (primary, stop-loss, and target)
  • All aspects of the GTT order can be adjusted, or the entire order can be cancelled
  • You can add new or remove stop-loss or target legs if they were added initially

After primary leg execution:

  • You can modify the trigger prices of the stop-loss and target legs
  • You cannot add new or remove stop-loss or target legs if they were added initially
  • The primary leg can no longer be modified as it has already been executed

This flexibility allows you to adjust your exit strategy as market conditions change.

Conclusion

Now that you understand the mechanics of GTT orders, there are several important considerations and best practices that can help you use them effectively. We’ll explore these topics in our next post, which will cover scenarios that could impact execution and strategies for maximising their effectiveness in your trading plan.

Feel free to leave a comment below if you have any specific questions about GTT orders. If you experience any issues with their execution, don’t hesitate to contact Upstox customer support for assistance.

1 Like

Please share example with below condition.

Market is running at 80. I have placed GTT order with Immediate condition with trigger price 90.

  1. What will happen in this case?
  2. At what price my order will get filled?
  3. When will order gets trigger? when market reaches 90 or immediate when i place order when market is running at 80?

Thank you for your question @Jagdish_j_ptl

Assuming this is a buy order:

  1. The order will be sent to the exchange immediately at ₹90.
  2. It will be executed at the best available market price, up to ₹90. If the current market price is ₹80, the order will likely execute at ₹80.
  3. Since the ā€œImmediateā€ condition was selected, the order triggers instantly upon placement, regardless of the market price.

Hope this clarifies your doubt. Let us know if you need further assistance.

Thanks for the explanation. I was looking for this only. But my suggestion is that add one more condition or make this as send order to exchange when market price is near 3% of trigger price. i.e. when market is running at 87-88. So that we get entry at our specified price before it cross it.

Hi @Samit

Please explain me the actual use of IMMEDIATE condition.

How it is different than Below condition? As you can’t use IMMEDIATE condition if you want to buy above CMP, So IMMEDIATE and BELOW both condition works same. But BELOW condition has benefit that you can place anytime, it will scheduled till expiry(i.e. 365 days) where as IMMEDIATE condition works only in market hours and GTT will be cancelled after market closes.

What is the benefit of using IMMEDIATE condition over other conditions? I would prefer to use BELOW condition.

We need option to buy at specific price we have mentioned regardless of Current Market Price. For example. we need to buy at 95 when market is running at 80.

I know now you will say that use ABOVE condition, drawback of above condition is that it will send order only after when CMP crosses 95. So what will happen price jumps from 93 to 98, then GTT order will place order at 95, then market will move further to 120 without touching 95 so now price will fall to 95 and keep falling till our stoploss.

So what option do you have to protect from this scenario? We need option that will work like IOC something like if price jumps over price and moves certain percent or points then order should be cancelled automatically.

Is there anyone who is willing to reply to this post? Even after 22 days of waiting, we are not getting any reply.

@Samit @Sachin_Khodpia @MohitGolecha @mike

@Jagdish_j_ptl -
I will wait for the other PMs to reply. However, I will mention that I’m becoming frustrated by your tone and antagonizing approach at commenting.

For instance, your comment above insinuates that you posted something and that we aren’t doing anything. What you fail to mention is that since this post, there was a 1+ hour call between you, 2 PMs, the community manager, and myself where you discussed your questions and concerns. From what I understand, there was also another follow-up conversation with Sachin to better understand your needs as a trader. Perhaps everyone thought that either this question was addressed or was no longer an issue.

In terms of antagonizing, there are several other posts where you aren’t the impacted customer where you make flippant, derogatory comments. In one such example yesterday, we could have quickly cleared this up with the customer but your comments unnecessarily inflamed the situation.

While I referenced the 1+ hour call, this was only one of many calls that we’ve had with you. Given how direct / hands-on we have been with you, I would expect some level of reciprocal respect.

1 Like

I am sorry if you have been hurted by any of my comments. My intention was not to blame you or any of your team member. But only reading some of my comments can frustrates you, imagine how much frustration I would have or any other user who is daily facing financial losses or inconvenience while trading which is because the issue or bug mentioned to Upstox is not even fixed after year. Anyway leave it, we have already discussed it on call so I hope it will be fixed soon.

I was just asking the usage of IMMEDIATE condition where we can use it? Because I couldn’t find any valid scenario to use it. And why ā€œATā€ condition is not possible. Diring call, I have mentioned GTT order issue for buying above price. But for IMMEDIATE condition we have not discussed anything as far as I remember. There might be some misunderstanding.

You might feel my tone harder but reality is that bugs we are reporting must be prioritize to improve Upstox. But what we are getting is same reply like ā€œwe have forwarded to concern team or we are checking itā€. And after that days are being passed but no one follow ups that are you still facing issue or is it fixed? After some days when someone posts same issue we get to know that issue is still being working on.

I hope you are also waiting for your teams to reply to this like I am waiting since last 30 days. Don’t take me wrong but your team can like your comment but can’t reply to the question. This shows you are ignoring this post or you are still confused what kind of explanation I am expecting therefore your teams are not able to reply to it.

Let me clear it for you. During the call we have discussed regarding addition of ā€œATā€ condition in GTT order API that will place order with 1% MPP from the trigger price. There was no discussion regarding IMMEDIATE condition.

I just want to know the the actual use of IMMEDIATE condition.

How it is different than BELOW condition? As you can’t use IMMEDIATE condition if you want to buy above CMP, So IMMEDIATE and BELOW both condition works same. But BELOW condition has benefit that you can place anytime, it will scheduled till expiry(i.e. 365 days) where as IMMEDIATE condition works only in market hours and GTT will be cancelled after market closes, even it will blocked required margin till the end of day.

What is the benefit of using IMMEDIATE condition over other conditions? Anyone would prefer to use BELOW condition.

Even why there is a need of these conditions? Can’t you make it as simple as mentioning only trigger price at which we need to execute buy/sell scrip? Whenever price hit our trigger price, you just place order by adding 1%MPP to trigger price. This is like we are creating calculator where we press 5 + 10 and also tell whether we want to add or subtract. Then what is the use of calculator?

Your software already knows current market price so you can auto decide whether user intend to buy ABOVE or BELOW, same thing you have done in chart360 where you are auto deciding this condition, then same can be done in API or in WEB platform from where we are placing GTT orders.

Hi @Jagdish_j_ptl

Thank you for sharing your detailed feedback and for patiently waiting for a response. We truly appreciate the time you’ve taken to explain your perspective—it helps us improve our platform.

To clarify your query:

  • Immediate condition: When you select this option, the order is immediately sent to the exchange as a limit order without waiting for any trigger in the Upstox GTT system. This is particularly useful for users who want to enter a trade at a specific price as quickly as possible. Since the order is placed directly at the exchange, its validity is for the day (as per exchange norms).

  • Above/Below conditions: These are scheduled in the Upstox GTT system and remain valid for up to 365 days. They only move to the exchange after your trigger price is hit. This means the price must match twice (trigger + execution), which sometimes can cause orders to remain pending at the exchange if the price condition isn’t met again.

So, the key difference is that Immediate = faster execution with same-day validity, while Above/Below = scheduled trigger with long-term validity.

Regarding your suggestion on simplifying the conditions and letting the system auto-decide based on the trigger price—thank you for sharing this idea. We’ll review its feasibility internally, as our aim is always to make the experience as intuitive as possible.

Lastly, on Market Price Protection (MPP)—we’ve now enabled MPP for all legs of GTT orders, and the update will be rolled out soon. Once triggered, the order will include a predefined buffer based on the trigger price to improve execution.

Your inputs are valuable to us, and we’ll keep you updated on any enhancements.

Thank you for being an engaged part of our community!

1 Like

Thanks @Samit for the explanation. These details I already know and Let me ask you one question, As you can not use IMMEDIATE condition when you want to buy above the CMP, People here are making losses because what they think IMMEDIATE condition can be use to buy at specific price so they enter 120 as trigger price when CMP is 100, as your system sends order instantly to the exchange, order gets executed at 100 as which was not user’s intention to buy at that price. So They can enter only buy when they want to buy below CMP.

So You can use immediate condition to buy below CMP only then it is working same as BELOW condition.

Whereas BELOW has more benefit like

  1. Your fund did not get blocked as it will only trigger when price condition is met. For example if you can 20000 fund available in your account, you can place 100+ orders of 20000 and it can be executed one by one unless you are run out of available fund. So if one order is completed buy and sell, fund will be available for next trade. But in case of immediate condition you can place one order and then you need to add extra fund or need to wait unless your trade closes or cancels.
  2. Immediate condition will cancel order after end of day but BELOW will remain scheduled till one year, so this is also beneficial for BELOW condition.
  3. In both case you will get better price at execution, so I didn’t find any benefit of using IMMEDIATE condition where it can be really useful.

In my view immediate condition will only be useful if you allow user to buy at their specific price with MPP buffer. For example CMP is 100, you want to buy at 120 then you wait for CMP to reach at 120 and send order to exchange with 121.2 (including 1% MPP) and with IOC validity which means if order is not executed within 120 to 121.2 then cancel order instantly if it goes to pending state and for below condition CMP is 150 and user wants to buy at 120 then do the same thing send order at 121.2 when price reaches at 120 this will auto executed at best available price i.e.120 which is already working in current implementation.

Thanks @Jagdish_j_ptl for sharing your thoughts in detail.

Different traders use GTT in different ways. When we built this feature, large number of users specifically wanted an option to place a limit order right away at their chosen price, without waiting for a trigger. That’s exactly why the Immediate condition exists.

For cases where you want to buy above or below CMP and schedule the order for a longer duration, the Above and Below conditions work best.

On MPP (Market Price Protection)—we will be adding MPP to all GTT trigger orders to improve execution.

Thanks for your clarification. MPP will solve my issue of buying above price.

For API, I want to give you some suggestions,

  1. For GTT Order add option to set expiry time by our own default is one year that can be customize by API end then it will be good option.

  2. Even need Validity Day or IOC for pending orders when entry leg is changed from scheduled to pending state it should wait for day to fill or cancelled immediately if not filled withing sometime.

  3. Currently there is no option to change MPP in stoploss leg, it is currently set to 3% that is big gap in many case. If we can specify MPP while placing order it will be more accurate.