Navigation

    SmartAPI Forum
    • Register
    • Login
    • Search
    • Categories
    • Popular
    • Groups
    • FAQs
    • API Docs

    Stoploss is applied to exit the position of placed order. While it is pending then to cancel it

    Python SDK
    0
    3
    36
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      as5320029 last edited by

      According to this script, when sbi's buy order is placed, then when a stoploss_limit order is placed to exit its position, whose Verity is "STOPLOSS" while it is pending, I want to cancel this pending order. , when I run this script, the order with STOPLOSS Verity is not canceled, please can someone tell me what I am doing wrong, when I run the script, then """ Sell order cancelled: 2d8c042c-2896- 4341-8b55-8b3b075d76be """ is received but still order is not canceled, remains in pending

      import requests
      from SmartApi.smartConnect import SmartConnect
      from SmartApi.smartWebSocketOrderUpdate import SmartWebSocketOrderUpdate
      from SmartApi.smartWebSocketV2 import SmartWebSocketV2
      import pyotp
      from datetime import datetime
      import time
      import threading

      print("Script ko shuru karte hain")

      LIVE_FEED_JSON = {}

      SmartAPI connection shuru karein

      api_key = '7yrR5r'
      username = 'A286220'
      pwd = '1009'
      smartApi = SmartConnect(api_key)

      OTP token generate karein

      try:
      token = "UZTNGOU7FW3QMY5DPC6OB73OEA"
      totp = pyotp.TOTP(token).now()
      except Exception as e:
      print("Invalid Token: Diya gaya token valid nahi hai.")
      raise e

      Session generate karein

      data = smartApi.generateSession(username, pwd, totp)

      Session generation ka response handle karein

      if not data['status']:
      print(data)
      exit()

      authToken = data['data']['jwtToken']
      refreshToken = data['data']['refreshToken']
      feedToken = smartApi.getfeedToken()
      res = smartApi.getProfile(refreshToken)
      smartApi.generateToken(refreshToken)
      exchanges = res['data']['exchanges']

      WebSocket configuration

      AUTH_TOKEN = authToken
      API_KEY = "7yrR5r"
      CLIENT_CODE = "A2220"
      FEED_TOKEN = feedToken
      correlation_id = "abc123"
      mode = 1
      token_list = [{"exchangeType": 1, "tokens": ["3045"]}, {"exchangeType": 2, "tokens": ["3045"]}]

      SmartWebSocketV2 instance initialize karein

      sws = SmartWebSocketV2(AUTH_TOKEN, API_KEY, CLIENT_CODE, FEED_TOKEN)

      WebSocket event handlers define karein

      def on_data(wsapp, message):
      try:
      token = message.get('token')
      ltp = message.get('last_traded_price') / 100
      exchange_timestamp = datetime.fromtimestamp(message.get('exchange_timestamp') / 1000).isoformat()
      oi = message.get('open_interest')

          parsed_data = {
              'token': token,
              'ltp': ltp,
              'exchange_timestamp': exchange_timestamp,
              'oi': oi
          }
      
          print("Parsed data:", parsed_data)
      
          LIVE_FEED_JSON[token] = parsed_data
      except Exception as e:
          print("Data parsing mein error:", e)
      

      def on_control_message(wsapp, message):
      print(f"Control Message: {message}")

      def on_open(wsapp):
      print("WebSocket connection opened")
      sws.subscribe(correlation_id, mode, token_list)

      def on_error(wsapp, error):
      print("WebSocket Error:", error)
      # Retry connection
      sws.connect()

      def on_close(wsapp):
      print("WebSocket connection closed")
      # Retry connection
      sws.connect()

      SmartWebSocketV2 instance ko event handlers assign karein

      sws.on_open = on_open
      sws.on_data = on_data
      sws.on_error = on_error
      sws.on_close = on_close
      sws.on_control_message = on_control_message

      WebSocket connection thread ko start karein

      sws_thread = threading.Thread(target=sws.connect)
      sws_thread.start()
      print('WebSocket connection initiated')

      Order place function define karein

      def place_order(symboltoken, quantity, tradingsymbol):
      try:
      order_params = {
      "variety": "NORMAL",
      "tradingsymbol": tradingsymbol,
      "symboltoken": symboltoken,
      "transactiontype": "BUY",
      "exchange": "NSE",
      "ordertype": "MARKET",
      "producttype": "INTRADAY",
      "duration": "DAY",
      "price": "0",
      "quantity": quantity
      }
      response = smartApi.placeOrderFullResponse(order_params)
      if response and response['status']:
      uniqueOrderID = response['data']['uniqueorderid']
      print("Order successfully placed. Unique Order ID:", uniqueOrderID)
      return uniqueOrderID
      else:
      print("Failed to place order:", response['message'] if response else "Response is None")
      return None
      except Exception as e:
      print("Error placing order:", e)
      return None

      Sell order function define karein

      def place_sell_order(symboltoken, quantity, order_id, tradingsymbol):
      try:
      order_params = {
      "variety": "STOPLOSS",
      "orderid": order_id,
      "tradingsymbol": tradingsymbol,
      "symboltoken": symboltoken,
      "transactiontype": "SELL",
      "exchange": "NSE",
      "ordertype": "STOPLOSS_LIMIT",
      "producttype": "INTRADAY",
      "duration": "DAY",
      "triggerprice": "790",
      "price": "770",
      "squareoff": "0",
      "stoploss": "0",
      "quantity": quantity
      }
      response = smartApi.placeOrderFullResponse(order_params)
      if response and response['status']:
      uniqueOrderID = response['data']['uniqueorderid']
      print("Order successfully placed. Unique Order ID:", uniqueOrderID)
      return uniqueOrderID
      else:
      print("Failed to place order:", response['message'] if response else "Response is None")
      return None
      except Exception as e:
      print("Error placing order:", e)
      return None

      Cancel order function

      def cancelOrder(order_id, variety):
      try:
      orderResponse = smartApi.cancelOrder(order_id, variety)
      return orderResponse
      except Exception as e:
      print("Error cancelling order:", e)
      return None

      Order update event handler define karein

      def on_order_update(wsapp, message):
      print("Order Update Received:", message)

      SmartWebSocketOrderUpdate instance initialize karein

      order_update_client = SmartWebSocketOrderUpdate(AUTH_TOKEN, API_KEY, CLIENT_CODE, FEED_TOKEN)

      Order update event handlers define karein

      def on_order_update_open(wsapp):
      print("Order Update WebSocket connection opened")

      def on_order_update_error(wsapp, error):
      print("WebSocket Order Update Error:", error)

      def on_order_update_close(wsapp, close_status_code, close_msg):
      pass

      SmartWebSocketOrderUpdate instance ko event handlers assign karein

      order_update_client.on_open = on_order_update_open
      order_update_client.on_error = on_order_update_error
      order_update_client.on_close = on_order_update_close
      order_update_client.on_order_update = on_order_update

      Order Update WebSocket connection thread ko start karein

      order_update_thread = threading.Thread(target=order_update_client.connect)
      order_update_thread.start()
      print('Order Update WebSocket connection initiated')

      def monitor_and_place_orders():
      order_1_id = None
      sell_order_id = None
      try:
      while True:
      # Condition A
      if '3045' in LIVE_FEED_JSON and LIVE_FEED_JSON['3045']['ltp'] > 740 and order_1_id is None:
      order_1_id = place_order('3045', '1', "SBIN-EQ")
      if order_1_id:
      print("Order 1 placed:", order_1_id)

              # Condition B
              if order_1_id:
                  order_status = smartApi.individual_order_details(order_1_id)['data']['orderstatus']
                  if order_status == 'complete':
                      print("Order 1 completed.")
      
                      # Condition C
                      if not sell_order_id and '3045' in LIVE_FEED_JSON and LIVE_FEED_JSON['3045']['ltp'] < 815:
                          # Place sell order to exit position
                          sell_order_id = place_sell_order('3045', 1, order_1_id, "SBIN-EQ")
                          print("Sell order placed to exit position:", sell_order_id)
              # Condition D
              if sell_order_id:
                  order_status = smartApi.individual_order_details(sell_order_id)['data']['orderstatus']
                  if order_status == 'trigger pending' and LIVE_FEED_JSON['3045']['ltp'] < 817:
                      # Cancel the sell order
                      cancelOrder(sell_order_id, "STOPLOSS")
                      print("Sell order cancelled:", sell_order_id)
                      
      
              time.sleep(10)
              
      finally:
          # WebSocket connections ko band karein
          sws.close_connection()
          order_update_client.close_connection()
      

      monitor_thread = threading.Thread(target=monitor_and_place_orders)
      monitor_thread.start()

      Mnagesh 1 Reply Last reply Reply Quote 0
      • Mnagesh
        Mnagesh @as5320029 last edited by

        @as5320029 don't reveal your pwd . user id and Totp key etc .. in general your credential never disclose .

        first delete your mail and repost it6 again without your credentials.

        Now I am full time Algo Trader and successfully developed my own Apps for my personal use.

        A 1 Reply Last reply Reply Quote 0
        • A
          as5320029 @Mnagesh last edited by

          Sir by the way my api key or password is wrong but by the way i want to ask how to delete the post

          1 Reply Last reply Reply Quote 0
          • First post
            Last post