2010-07-30 20 views
8

Dado un conjunto de datos de varios pares de divisas, ¿cómo calculo eficientemente la tasa de fx implícita para un par no suministrado en el conjunto de datos?Algoritmo para determinar el tipo de cambio

Por ejemplo, digamos que mi base de datos/tabla tiene este aspecto (estos datos se fudged):

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

en cuenta que (GBP, USD) = 1/(USD, GBP)!.

que se puede esperar los siguientes resultados:

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 

Estos son los casos simples, se pone más interesante:

#this is the implied rate from (GBP,EUR) and (GBP,USD) 
print rate('EUR','USD') 
> 1.26 

O un ejemplo aún más complicado es encontrar la traducción más eficiente utilizando 3 o más pares:

print rate('EUR','AUD') 
> 1.38 

Creo que detalla la programación aspectos relacionados con este problema. Me imagino que hay una recursión eficiente o inteligente que se puede hacer aquí. El único requisito es que se use el menor número de pares para llegar al par solicitado (esto es para reducir el error). Si no se da ninguna inversión explícita, invertir un par no le cuesta nada.

motivación
En el mundo financiero ideales, los mercados de divisas son eficientes. En realidad, eso es 99% verdad. A menudo, los pares de divisas impares no se cotizan o se citan con poca frecuencia. Si existe una cita explícita, debemos usarla en nuestros cálculos arbitrarios. De lo contrario, debemos implicar el par más preciso, con tantos decimales como podamos. Además, no siempre se multiplican a 1 (en realidad, nunca se multiplican a 1); esto refleja el diferencial de oferta/demanda en el mercado. Así que mantenemos tantos pares como podamos en ambas direcciones, pero nos gustaría poder codificar en general para todas las monedas.

Creo que tengo implementada una solución decente de fuerza bruta. Funciona, pero pensé que el problema era interesante y me preguntaba si alguien más pensaba que era interesante/desafiante. Personalmente estoy trabajando en Python, pero es más un ejercicio que una implementación, por lo que el código psuedo es "lo suficientemente bueno".

+1

Esta es una tarea muy fácil en ProLog :). Se necesita más pensamiento en los algoritmos de procedimiento. Supongo que tendrías que formar un árbol de conversiones, el nodo superior es la moneda de origen y las hojas, la última moneda posible en la condición de que por cada circuito de arriba abajo, cada moneda aparece solo una vez. El algoritmo escogería la tasa de cambio resultante mínima obtenida. Métodos recursivos. – AlexanderMP

Respuesta

12

Está buscando la ruta más corta en un gráfico dirigido, donde las monedas son los vértices y las tasas de cambio dadas son los bordes. Si un tipo de cambio se otorga solo para una dirección, puede agregar uno en la dirección opuesta con un costo mayor.

+0

oh, me olvidé por completo de los gráficos. ¡Bingo! Le has dado la respuesta :) – AlexanderMP

Cuestiones relacionadas