Алгоритм для определения обменного курса

Учитывая набор данных различных валютных пар, как я эффективно вычисляю подразумеваемый fx уровень для пары, не предоставленной в наборе данных?

Например, скажите, что моя база данных/таблица похожа на это (от этих данных уклоняются):

GBP x USD = 1.5
USD x GBP = 0.64
GBP x EUR = 1.19
AUD x USD = 1.1  

Заметьте что (фунт стерлингов, доллар США)! = 1 / (ДОЛЛАР США, ФУНТ СТЕРЛИНГОВ).

Я ожидал бы следующие результаты:

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 "достаточно хорош".

10
задан TrevorB 30 July 2010 в 14:22
поделиться

1 ответ

Вы ищете кратчайший путь в направленном графе, где валюты - вершины, а заданные курсы обмена - ребра. Если обменный курс задан только для одного направления, вы можете добавить курс для противоположного направления с большей стоимостью.

14
ответ дан 3 December 2019 в 23:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: