Hope you are doing well. As you know, Iceberg Orders, ATO and OCO GTT Orders, each has a capacity to execute multiple orders at a time via order slicing or baskets. I have following questions regarding these features in terms of how to use them while trading with huge quantities:
If these features are used via API client, order slicing will be applicable and taken care by Zerodha wherever needed - Yes? If not, please explain.
If, for example, Iceberg order (or ATO or OCO GTT) is used with NIFTY Options with large quantity that would exceed maximum quantity per order limit of NSE (1800/Order or 24 Lots/Order) and order placement rate limit (10/second or 200/minute) - In this case, for orders placement rate limits, is this considered as 1order or will be considered as many orders as Iceberg order legs? I would like to know how rate limit will be calculated in this case?
Also, considering above example of iceberg order, I am assuming Zerodha will take care of order placement rate limits and maximum quantity/order limit of NSE using order slicing automatically while executing these order types - please correct me if I am wrong.
While using ATO, we have to create basket or orders. In this case, we need to make sure we create orders with quantity that does not exceed NSE limit (1800/order in case of NIFTY Options), or we can just create 1 order with required quantity and Zerodha will deal with it using order slicing? Also, rate limit will be managed as well?
These are amazing features that could be used to minimise slippage and tackle maximum quantity per order limits and order placement rate limits. Your detailed response will clarify exactly how we should take advantage of them while trading with huge quantities.
If these features are used via API client, order slicing will be applicable and taken care by Zerodha wherever needed - Yes? If not, please explain.
It is handled by the Kite backend.
If, for example, Iceberg order (or ATO or OCO GTT) is used with NIFTY Options with large quantity that would exceed maximum quantity per order limit of NSE (1800/Order or 24 Lots/Order) and order placement rate limit (10/second or 200/minute) - In this case, for orders placement rate limits, is this considered as 1order or will be considered as many orders as Iceberg order legs? I would like to know how rate limit will be calculated in this case?
It is considered as 1 request only for 10/second or 200/minute rate limit but for the Zerodha account level limit of 3000 orders per day will include the count of all sub orders as well.
Also, considering above example of iceberg order, I am assuming Zerodha will take care of order placement rate limits and maximum quantity/order limit of NSE using order slicing automatically while executing these order types - please correct me if I am wrong.
That is the whole point of order slicing and iceberg orders. It will be taken care of by the Kite backend.
While using ATO, we have to create basket or orders. In this case, we need to make sure we create orders with quantity that does not exceed NSE limit (1800/order in case of NIFTY Options), or we can just create 1 order with required quantity and Zerodha will deal with it using order slicing? Also, rate limit will be managed as well?
You just need to add the order to the basket with required quantity and send params just like how you send while placing a single order. Like for order quantity above freeze quantity, you need to send your desired quantity but make sure to send auto_slice value as true. Kite backend will take care of order slicing for you. But iceberg orders are not allowed in ATO AFAIK.
Thank you for your detailed response. Much appreciated. It clarifies all my queries.
Just one new thing I wanted to ask: I understand this 3000 orders/day limit is from Zerodha, and not from SEBI or NSE. Is there any provision to increase this limit on an Account/API Key basis?
If you hit the limit and not able to exit your position then you may call up support and ask RMS team to increase your order limit for the day. We're working on simplifying this.
Thank you for your response. It is helpful. Yes, some sort of process to increase this limit or to remove it all together on temporary or permanent basis would be helpful. Please do let us know when such process is finalised.
Until then, we will have to factor this in our algo as manually calling RMS would not be practical. Putting this precaution in the algo will limit our ability to execute high quantity trades. Hence, we are looking forward to have some resolution on this soon.
I would really appreciate you could answer following questions. Would be a great help!!
Question 1
You just need to add the order to the basket with required quantity and send params just like how you send while placing a single order. Like for order quantity above freeze quantity, you need to send your desired quantity but make sure to send auto_slice value as true.
I could not find any documentation regarding auto_slice flag. Could you please provide me with some documentation or example to understand this?
Just to be clear, let's say, I want to buy 40000 quantity of NIFTY Option using Kite Connect APIs (via client algo), with the use of this auto_slice flag, I can just create a single regular limit order with 40000 quantity and auto_slice flag=true. This will be executed by Zerodha backend and it automatically takes care of freeze limits, rate limits etc restrictions. Yes? Please correct me if I am wrong.
I understand with the above example, rate limits will be applicable as suggested above:
It is considered as 1 request only for 10/second or 200/minute rate limit but for the Zerodha account level limit of 3000 orders per day will include the count of all sub orders as well.
Question 2
Let's say if I have placed an Iceberg 'Limit' order for the price of 100 with 10 legs each with 1800 Qty (freeze limit) to buy NIFTY Option. Price is currently trading at 90.
Now if the price suddenly spikes from 90 to 125 (in case of Gamma blast), in this situation, will all my Iceberg 'Limit' orders are executed before the price went beyond 100, OR, the first Iceberg leg is executed at 100 and beyond that other legs will be executed at market price as long as price is >= 100 (target).
In above situation, I want to understand the difference between regular limit orders and iceberg limit orders. Because, in case of regular limit orders, all orders will be executed at 100 before the price can spike beyond 100. However, since Iceberg orders and only revealing 1st leg and hides other (9 legs), I want to understand how they will be traded in this example.
Just to be clear, let's say, I want to buy 40000 quantity of NIFTY Option using Kite Connect APIs (via client algo), with the use of this auto_slice flag, I can just create a single regular limit order with 40000 quantity and auto_slice flag=true. This will be executed by Zerodha backend and it automatically takes care of freeze limits, rate limits etc restrictions. Yes? Please correct me if I am wrong.
We do take care of slicing orders if quantity is above freeze quantity limit. If you hit the maximum orders per day limit then your order will fail and you will receive error message inside the order placement response.
It will look something like this
{ "status": "success", "data": [ {"order_id": "1234"}, { "error": { "code": 400, "error_type": "MarginException", "message": "Insufficient funds. Required margin is 73164.75 but available margin is 60657.68.", "data": null }, }, {"order_id": "1235"}, ] }
In case of Iceberg orders, lets say you placed an with quantity 18000 and with 10 legs, the first leg with 1800 quantity is placed with limit price of 100, once it gets executed the second leg order is placed with 100 limit price. If lets say LTP of the instrument moves up then your limit order will sit in pending state till it executes. So your third leg is never placed.
Thank you for your detailed response. Much appreciated. It clarifies all my queries.
Just one new thing I wanted to ask: I understand this 3000 orders/day limit is from Zerodha, and not from SEBI or NSE. Is there any provision to increase this limit on an Account/API Key basis?
Regards.
Thank you for your response. It is helpful.
Yes, some sort of process to increase this limit or to remove it all together on temporary or permanent basis would be helpful. Please do let us know when such process is finalised.
Until then, we will have to factor this in our algo as manually calling RMS would not be practical. Putting this precaution in the algo will limit our ability to execute high quantity trades. Hence, we are looking forward to have some resolution on this soon.
Thank you.
I would really appreciate you could answer following questions. Would be a great help!!
Question 1
I could not find any documentation regarding auto_slice flag. Could you please provide me with some documentation or example to understand this?Just to be clear, let's say, I want to buy 40000 quantity of NIFTY Option using Kite Connect APIs (via client algo), with the use of this auto_slice flag, I can just create a single regular limit order with 40000 quantity and auto_slice flag=true. This will be executed by Zerodha backend and it automatically takes care of freeze limits, rate limits etc restrictions. Yes? Please correct me if I am wrong.
I understand with the above example, rate limits will be applicable as suggested above:
Question 2
Let's say if I have placed an Iceberg 'Limit' order for the price of 100 with 10 legs each with 1800 Qty (freeze limit) to buy NIFTY Option. Price is currently trading at 90.Now if the price suddenly spikes from 90 to 125 (in case of Gamma blast), in this situation, will all my Iceberg 'Limit' orders are executed before the price went beyond 100, OR, the first Iceberg leg is executed at 100 and beyond that other legs will be executed at market price as long as price is >= 100 (target).
In above situation, I want to understand the difference between regular limit orders and iceberg limit orders. Because, in case of regular limit orders, all orders will be executed at 100 before the price can spike beyond 100. However, since Iceberg orders and only revealing 1st leg and hides other (9 legs), I want to understand how they will be traded in this example.
Regards.
It will look something like this In case of Iceberg orders, lets say you placed an with quantity 18000 and with 10 legs, the first leg with 1800 quantity is placed with limit price of 100, once it gets executed the second leg order is placed with 100 limit price. If lets say LTP of the instrument moves up then your limit order will sit in pending state till it executes. So your third leg is never placed.
Following question is still unanswered: Requirement:
To place a regular order (limit/market) with auto_slice flag with high quantity.
Expectations:
Regards.