def run():
    if Utils.isTodayHoliday():
      logging.info("Cannot start TradeManager as Today is Trading Holiday.")
      return

    if Utils.isMarketClosedForTheDay():
      logging.info("Cannot start TradeManager as Market is closed for the day.")
      return

    Utils.waitTillMarketOpens("TradeManager")

    # check and create trades directory for today`s date
    serverConfig = getServerConfig()
    tradesDir = os.path.join(serverConfig['deployDir'], 'trades')
    TradeManager.intradayTradesDir =  os.path.join(tradesDir, Utils.getTodayDateStr())
    if os.path.exists(TradeManager.intradayTradesDir) == False:
      logging.info('TradeManager: Intraday Trades Directory %s does not exist. Hence going to create.', TradeManager.intradayTradesDir)
      os.mkdirs(TradeManager.intradayTradesDir)

    # start ticker service
    brokerName = Controller.getBrokerName()
    if brokerName == "zerodha":
      TradeManager.ticker = ZerodhaTicker()
    #elif brokerName == "fyers" # not implemented
    # ticker = FyersTicker()

    TradeManager.ticker.startTicker()
    TradeManager.ticker.registerListener(TradeManager.tickerListener)

    # sleep for 2 seconds for ticker connection establishment
    time.sleep(2)

    # Load all trades from json files to app memory
    TradeManager.loadAllTradesFromFile()

    # track and update trades in a loop
    while True:
      if Utils.isMarketClosedForTheDay():
        logging.info('TradeManager: Stopping TradeManager as market closed.')
        break

      try:
        # Fetch all order details from broker and update orders in each trade
        TradeManager.fetchAndUpdateAllTradeOrders()
        # track each trade and take necessary action
        TradeManager.trackAndUpdateAllTrades()
      except Exception as e:
        logging.exception("Exception in TradeManager Main thread")

      # save updated data to json file
      TradeManager.saveAllTradesToFile()
      
      # sleep for 30 seconds and then continue
      time.sleep(30)
      logging.info('TradeManager: Main thread woke up..')
    def run():
        if Utils.isTodayHoliday():
            logging.info(
                "Cannot start TradeManager as Today is Trading Holiday.")
            return

        if Utils.isMarketClosedForTheDay():
            logging.info(
                "Cannot start TradeManager as Market is closed for the day.")
            return

        Utils.waitTillMarketOpens("TradeManager")

        # start ticker service
        brokerName = Controller.getBrokerName()
        if brokerName == "zerodha":
            TradeManager.ticker = ZerodhaTicker()
        #elif brokerName == "fyers" # not implemented
        # ticker = FyersTicker()

        TradeManager.ticker.startTicker()
        TradeManager.ticker.registerListener(TradeManager.tickerListener)

        # track and update trades in a loop
        while True:
            if Utils.isMarketClosedForTheDay():
                logging.info(
                    'TradeManager: Stopping TradeManager as market closed.')
                break

            # Fetch all order details from broker and update orders in each trade
            TradeManager.fetchAndUpdateAllTradeOrders()

            # track each trade and take necessary action
            TradeManager.trackAndUpdateAllTrades()

            time.sleep(60 * 1000)  # sleep for 60 seconds