code: public function historical($sourceName, $currencyCode, \DateTime $date, $rateType = RateType::MEDIAN)
      {
          $currencyCode = CurrencyCodeUtil::clean($currencyCode);
  
          if ($this->has($sourceName, $currencyCode, $date, $rateType)) {
              return $this->get($sourceName, $currencyCode, $date, $rateType);
          }
  
          if ((int) $date->format('N') === 6 && $this->has($sourceName, $currencyCode, $lastFriday = $date->sub(new \DateInterval('P1D')), $rateType)) {
              return $this->get($sourceName, $currencyCode, $lastFriday, $rateType);
          }
  
          if ((int) $date->format('N') === 7 && $this->has($sourceName, $currencyCode, $lastFriday = $date->sub(new \DateInterval('P2D')), $rateType)) {
              return $this->get($sourceName, $currencyCode, $lastFriday, $rateType);
          }
  
          throw new ExchangeRateException(sprintf('Rate for currency code "%s" of type "%s" from source "%s" is not available for historical date "%s".', $currencyCode, $rateType, $sourceName, $date->format('Y-m-d')));
      }
docs: {@inheritdoc}
  
  @throws \RunOpenCode\ExchangeRate\Exception\UnknownCurrencyCodeException