For that, I have the same issue regarding custom price with multi-currency setup,
but not working when currency change due to custom price,
And I have added the custom price with this solution code like,
https://webkul.com/blog/magento2-set-custom-price-of-product/
But when switch the currency but price didn't update due to our custom price
So I have applied the solution For that and it's worked fine with custom price,
<event name="controller_action_predispatch"><observer name="force_storecode_redirect" instance="Mconnect\Csproduct\Observer\ForceStorecodeRedirectObserver"shared="false" /></event>
To apply this event and set the observer,
<?php
public function execute(\Magento\Framework\Event\Observer $observer)
{
if(!empty($_POST) && (count($_POST) > 0) && (isset($_POST['currency']))){
$currentStore = $this->storeManager->getStore()->getCode();
$baseUrl = $this->storeManager->getStore()->getBaseUrl();
$switchCurrency = $_POST['currency'];
$basecuurency= $this->storeManager->getStore()->getBaseCurrencyCode();
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$priceCurrencyFactory = $objectManager->get('Magento\Directory\Model\CurrencyFactory');
$storeManager = $objectManager->get('Magento\Store\Model\StoreManagerInterface');
$cart = $objectManager->get('\Magento\Checkout\Model\Cart');
$quotea = $cart->getQuote();
$quoteId = $quotea->getId();
$quote = $this->quoteRepository->get($quoteId);
$allVisibleItems = $cart->getQuote()->getAllVisibleItems();
foreach ($quote->getAllItems() as $item) {
$getprice =$this->_helper->getpricebyprdId($item->getId());
$itemAmount = $item->getProduct()->getFinalPrice();
$rate = $priceCurrencyFactory->create()->load($basecuurency)->getAnyRate($switchCurrency);
$itemAmount = $itemAmount * $rate;
$item->setCustomPrice($itemAmount);
$item->setOriginalCustomPrice($itemAmount);
$item->getProduct()->setIsSuperMode(true);
}$quote->save();
}
}