docstr: Parameters
  ----------
  save_dir: str
      crypto save dir
  max_workers: int
      workers, default 4
  max_collector_count: int
      default 2
  delay: float
      time.sleep(delay), default 0
  interval: str
      freq, value from [1min, 1d], default 1min
  start: str
      start datetime, default None
  end: str
      end datetime, default None
  check_data_length: int
      check data length, if not None and greater than 0, each symbol will be considered complete if its data length is greater than or equal to this value, otherwise it will be fetched again, the maximum number of fetches being (max_collector_count). By default None.
  limit_nums: int
      using for debug, by default None
docstr_tok: ["Parameters","--","--","--","--","--","save_dir",":","str","crypto","save","dir","max_workers",":","int","workers",",","default","4","max_collector_count",":","int","default","2","delay",":","float","time.sleep","(","delay",")",",","default","0","interval",":","str","freq",",","value","from","[","1min",",","1d","]",",","default","1min","start",":","str","start","datetime",",","default","None","end",":","str","end","datetime",",","default","None","check_data_length",":","int","check","data","length",",","if","not","None","and","greater","than","0",",","each","symbol","will","be","considered","complete","if","its","data","length","is","greater","than","or","equal","to","this","value",",","otherwise","it","will","be","fetched","again",",","the","maximum","number","of","fetches","being","(","max_collector_count",")",".","By","default","None",".","limit_nums",":","int","using","for","debug",",","by","default","None"]
code: def __init__(
      self,
      save_dir: [str, Path],
      start=None,
      end=None,
      interval="1d",
      max_workers=1,
      max_collector_count=2,
      delay=1,  # delay need to be one
      check_data_length: int = None,
      limit_nums: int = None,
  ):
      """
  
      Parameters
      ----------
      save_dir: str
          crypto save dir
      max_workers: int
          workers, default 4
      max_collector_count: int
          default 2
      delay: float
          time.sleep(delay), default 0
      interval: str
          freq, value from [1min, 1d], default 1min
      start: str
          start datetime, default None
      end: str
          end datetime, default None
      check_data_length: int
          check data length, if not None and greater than 0, each symbol will be considered complete if its data length is greater than or equal to this value, otherwise it will be fetched again, the maximum number of fetches being (max_collector_count). By default None.
      limit_nums: int
          using for debug, by default None
      """
      super(CryptoCollector, self).__init__(
          save_dir=save_dir,
          start=start,
          end=end,
          interval=interval,
          max_workers=max_workers,
          max_collector_count=max_collector_count,
          delay=delay,
          check_data_length=check_data_length,
          limit_nums=limit_nums,
      )
  
      self.init_datetime()
  
imports: import abc
  import sys
  import datetime
  from abc import ABC
  from pathlib import Path
  import fire
  import pandas
  from loguru import logger
  from dateutil.tz import tzlocal
  from data_collector.base import BaseCollector, BaseNormalize, BaseRun
  from data_collector.utils import deco_retry
  from pycoingecko import CoinGeckoAPI
  from time import mktime
  from datetime import datetime
  import time
label_desc: Use image node_id 1 to create a new CryptoCollector object from inherited base classes: BaseCollector with example: obj = CryptoCollector(save_dir, start, end, interval, max_workers, max_collector_count, delay, check_data_length, limit_nums)