Home Article ROBO ORDER WITH STATUS SMART API ROBO ORDER WITH STATUS SMART API Software Technique Web Technique All Computer Language and Computer Language Practice Computer Educa April 05, 2025 0 Comments Share: Facebook Twitter Google+ Pinterest Whatsapp TREDING NIFTY SYMBALTOKEN-26000 , BANKNIFTY - SYMBALTOKEN-26009 import numpy as np import datetime from SmartApi import SmartConnect import pyotp from logzero import logger import os import time # Setup API connection api_key = 'hsmncjjzkkyI' username = '77xuyjhi' password = '7456766' smartApi = SmartConnect(api_key) # Function to generate OTP def generate_otp(token, correlation_id): try: otp = pyotp.TOTP(token).now() logger.info(f"[{correlation_id}] Generated OTP: {otp}") return otp except Exception as e: logger.error(f"[{correlation_id}] Invalid Token: {str(e)}") raise e # Prepare order parameters def prepare_order_params(entry_price, lot_size, quantity, correlation_id): order_params = { "variety": "ROBO", "tradingsymbol": "NIFTY09APR2523200CE", "symboltoken": "43896", "transactiontype": "BUY", "stoploss": "0.4", "trailingstoploss": "0.05", "instrumenttype": "OPTIDX", "optiontype": "call", "exchange": "NFO", "ordertype": "LIMIT", "producttype": "BO", "duration": "DAY", "price": str(entry_price), "squareoff": "2", "quantity": str(quantity) } logger.info(f"[{correlation_id}] Order Parameters: {order_params}") return order_params # Place order def place_order(order_params, correlation_id): try: order_id = smartApi.placeOrder(order_params) logger.info(f"[{correlation_id}] Order placed: {order_id}") return order_id except Exception as e: logger.error(f"[{correlation_id}] Failed to place order: {str(e)}") return None # Cancel order def cancel_order(order_id, correlation_id): try: cancel_params = { "variety": "ROBO", "orderid": order_id } response = smartApi.cancelOrder(cancel_params) if response.get("status", "") == "success": logger.info(f"[{correlation_id}] Order {order_id} cancelled.") else: logger.error(f"[{correlation_id}] Cancel failed: {response}") except Exception as e: logger.error(f"[{correlation_id}] Cancel error: {str(e)}") # ✅ Fetch and display order book with readable status def fetch_order_status(order_id, correlation_id): try: orders = smartApi.orderBook() logger.info(f"[{correlation_id}] Order Book:") status_mapping = { "open": "Pending", "trigger pending": "Pending", "rejected": "Rejected", "complete": "Executed", "cancelled": "Cancelled" } for order in orders.get("data", []): if order.get("orderid") == order_id: raw_status = order.get("status", "").lower() readable_status = status_mapping.get(raw_status, raw_status.title()) print(f"- Order ID: {order['orderid']}, Symbol: {order['tradingsymbol']}, " f"Qty: {order['quantity']}, Price: {order['price']}, " f"Status: {readable_status}") return logger.warning(f"[{correlation_id}] Order not found in order book.") except Exception as e: logger.error(f"[{correlation_id}] Failed to fetch order status: {e}") # Main logic def main(): correlation_id = "abcde" try: token = os.getenv("OTP_SECRET_TOKEN", "7DNJETWYUSADGSPOSTWVBISYBBFAJGFT") otp = generate_otp(token, correlation_id) session_data = smartApi.generateSession(username, password, otp) if session_data.get('status', False): jwt_token = session_data['data'].get('jwtToken', None) refresh_token = session_data['data'].get('refreshToken', None) if jwt_token and refresh_token: feed_token = smartApi.getfeedToken() profile_response = smartApi.getProfile(refresh_token) smartApi.generateToken(refresh_token) # Order setup num_lots = 1 lot_size = 75 quantity = num_lots * lot_size entry_price = 26 # Dynamic price based on strategy # Place order order_params = prepare_order_params(entry_price, lot_size, quantity, correlation_id) order_id = place_order(order_params, correlation_id) if order_id: logger.info(f"[{correlation_id}] Order placed successfully with ID: {order_id}") # Auto-refresh order status every 10 seconds while True: fetch_order_status(order_id, correlation_id) time.sleep(0.02) # Wait for 10 seconds before refreshing the status again else: logger.error(f"[{correlation_id}] Order failed to place.") else: logger.error(f"[{correlation_id}] Missing tokens in session.") else: logger.error(f"[{correlation_id}] Session generation failed: {session_data}") except Exception as e: logger.exception(f"[{correlation_id}] Error: {e}") # Run main if __name__ == "__main__": main() Copy Copied Text: You Might Also Like Post a Comment
No comments