xdsl redes que internet dsl finance

redes - que es dsl modem



DSL en Finanzas (5)

Jay Fields y Obie Fernandez han escrito y hablado extensamente sobre el tema.

También encontrará información general sobre la implementación de DSL en los escritos de Martin Fowler (pero no específicamente sobre finanzas).

¿Alguien aquí ha trabajado alguna vez con DSL (Idiomas Específicos de Dominio) en el dominio de las finanzas? Estoy planeando introducir algún tipo de soporte DSL en la aplicación en la que estoy trabajando y me gustaría compartir algunas ideas.

Estoy en una etapa de identificar cuáles son los elementos de dominio más estables y seleccionar la función que se implementaría mejor con el dsl. Todavía no he definido la sintaxis para esta primera función.

Agradezco cualquier consejo

Gustavo


Los contratos financieros han sido modelados elegantemente como DSL por Simon Peyton Jones y Jean-Marc-Erby. Su DSL, integrado en Haskell, se presenta en el documento Cómo redactar un contrato financiero .


Trabajamos en la idea de crear una DSL de valoración financiera con Fairmat ( http://www.fairmat.com )

-expone una DSL que puede usarse para expresar cancelaciones y dependencias de pago -contiene un modelo de extensión para crear nuevos tipos de análisis e implementaciones de dinámica teórica usando .NET / C # con nuestra biblioteca matemática subyacente (vea algunos ejemplos de código abierto) en https://github.com/fairmat


Los lenguajes específicos de dominio (DSL) se usan más comúnmente para representar instrumentos financieros. El artículo canónico es Contratos de composición de Simon Peyton Jones : una aventura en ingeniería financiera que representa contratos usando una biblioteca combinatoria en Haskell. El uso más destacado del enfoque combinador es el lenguaje MLFI de LexiFi , que se basa en OCaml (su director ejecutivo, Jean-Marc Eber, es coautor del documento de composición de contratos). En un momento, Barclay copió el enfoque y describió algunos beneficios adicionales, como la capacidad de generar fórmulas de precios matemáticos legibles por los humanos ( Usos comerciales: Funcionalidad funcional en los comercios exóticos ).

Las DSL para contratos financieros normalmente se crean utilizando una incrustación en un lenguaje funcional como Haskell, Scala u OCaml. La adopción de lenguajes de programación funcionales en la industria financiera continuará haciendo este enfoque atractivo.

Además de representar instrumentos financieros, las DSL también se utilizan en finanzas para:

Mantengo una lista completa de documentos financieros DSL, charlas y otros recursos en http://www.dslfin.org/resources.html .

Si desea conocer profesionales e investigadores que trabajan con DSL para sistemas financieros, hay un taller el 1 de octubre en la conferencia MODELS 2013 en Miami, Florida: http://www.dslfin.org/


Creo que el trabajo de Simon Peyton Jones y Jean Marc Eber es el más impresionante debido a "Contratos de composición: una aventura en ingeniería financiera" y todo lo derivado de eso: " LexiFi y MLFi ".

La implementación de Scala de Shahbaz Chaudhary fue la más atractiva dado que MLFi no está generalmente disponible (y porque Scala como lenguaje funcional es más accesible que Haskell).

Consulte "Aventuras en ingeniería financiera y de software" y el otro material al que se hace referencia a partir de allí.

Me atrevo a replicar un recorte para tener una idea de lo que esta implementación puede hacer.

object Main extends App { //Required for doing LocalDate comparisons...a scalaism implicit val LocalDateOrdering = scala.math.Ordering.fromLessThan[java.time.LocalDate]{case (a,b) => (a compareTo b) < 0} //custom contract def usd(amount:Double) = Scale(Const(amount),One("USD")) def buy(contract:Contract, amount:Double) = And(contract,Give(usd(amount))) def sell(contract:Contract, amount:Double) = And(Give(contract),usd(amount)) def zcb(maturity:LocalDate, notional:Double, currency:String) = When(maturity, Scale(Const(notional),One(currency))) def option(contract:Contract) = Or(contract,Zero()) def europeanCallOption(at:LocalDate, c1:Contract, strike:Double) = When(at, option(buy(c1,strike))) def europeanPutOption(at:LocalDate, c1:Contract, strike:Double) = When(at, option(sell(c1,strike))) def americanCallOption(at:LocalDate, c1:Contract, strike:Double) = Anytime(at, option(buy(c1,strike))) def americanPutOption(at:LocalDate, c1:Contract, strike:Double) = Anytime(at, option(sell(c1,strike))) //custom observable def stock(symbol:String) = Scale(Lookup(symbol),One("USD")) val msft = stock("MSFT") //Tests val exchangeRates = collection.mutable.Map( "USD" -> LatticeImplementation.binomialPriceTree(365,1,0), "GBP" -> LatticeImplementation.binomialPriceTree(365,1.55,.0467), "EUR" -> LatticeImplementation.binomialPriceTree(365,1.21,.0515) ) val lookup = collection.mutable.Map( "MSFT" -> LatticeImplementation.binomialPriceTree(365,45.48,.220), "ORCL" -> LatticeImplementation.binomialPriceTree(365,42.63,.1048), "EBAY" -> LatticeImplementation.binomialPriceTree(365,53.01,.205) ) val marketData = Environment( LatticeImplementation.binomialPriceTree(365,.15,.05), //interest rate (use a universal rate for now) exchangeRates, //exchange rates lookup ) //portfolio test val portfolio = Array( One("USD") ,stock("MSFT") ,buy(stock("MSFT"),45) ,option(buy(stock("MSFT"),45)) ,americanCallOption(LocalDate.now().plusDays(5),stock("MSFT"),45) ) for(contract <- portfolio){ println("===========") val propt = LatticeImplementation.contractToPROpt(contract) val rp = LatticeImplementation.binomialValuation(propt, marketData) println("Contract: "+contract) println("Random Process(for optimization): "+propt) println("Present val: "+rp.startVal()) println("Random Process: /n"+rp) } }

Vale la pena explorar el excelente trabajo de Tomas Petricek en F #.

Más allá del paradigma "DSL", sugiero que necesitaríamos contribuciones de otros paradigmas poderosos para tener una forma completa de representar la compleja semántica de los instrumentos financieros y los contratos financieros, al tiempo que cumplimos con las realidades del "big data".

Vale la pena revisar algunos idiomas mencionados aquí: http://www.dslfin.org/resources.html