Учитывая набор данных различных валютных пар, как мне эффективно рассчитать подразумеваемую скорость обмена валют для пары, не предоставленной в наборе данных?
Например, скажем, моя база данных / таблица выглядит следующим образом (этоданные обманываются):
GBP x USD = 1.5
USD x GBP = 0.64
GBP x EUR = 1.19
AUD x USD = 1.1
Обратите внимание, что (GBP, USD)! = 1 / (USD, GBP).
Я ожидаю следующих результатов:
print rate('GBP','USD')
> 1.5
print rate('USD','GBP')
> 0.64
print rate('GBP','EUR')
> 1.19
#now in the absence of an explicit pair, we imply one using the inverse
print rate('EUR','GBP')
> 0.84
Это простые случаи, они становятся более интересными:
#this is the implied rate from (GBP,EUR) and (GBP,USD)
print rate('EUR','USD')
> 1.26
Или еще более сложный пример - поиск наиболее эффективного перевода с использованием 3 или более пар:
print rate('EUR','AUD')
> 1.38
Я думаю, что это детализирует аспекты этой проблемы, связанные с программированием.Я предполагаю, что есть эффективная или умная рекурсия, которая может быть сделана здесь.Единственное требование состоит в том, чтобы наименьшее количество пар использовалось для получения запрашиваемой пары (это должно уменьшить ошибку).Если явно не указано обратное, то инвертирование пары ничего не стоит.
Мотивация
В идеальном финансовом мире валютные рынки эффективны.На самом деле это правда на 99%.Нередко нечетные валютные пары не котируются или используются редко.Если существует явная кавычка, мы должны использовать ее в наших произвольных вычислениях.Если нет, то мы должны подразумевать наиболее точную пару из максимально возможного числа десятичных разрядов.Кроме того, они не всегда умножаются на 1 (на самом деле, они никогда не умножаются на 1);это отражает спред спроса / предложения на рынке.Таким образом, мы сохраняем как можно больше пар в обоих направлениях, но хотели бы иметь возможность кодировать в целом для всех валют.
Я думаю, что у меня реализовано приличное решение методом перебора.Это работает, но я думал, что проблема была интересной, и мне было интересно, если кто-то еще думал, что это было интересно / сложно.Я лично работаю в Python, но это скорее упражнение, чем реализация, поэтому код psuedo "достаточно хорош".