class_docstr: Manager for trading calendar
      - BaseStrategy and BaseExecutor will use it
docstr: Check if the trading finished
  - Should check before calling strategy.generate_decisions and executor.execute
  - If self.trade_step >= self.self.trade_len, it means the trading is finished
  - If self.trade_step < self.self.trade_len, it means the number of trading step finished is self.trade_step
docstr_tok: ["Check","if","the","trading","finished","-","Should","check","before","calling","strategy.generate_decisions","and","executor.execute","-","If","self.trade_step",">","=","self.self.trade_len",",","it","means","the","trading","is","finished","-","If","self.trade_step","<","self.self.trade_len",",","it","means","the","number","of","trading","step","finished","is","self.trade_step"]
code: def finished(self) -> bool:
      """
      Check if the trading finished
      - Should check before calling strategy.generate_decisions and executor.execute
      - If self.trade_step >= self.self.trade_len, it means the trading is finished
      - If self.trade_step < self.self.trade_len, it means the number of trading step finished is self.trade_step
      """
      return self.trade_step >= self.trade_len
  
imports: from __future__ import annotations
  from abc import abstractmethod
  from typing import Any, Set, Tuple, TYPE_CHECKING, Union
  import numpy
  from qlib.utils.time import epsilon_change
  import warnings
  import pandas
  from ..data.data import Cal
label_desc: Use image node_id 3 for calling the TradeCalendarManager obj's underlying member method code with example usage: obj.finished() and returns: unknown