A Python module for placing bracket orders with Zerodha's 💹 KiteConnect API.
It includes features like authentication 🔐, a dashboard 📊 for viewing margins/holdings/positions/orders, Google Sheets 📄 integration for trade plans, customizable logging 📁, and market hour checks with AMO support ⏰.
- 🛒 Bracket Order Placement: Place entry orders with target 🎯 and stop-loss 🛑, including monitoring.
- 🔐 Authentication: Auto-login with dependency installation, config management & 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.
- ⏰ Market Checks: Detects closed markets/weekends and prompts for AMO (After Market Orders).
kiteconnectgspreadoauth2clientcolorama
- Create
credentials/config.jsonwith your Kite API details. - Create
credentials/credentials.jsonwith your Google Service Account key.
```python
'''
pip install --upgrade kite-order
'''
from kite_bracket_orders import BracketOrderPlacer, KiteDashboard, KiteAlerts, 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 = False # Toggle True to enable logging
while True:
safe_print("\n📊 Select an option:")
safe_print("━" * 35)
safe_print("1. 🔐 Kite Login")
safe_print("2. 📈 Show Dashboard")
safe_print("\n3. 📢 Manage Alerts")
safe_print("\n4. 🛒 Place Order")
safe_print("5. 🛍️ Track Entry Order")
safe_print("6. 🎯 Track SL / Target")
safe_print("\n7. 🛠️ Upgrade pip")
safe_print("8. ❌ Exit")
choice = input("\n👉 Select an option (1-8): ").strip()
if choice == "1":
login()
elif choice == "2":
dash = KiteDashboard()
dash.show_all()
elif choice == "3":
# 🚀 Launch KiteAlerts sub-menu
alerts = KiteAlerts()
alerts.menu() # when exited, control returns here
elif choice == "4":
placer = BracketOrderPlacer(code_data=order_data, enable_logging=enable_logging)
placer.load_kite_login_name_show()
placer.place_bracket_order()
elif choice == "5":
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 (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 == "6":
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 == "7":
pip_upgrade()
elif choice == "8":
safe_print("\n👋 Exiting... Have a profitable day!")
break
else:
safe_print("❗ Invalid option. Please try again.")
```
python order.pyconfig.json— Stores Kite API_KEY and ACCESS_TOKEN.credentials.json— Google Sheets auth.enable_logging=True/False— Toggle log file output.
Fork the repo 🍴, create a new branch 🛠️, and submit a pull request ✅.
Issues and feature requests are welcome 💡!
📈 Trade smart, stay safe.