6

Trabajo para una boutique especializada en finanzas.¿Cómo diseñar un lenguaje de programación adaptado a los instrumentos financieros?

Pensamos en diseñar un lenguaje para describir las entidades financieras relacionadas con los mercados financieros.

Esto se usaría principalmente como un tipo de lenguaje de scripting para reemplazar muchos procesos ejecutados en hojas de cálculo y macros de VBA.

Tiene que ser simple y tiene, de hecho, para llamar a varias bibliotecas C++ y C# detrás de las escenas. Tiene que permitir a los usuarios manejar objetos abstractos que podrían representar series temporales (intradía y diaria).

Tiene que ser completamente depurable, cuando un usuario tenga un problema, debemos ser capaces de avanzar en el código C++/C# y reproducir los errores. Idealmente, debe ser lanzado a través de algún mecanismo dentro de Excel y devolver los resultados dentro de Excel. (desafortunadamente casi todas las personas que trabajan en Finanzas usan Excel)

Si tuvieras que hacer esta tarea, ¿cómo lo harías?

¿Podría obtener una sintaxis funcional?

¿Desarrollaría algún lenguaje de scripting que sería interpretado o lo compilaría en otro idioma (como convertir los scripts en C++ o C#)?

No encontré ningún proyecto de código abierto para este tipo de desarrollo, pero ¿hay algún producto comercial que utilice este tipo de sintaxis?

EDIT: Leo todas las respuestas, pero esperaré más tiempo antes para encontrar una respuesta. Sin embargo, ¡todas son opiniones muy útiles!

EDIT2: Marqué la marca de alto rendimiento como solución. Todas sus respuestas son muy útiles y las modifiqué todas. Él fue una de las primeras respuestas y su respuesta es bastante perspicaz para nosotros.

+2

¿No es esto para lo que se diseñó originalmente COBOL? = P –

+1

@Marc No, no lo es. –

+0

Lo siento, pero ese fue un comentario divertido:) – BlueTrin

Respuesta

10

Sugiero que se concentre en desarrollar un amplio conjunto de clases en su idioma de OO preferido (ya sea C# o C++, aunque sospecho que le resultará más fácil integrar el primero con Excel). Eso le daría su lenguaje para describir entidades financieras relacionadas con los mercados financieros. Cuando hayas terminado, deberías considerar si continuar envolver estas clases en algún lenguaje específico del dominio o simplemente exponerlas a tu comunidad de usuarios.

Sospecho que su dominio tiene una complejidad irreducable y que una DSL intermedia tendrá que ser (casi) tan compleja como su conjunto de clases y que, por lo tanto, tiene poco que ganar al crearla.

Otro enfoque sería integrar Excel con Mathematica para lo cual Wolfram produce una caja de herramientas de algún tipo. No tengo experiencia en esto, pero Mathematica ciertamente es adecuado para cualquiera de los cálculos que tendrás que hacer.

Saludos

5

Me gustaría envolver las bibliotecas de C++ en Python.

Definiría un paquete de clases fluidas que, en efecto, era el idioma específico de mi dominio.

Usaría el lenguaje Python directamente en base a esas dos fundaciones. No inventaría mi propia sintaxis nueva. El mundo no necesita otra sintaxis; tenemos sintaxis y gramáticas suficientes para analizar, suficientes para durar hasta el final de los tiempos.

¿Podría obtener una sintaxis funcional? Python tiene capacidades funcionales. Si eres cuidadoso con tu diseño de clase Python, puedes lograr un estilo funcional limpio.

Lo ideal es que se pueda iniciar a través de algún mecanismo dentro de Excel y devolver los resultados dentro de Excel.

Dado que el intérprete de Python se puede incrustar en una aplicación C++ (o C#), puede crear API de Excel fácilmente. Desde Excel hasta su nuevo idioma, haga lo mínimo posible en la API de C++ para iniciar la funcionalidad de Python.

BTW, su competencia es Resolver One. Esto es lo que ellos hacen.

+1

Secundado (incluso si el idioma subyacente no termina siendo Python); esto es exactamente para lo que son las DSL, y lo libera para centrarse en los requisitos de negocio de la API, en lugar de los detalles más turbios. –

1

Si la biblioteca subyacente utiliza Java usted debe echar un vistazo a hacer una conexión DSL en Groovy. Hay una serie de podcasts y artículos sobre esto, prueba Google "DSL Groovy".

+0

Iba a sugerir Scala, por razones similares. Pero uno de los idiomas * tos * con los que quieren conectarse es C#, y no creo que sea realmente fácil integrar un lenguaje JVM con un lenguaje CLR. –

+0

D'oh, se perdió ese detalle, así que sí, sería un "desafío" para la interfaz con C# :-) –

2

Jane Street Capital utiliza OCaml y escribió sus experiencias here. Es una lectura bastante interesante si es amplia.

Para su entorno, si siguió su modelo, podría usar F#, que comenzó como un dialecto OCaml, pero que por supuesto se ejecuta en el mundo .NET.

+0

Gracias por su respuesta, he estado siguiendo F #, parece ser un candidato muy fuerte para este tipo de aplicaciones siendo un lenguaje funcional. – BlueTrin

3

Otro punto de vista que aprovecha C#.

Como ya tiene una poderosa herramienta de programación funcional de uso general con la que los usuarios están familiarizados y se han incorporado en forma de Excel, buscaría una solución al respecto. Aunque aún así hay la opción de esa manera de poder usar otros 3 ª parte complementos y opciones integradas (por ejemplo, R y Mathematica)

Me gustaría ver en administrados Complementos de automatización para las funciones definidas por el usuario. Estos son esencialmente proyectos de biblioteca C# que usan System.Runtime.InteropServices como se describe en este artículo link text. Para los usuarios, estas funciones se agregan a nivel de celda de forma normal utilizando el asistente de funciones y pueden ser más o menos lo que usted quiere que sean. Este es tu DSL. Los usuarios pueden elegir integrar la funcionalidad en sus modelos existentes fácilmente. También sería rápido prototipar algo para probar la viabilidad de esto. Estos son completamente depurables.

Además, al utilizar Visual Studio Tools para Office, puede acceder a la jerarquía completa de objetos de Excel e incluso agregar paneles de acción que pueden distribuirse arrastrando y soltando controles para requisitos de entrada de datos más complejos. Creo que incluso es posible usar WPF con Excel de esta manera si necesita agregar visualizaciones especializadas. Si necesita persistir la información para decir Sql Server, puede construir un formulario de validación utilizando este enfoque.

¡Me parece un M $ shill! (Solo para dejar las cosas claras, no trabajo para ellos).

Debería evaluar el rendimiento de esto y no estoy seguro de cómo se escalaría.

+0

Excel-DNA es una gran implementación de este concepto. –

1

La mayoría de las instituciones financieras (o divisiones) que atraviesan números ya han adquirido licencias de Matlab. Recomiendo que echen un vistazo a las instalaciones orientadas a objetos que ofrece Matlab (y, de hecho, en su Financial Toolbox).

En la delantera Creo que adquiera tres cosas:

1) El acceso a un entorno de alto nivel en el que los usuarios pueden concentrarse en el problema y no en la aplicación 2) Disponibilidad de gráficos de alta calidad 3) Integración perfecta con Excel y otros paquetes de productividad

Sé que pretende desarrollar un lenguaje (en lugar de una aplicación), pero considere aprovechar su semántica a un lenguaje bien conocido, de esta manera evitará la curva de aprendizaje para sus usuarios .

3

Simon Peyton-Jones de Haskell fama contribuyó a un documento 'Composing contracts: an adventure in financial engineering' que discutió cómo los lenguajes funcionales se prestaron a la composición de descripciones ejecutables de los contratos de derivados financieros. Tal método debería ser posible con F #.

Creo que las ofertas de LexiFi tenían como objetivo comercializar parte de esta investigación.

Cuestiones relacionadas