code: def cdl_z(
      open_,
      high,
      low,
      close,
      length=None,
      full=None,
      ddof=None,
      offset=None,
      **kwargs,
  ):
      """Candle Type: Z Score"""
      # Validate Arguments
      length = int(length) if length and length > 0 else 30
      ddof = int(ddof) if ddof and ddof >= 0 and ddof < length else 1
      open_ = verify_series(open_, length)
      high = verify_series(high, length)
      low = verify_series(low, length)
      close = verify_series(close, length)
      offset = get_offset(offset)
      full = bool(full) if full is not None and full else False
  
      if open_ is None or high is None or low is None or close is None:
          return
  
      # Calculate Result
      if full:
          length = close.size
  
      z_open = zscore(open_, length=length, ddof=ddof)
      z_high = zscore(high, length=length, ddof=ddof)
      z_low = zscore(low, length=length, ddof=ddof)
      z_close = zscore(close, length=length, ddof=ddof)
  
      _full = "a" if full else ""
      _props = _full if full else f"_{length}_{ddof}"
      df = DataFrame(
          {
              f"open_Z{_props}": z_open,
              f"high_Z{_props}": z_high,
              f"low_Z{_props}": z_low,
              f"close_Z{_props}": z_close,
          }
      )
  
      if full:
          df.fillna(method="backfill", axis=0, inplace=True)
  
      # Offset
      if offset != 0:
          df = df.shift(offset)
  
      # Handle fills
      if "fillna" in kwargs:
          df.fillna(kwargs["fillna"], inplace=True)
      if "fill_method" in kwargs:
          df.fillna(method=kwargs["fill_method"], inplace=True)
  
      # Name and Categorize it
      df.name = f"CDL_Z{_props}"
      df.category = "candles"
  
      return df
  
label_desc: Use image node_id 1 for calling a global function with example usage: cdl_z(open_, high, low, close, length, full, ddof, offset) and returns: df