# Kite Bracket Orders
A Python module for placing bracket orders with Zerodha's KiteConnect API. It includes features like automated authentication, a dashboard for viewing margins/holdings/positions/orders, Google Sheets integration for trade plans, customizable logging, and market hour checks with AMO (After Market Order) support.
## Features
- **Bracket Order Placement**: Place entry orders with target and stop-loss, including monitoring and modification.
- **Authentication**: Automatic login with dependency installation, config management, and session token handling.
- **Dashboard**: View account margins, holdings, positions, and recent orders in a clean terminal format.
- **Google Sheets Integration**: Load trade plans from a specified sheet for easy data-driven trading.
- **Logging Toggle**: Enable/disable logging to file with a simple flag (no impact on terminal output when disabled).
- **Market Checks**: Detects closed markets/weekends and prompts for AMO orders.
### Dependencies
- kiteconnect
- gspread
- oauth2client
- colorama
These are automatically installed via pip.
## Usage
1. **Setup Credentials**:
- Create `credentials/config.json` with your Kite API details.
- Create `credentials/credentials.json` with your Google Service Account key.
2. **Run the Script** (example in order.py):
# pip install --upgrade kite-order
from kite_bracket_orders import BracketOrderPlacer, KiteDashboard, safe_print, login, pip_upgrade, pip_install
order_data = {
"segment" : "NSE" , # "NSE" or "NFO"
"product_type" : "MIS" , # "MIS" or "CNC" or "NRML"
"side" : "BUY" , # "BUY" or "SELL"
"entry_order_type" : "LIMIT" , # "LIMIT" or "MARKET"
"sl_type" : "SL-M" , # choose: "SL" or "SL-M"
"symbol" : "IDEA" , # e.g. "IDEA", "RELIANCE", or "NIFTY24JUL20000CE"
"quantity" : 1 , # Must match lot size for options; 1+ for stocks
"entry_price" : 7.34 , # Only used if LIMIT order
"target_price" : 7.45 ,
"stop_loss_trigger" : 7.28 ,
"stop_loss_limit" : 7.27 # only used if SL (not SL-M)
}
if __name__ == "__main__":
# pip_install() # Optional: Uncomment if you want to auto-install packages
enable_logging = True # True or False Enable/disable logging
while True:
safe_print("\nš Select an option:")
safe_print("ā" * 30)
safe_print("1. š Kite Login")
safe_print("2. š Show Dashboard")
safe_print("3. š Place Order")
safe_print("4. š Entry Order track")
safe_print("5. š SL/target Order track")
safe_print("6. š ļø pip Upgrade")
safe_print("7. ā Exit")
choice = input("\nš Select an option (1-7): ")
if choice == "1":
login()
elif choice == "2":
dash = KiteDashboard()
dash.show_all()
elif choice == "3":
placer = BracketOrderPlacer(code_data=order_data, enable_logging=enable_logging)
placer.load_kite_login_name_show()
placer.place_bracket_order()
elif choice == "4":
placer = BracketOrderPlacer(code_data=order_data, enable_logging=enable_logging)
placer.load_kite_login_name_show()
safe_print("\nš Enter Entry Order Details:")
entry_order_id = input("š¢ Entry Order ID: ").strip()
target_price = float(input("šÆ Target Price: "))
stop_loss_trigger = float(input("š Stop Loss Trigger Price: "))
sl_type = input("š Stop Loss Type (SL or SL-M): ").strip().upper()
stop_loss_limit = float(input("š Stop Loss Limit Price (if SL, else enter 0): ")) if sl_type == "SL" else 0
placer.track_entry_order(entry_order_id, target_price, stop_loss_trigger, stop_loss_limit, sl_type)
elif choice == "5":
placer = BracketOrderPlacer(code_data=order_data, enable_logging=enable_logging)
placer.load_kite_login_name_show()
safe_print("\nš Enter SL/Target Order Details:")
target_order_id = input("šÆ Target Order ID: ").strip()
sl_order_id = input("š Stop Loss Order ID: ").strip()
placer.track_sl_target_orders(target_order_id, sl_order_id)
elif choice == "6":
pip_upgrade()
elif choice == "7":
safe_print("\nš Exiting... Have a profitable day!")
break
else:
safe_print("ā Invalid option. Please try again.")
3. **Run**:
python order.py
## Configuration
- **config.json**: Stores Kite API_KEY and ACCESS_TOKEN.
- **credentials.json**: Google Sheets auth.
- **Logging**: Set `enable_logging=False` to disable log files.
## License
MIT License. See LICENSE for details.
## Contributing
Fork the repo and submit a pull request. Issues and feature requests are welcome!
Raw data
{
"_id": null,
"home_page": null,
"name": "kite-order",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": null,
"keywords": "zerodha, kiteconnect, trading, bracket-orders, api, google-sheets",
"author": null,
"author_email": "Prasad <mr.xprasadx@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/b6/20/5d5888195c91d7cf58fd6fafd54b9f3053ed409ac9eb5a1c58e8beca0047/kite_order-0.2.0.tar.gz",
"platform": null,
"description": "# Kite Bracket Orders\r\n\r\nA Python module for placing bracket orders with Zerodha's KiteConnect API. It includes features like automated authentication, a dashboard for viewing margins/holdings/positions/orders, Google Sheets integration for trade plans, customizable logging, and market hour checks with AMO (After Market Order) support.\r\n\r\n## Features\r\n- **Bracket Order Placement**: Place entry orders with target and stop-loss, including monitoring and modification.\r\n- **Authentication**: Automatic login with dependency installation, config management, and session token handling.\r\n- **Dashboard**: View account margins, holdings, positions, and recent orders in a clean terminal format.\r\n- **Google Sheets Integration**: Load trade plans from a specified sheet for easy data-driven trading.\r\n- **Logging Toggle**: Enable/disable logging to file with a simple flag (no impact on terminal output when disabled).\r\n- **Market Checks**: Detects closed markets/weekends and prompts for AMO orders.\r\n\r\n\r\n### Dependencies\r\n- kiteconnect\r\n- gspread\r\n- oauth2client\r\n- colorama\r\n\r\nThese are automatically installed via pip.\r\n\r\n## Usage\r\n\r\n1. **Setup Credentials**:\r\n - Create `credentials/config.json` with your Kite API details.\r\n - Create `credentials/credentials.json` with your Google Service Account key.\r\n\r\n2. **Run the Script** (example in order.py):\r\n\r\n # pip install --upgrade kite-order\r\n\r\n from kite_bracket_orders import BracketOrderPlacer, KiteDashboard, safe_print, login, pip_upgrade, pip_install\r\n\r\n order_data = {\r\n \"segment\" : \"NSE\" , # \"NSE\" or \"NFO\"\r\n \"product_type\" : \"MIS\" , # \"MIS\" or \"CNC\" or \"NRML\"\r\n \"side\" : \"BUY\" , # \"BUY\" or \"SELL\"\r\n \"entry_order_type\" : \"LIMIT\" , # \"LIMIT\" or \"MARKET\"\r\n \"sl_type\" : \"SL-M\" , # choose: \"SL\" or \"SL-M\"\r\n\r\n \"symbol\" : \"IDEA\" , # e.g. \"IDEA\", \"RELIANCE\", or \"NIFTY24JUL20000CE\"\r\n \"quantity\" : 1 , # Must match lot size for options; 1+ for stocks\r\n \"entry_price\" : 7.34 , # Only used if LIMIT order\r\n \"target_price\" : 7.45 ,\r\n \"stop_loss_trigger\" : 7.28 ,\r\n \"stop_loss_limit\" : 7.27 # only used if SL (not SL-M)\r\n }\r\n\r\n if __name__ == \"__main__\":\r\n # pip_install() # Optional: Uncomment if you want to auto-install packages\r\n\r\n enable_logging = True # True or False Enable/disable logging\r\n\r\n while True:\r\n safe_print(\"\\n\ud83d\udcca Select an option:\")\r\n safe_print(\"\u2501\" * 30)\r\n safe_print(\"1. \ud83d\udd10 Kite Login\")\r\n safe_print(\"2. \ud83d\udcc8 Show Dashboard\")\r\n safe_print(\"3. \ud83d\uded2 Place Order\")\r\n safe_print(\"4. \ud83d\uded2 Entry Order track\")\r\n safe_print(\"5. \ud83d\uded2 SL/target Order track\")\r\n safe_print(\"6. \ud83d\udee0\ufe0f pip Upgrade\")\r\n safe_print(\"7. \u274c Exit\")\r\n\r\n\r\n choice = input(\"\\n\ud83d\udc49 Select an option (1-7): \")\r\n\r\n\r\n if choice == \"1\":\r\n login()\r\n elif choice == \"2\":\r\n dash = KiteDashboard()\r\n dash.show_all()\r\n elif choice == \"3\":\r\n placer = BracketOrderPlacer(code_data=order_data, enable_logging=enable_logging)\r\n placer.load_kite_login_name_show()\r\n placer.place_bracket_order()\r\n elif choice == \"4\":\r\n placer = BracketOrderPlacer(code_data=order_data, enable_logging=enable_logging)\r\n placer.load_kite_login_name_show()\r\n safe_print(\"\\n\ud83d\udccb Enter Entry Order Details:\")\r\n entry_order_id = input(\"\ud83d\udd22 Entry Order ID: \").strip()\r\n target_price = float(input(\"\ud83c\udfaf Target Price: \"))\r\n stop_loss_trigger = float(input(\"\ud83d\uded1 Stop Loss Trigger Price: \"))\r\n sl_type = input(\"\ud83d\uded1 Stop Loss Type (SL or SL-M): \").strip().upper()\r\n stop_loss_limit = float(input(\"\ud83d\uded1 Stop Loss Limit Price (if SL, else enter 0): \")) if sl_type == \"SL\" else 0\r\n placer.track_entry_order(entry_order_id, target_price, stop_loss_trigger, stop_loss_limit, sl_type)\r\n elif choice == \"5\":\r\n placer = BracketOrderPlacer(code_data=order_data, enable_logging=enable_logging)\r\n placer.load_kite_login_name_show()\r\n safe_print(\"\\n\ud83d\udccb Enter SL/Target Order Details:\")\r\n target_order_id = input(\"\ud83c\udfaf Target Order ID: \").strip()\r\n sl_order_id = input(\"\ud83d\uded1 Stop Loss Order ID: \").strip()\r\n placer.track_sl_target_orders(target_order_id, sl_order_id)\r\n elif choice == \"6\":\r\n pip_upgrade()\r\n elif choice == \"7\":\r\n safe_print(\"\\n\ud83d\udc4b Exiting... Have a profitable day!\")\r\n break\r\n else:\r\n safe_print(\"\u2757 Invalid option. Please try again.\")\r\n\r\n\r\n3. **Run**:\r\npython order.py\r\n\r\n## Configuration\r\n- **config.json**: Stores Kite API_KEY and ACCESS_TOKEN.\r\n- **credentials.json**: Google Sheets auth.\r\n- **Logging**: Set `enable_logging=False` to disable log files.\r\n\r\n## License\r\nMIT License. See LICENSE for details.\r\n\r\n## Contributing\r\nFork the repo and submit a pull request. Issues and feature requests are welcome!\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A Python module for placing bracket orders with Zerodha's KiteConnect API, featuring authentication, dashboard, Google Sheets integration, and customizable logging.",
"version": "0.2.0",
"project_urls": {
"Repository": "https://github.com/Prasad1612/kite_bracket_orders"
},
"split_keywords": [
"zerodha",
" kiteconnect",
" trading",
" bracket-orders",
" api",
" google-sheets"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "d8e238a77625e3a9e2f28baf3b612c6b9156b6f74a018a78fbd64bac37156d9b",
"md5": "da298f5f54b0b7bcf45359990de7a612",
"sha256": "8bde873630809f203f4c6f87cd0e8b659c9c00def363848628c7055392a79a2e"
},
"downloads": -1,
"filename": "kite_order-0.2.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "da298f5f54b0b7bcf45359990de7a612",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 15940,
"upload_time": "2025-08-28T12:35:24",
"upload_time_iso_8601": "2025-08-28T12:35:24.428500Z",
"url": "https://files.pythonhosted.org/packages/d8/e2/38a77625e3a9e2f28baf3b612c6b9156b6f74a018a78fbd64bac37156d9b/kite_order-0.2.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b6205d5888195c91d7cf58fd6fafd54b9f3053ed409ac9eb5a1c58e8beca0047",
"md5": "d6128014f4c48466b4729cfa4720a9d5",
"sha256": "ce7a9e1f21985fe53231120bf1820d8d63cd6b79b1b1cb20a500c0b3e8186c6a"
},
"downloads": -1,
"filename": "kite_order-0.2.0.tar.gz",
"has_sig": false,
"md5_digest": "d6128014f4c48466b4729cfa4720a9d5",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 14535,
"upload_time": "2025-08-28T12:35:26",
"upload_time_iso_8601": "2025-08-28T12:35:26.028964Z",
"url": "https://files.pythonhosted.org/packages/b6/20/5d5888195c91d7cf58fd6fafd54b9f3053ed409ac9eb5a1c58e8beca0047/kite_order-0.2.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-28 12:35:26",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Prasad1612",
"github_project": "kite_bracket_orders",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "kiteconnect",
"specs": []
},
{
"name": "gspread",
"specs": []
},
{
"name": "oauth2client",
"specs": []
},
{
"name": "colorama",
"specs": []
}
],
"lcname": "kite-order"
}