class_docstr: Provides methods for retrieving daily stock data from
  Yahoo Finance API
code: def fetch_latest_data(
      self,
      ticker_list: list[str],
      time_interval: str,
      tech_indicator_list: list[str],
      limit: int = 100,
  ) -> pd.DataFrame:
      time_interval = self.convert_interval(time_interval)
  
      end_datetime = datetime.datetime.now()
      start_datetime = end_datetime - datetime.timedelta(
          minutes=limit + 1
      )  # get the last rows up to limit
  
      data_df = pd.DataFrame()
      for tic in ticker_list:
          barset = yf.download(
              tic, start_datetime, end_datetime, interval=time_interval
          )  # use start and end datetime to simulate the limit parameter
          barset["tic"] = tic
          data_df = pd.concat([data_df, barset])
  
      data_df = data_df.reset_index().drop(
          columns=["Adj Close"]
      )  # Alpaca data does not have 'Adj Close'
  
      data_df.columns = [  # convert to Alpaca column names lowercase
          "timestamp",
          "open",
          "high",
          "low",
          "close",
          "volume",
          "tic",
      ]
  
      start_time = data_df.timestamp.min()
      end_time = data_df.timestamp.max()
      times = []
      current_time = start_time
      end = end_time + pd.Timedelta(minutes=1)
      while current_time != end:
          times.append(current_time)
          current_time += pd.Timedelta(minutes=1)
  
      df = data_df.copy()
      new_df = pd.DataFrame()
      for tic in ticker_list:
          tmp_df = pd.DataFrame(
              columns=["open", "high", "low", "close", "volume"],
              index=times,
          )
          tic_df = df[df.tic == tic]
          for i in range(tic_df.shape[0]):
              tmp_df.loc[tic_df.iloc[i]["timestamp"]] = tic_df.iloc[i][
                  ["open", "high", "low", "close", "volume"]
              ]
  
              if str(tmp_df.iloc[0]["close"]) == "nan":
                  for i in range(tmp_df.shape[0]):
                      if str(tmp_df.iloc[i]["close"]) != "nan":
                          first_valid_close = tmp_df.iloc[i]["close"]
                          tmp_df.iloc[0] = [
                              first_valid_close,
                              first_valid_close,
                              first_valid_close,
                              first_valid_close,
                              0.0,
                          ]
                          break
              if str(tmp_df.iloc[0]["close"]) == "nan":
                  print(
                      "Missing data for ticker: ",
                      tic,
                      " . The prices are all NaN. Fill with 0.",
                  )
                  tmp_df.iloc[0] = [
                      0.0,
                      0.0,
                      0.0,
                      0.0,
                      0.0,
                  ]
  
          for i in range(tmp_df.shape[0]):
              if str(tmp_df.iloc[i]["close"]) == "nan":
                  previous_close = tmp_df.iloc[i - 1]["close"]
                  if str(previous_close) == "nan":
                      previous_close = 0.0
                  tmp_df.iloc[i] = [
                      previous_close,
                      previous_close,
                      previous_close,
                      previous_close,
                      0.0,
                  ]
          tmp_df = tmp_df.astype(float)
          tmp_df["tic"] = tic
          new_df = pd.concat([new_df, tmp_df])
  
      new_df = new_df.reset_index()
      new_df = new_df.rename(columns={"index": "timestamp"})
  
      df = self.add_technical_indicator(new_df, tech_indicator_list)
      df["VIXY"] = 0
  
      price_array, tech_array, turbulence_array = self.df_to_array(
          df, tech_indicator_list, if_vix=True
      )
      latest_price = price_array[-1]
      latest_tech = tech_array[-1]
      start_datetime = end_datetime - datetime.timedelta(minutes=1)
      turb_df = yf.download("VIXY", start_datetime, limit=1)
      latest_turb = turb_df["Close"].values
      return latest_price, latest_tech, latest_turb
  
imports: from __future__ import annotations
  import datetime
  from datetime import date
  from datetime import timedelta
  from sqlite3 import Timestamp
  from typing import Any
  from typing import Dict
  from typing import List
  from typing import Optional
  from typing import Type
  from typing import TypeVar
  from typing import Union
  import exchange_calendars
  import numpy
  import pandas
  import pytz
  import yfinance
  from stockstats import StockDataFrame
label_desc: Use image node_id 11 for calling the YahooFinanceProcessor obj's underlying member method code with example usage: obj.fetch_latest_data(ticker_list, time_interval, tech_indicator_list, limit) and returns: latest_price,  latest_tech,  latest_turb