code: def data_fetch_for_stocks(
      self,
      stocknames,
      start_day,
      end_day,
      read_data_from_local,
      path_of_data,
  ):
      assert read_data_from_local in [0, 1]
      if read_data_from_local == 1:
          remove = 0
      else:
          remove = 1
      remove_all_files(remove, path_of_data)
      dfs = []
      if read_data_from_local == 1:
          dfs = self.read_data_from_csv(
              path_of_data, start_day, end_day
          )
      else:
          if os.path.exists(path_of_data) is False:
              os.makedirs(path_of_data)
          for stockname in stocknames:
              df = jq.get_price(
                  stockname,
                  start_date=start_day,
                  end_date=end_day,
                  frequency="daily",
                  fields=["open", "close", "high", "low", "volume"],
              )
              dfs.append(df)
              df.to_csv(
                  path_of_data + "/" + stockname + ".csv",
                  float_format="%.4f",
              )
      return dfs
  
file_path: FinRL/finrl/meta/data_processors/processor_joinquant.py
imports: from __future__ import annotations
  import copy
  import os
  import jqdatasdk
  import numpy
  import pandas
  from func import calc_all_filenames
  from func import date2str
  from func import remove_all_files
label_desc: Use image node_id 7 for calling the JoinQuantEngineer obj's underlying member method code with example usage: obj.data_fetch_for_stocks(stocknames, start_day, end_day, read_data_from_local, path_of_data) and returns: dfs