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..')
예제 #2
0
    def run(self):
        # NOTE: This should not be overriden in Derived class
        if self.enabled == False:
            logging.warn("%s: Not going to run strategy as its not enabled.",
                         self.getName())
            return

        if Utils.isMarketClosedForTheDay():
            logging.warn("%s: Not going to run strategy as market is closed.",
                         self.getName())
            return

        now = datetime.now()
        if now < Utils.getMarketStartTime():
            Utils.waitTillMarketOpens(self.getName())

        if self.canTradeToday() == False:
            logging.warn(
                "%s: Not going to run strategy as it cannot be traded today.",
                self.getName())
            return

        if now < self.startTimestamp:
            waitSeconds = now - self.startTimestamp
            logging.info(
                "%s: Waiting for %d seconds till startegy start timestamp reaches...",
                self.getName(), waitSeconds)
            time.sleep(waitSeconds)

        # Run in an loop and keep processing
        while True:
            if Utils.isMarketClosedForTheDay():
                logging.warn("%s: Exiting the strategy as market closed.",
                             self.getName())
                break

            # Derived class specific implementation will be called when process() is called
            self.process()

            # Sleep and wake up on every 30th second
            now = datetime.now()
            waitSeconds = 30 - (now.second % 30)
            time.sleep(waitSeconds)
    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