6 votos

OpenGamma los Estratos - Computacional de la Sobrecarga

He estado mirando la abrir-fuente de la biblioteca de Estratos (mantenida por OpenGamma), que está escrito en Java.

Ahora, tras la inspección de la FX Forward encargado del precio y el Pago encargado del precio me di cuenta de dos cosas:

  1. Todos los de su bajo nivel de los cálculos y de los resultados (valor presente, PV01, etc.) se hace uso de clases como CurrencyAmount o MultiCurrencyAmount. ¿Cuál es el coste computacional de este en comparación con el doble de los números de la primera y la mejora de los resultados con la Moneda de Datos de Metadatos después de los cálculos se ha completado? E. g. cada vez que un nuevo CurrencyAmount se crea uno pasa por el interior de la Moneda de la propiedad, que en sí mismo contiene un 3-letra símbolo representado como una cadena. Así que parece que las cadenas son repetidamente copiado.
  2. El valor presente de la llamada a la función recibe el comercio en sí mismo y un mercado proveedor de datos. El comercio de la moneda que se utiliza a continuación para obtener el factor de descuento de la curva a partir de los datos del mercado proveedor, a partir de la cual el último factor de descuento a continuación, se consulta. De nuevo, me estoy preguntando lo que el costo de esta constante "de la curva de look-up" es en una escala más grande. ¿Por qué no incorporar una referencia directa en el comercio (o encargado del precio, dependiendo de la aplicación) a la correspondiente curva de descuento? Así repetidas llamadas a la función (de valor presente o pv01) no tiene que buscar constantemente la curva en el mercado de mapa de datos. Tal vez de manera similar a tener un shared_ptr a la curva en C++.

QuantLib en comparación incorpora la necesaria en el mercado de datos punteros de objeto en la fijación de precios de los motores cuando el motor está en la instalación, y sólo opera en el doble de los números, que aparece más eficientes en el primer vistazo. Obviamente, no se puede compaginar la QuantLib enfoque, considerando que esto es posible mediante el uso de los Estratos.

5voto

RossBa Puntos 31

En el punto 1, los Estratos considera que es importante tener la moneda asociada con el valor. Después de todo, el valor no tiene sentido sin la moneda. Hay un costo para la creación de un CurrencyAmount (aunque si se usa y se desecha rápidamente, esto tiene un costo mínimo en el recolector de basura (la "joven generación") y, potencialmente, HotSpot puede patear en y quitar la creación de objetos de coste completo.

Aunque Currency contiene un String, la cadena no se copian cada vez. En Java las cadenas son inmutables (no se puede cambiar), y Currency es también inmutable. Como tal, cuando el CurrencyAmount se crea un puntero a la existente Currency está incluido, y que contiene un puntero a la existente String, por lo tanto ninguna cadena o Currency es creado.

Sobre el punto 2, Estratos sigue un diseño funcional, donde el pricers son funciones que se transmiten los datos. Esta inmutable y funcional de la naturaleza es una parte clave del diseño de los Estratos, en particular, ya que permite un fácil paralelismo.

En este caso, el encargado del precio se pasa el comercio y el mercado de datos. El encargado del precio examina el comercio para ver lo que los datos de mercado es necesario. Esto proporciona flexibilidad para permitir que el encargado del precio para obtener lo datos de mercado que necesita sin tener que cambiar la API de la función. Fueron de los datos de mercado para ser integrado en el objeto, se requeriría de un nuevo objeto se crea para cada cálculo, que sería conveniente, en particular, a la hora de calcular los escenarios (repetición de cálculo en la que varían ligeramente de datos de mercado).

Si el rendimiento del mercado para la búsqueda de datos ha demostrado ser un problema, una implementación especial de RatesProvider (un interface) puede ser escrita que sólo contiene datos de mercado para un par de divisas. La aplicación de la devolución de las curvas sin búsqueda en un hashmap. La persona que llama, a continuación, ser responsable de transmitir la correcta aplicación del encargado del precio. Este sería el más enfoque similar al utilizado en QuantLib.

Descargo de responsabilidad: yo soy uno de los autores principales de los Estratos.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X