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(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