DSL (предметно-ориентированные языки) в области финансов - PullRequest
14 голосов
/ 23 августа 2008

Кто-нибудь работал с DSL (Domain-Specific Languages) в области финансов? Я планирую внедрить некоторую поддержку DSL в приложении, над которым я работаю, и хотел бы поделиться некоторыми идеями.

Я нахожусь в стадии определения, какие элементы домена являются наиболее стабильными, и выбора функций, которые лучше реализовать с помощью DSL. Я еще не определил синтаксис для этой первой функции.

Ответы [ 5 ]

13 голосов
/ 12 ноября 2008

Финансовые контракты были элегантно смоделированы как DSL Саймоном Пейтоном Джонсом и Жаном-Марком-Эрби. Их DSL, встроенный в Haskell, представлен в документе Как написать финансовый контракт .

8 голосов
/ 23 августа 2008

Джей Филдс и Оби Фернандес много писали и говорили на эту тему.

Вы также найдете общие сведения о реализации DSL в работах Мартина Фаулера (но не для финансов).

4 голосов
/ 13 апреля 2013

Специфичные для домена языки (DSL) чаще всего используются для представления финансовых инструментов. Каноническим документом является Составление контрактов Саймона Пейтона Джонса: приключение в области финансового инжиниринга , в котором представлены контракты с использованием библиотеки комбинаторов в Haskell. Наиболее широко используемым подходом комбинатора является язык LexFi для MLFi , который построен на основе OCaml (их генеральный директор Жан-Марк Эбер является соавтором статьи Composing Contracts). В какой-то момент Барклай скопировал подход и описал некоторые дополнительные преимущества, такие как возможность генерировать понятные человеку математические формулы ценообразования ( Коммерческое использование: функционирование в экзотических сделках ).

DSL для финансовых контрактов обычно создаются с использованием встраивания на функциональном языке, таком как Haskell, Scala или OCaml. Внедрение функциональных языков программирования в финансовой индустрии будет и впредь делать этот подход привлекательным.

Помимо представления финансовых инструментов, DSL также используются в финансах для:

Я веду полный список финансовых документов DSL, переговоров и других ресурсов по адресу http://www.dslfin.org/resources.html.

Если вы хотите встретиться с профессионалами и исследователями, работающими с DSL для финансовых систем, 1 октября на конференции MODELS 2013 в Майами, Флорида, состоится предстоящий семинар: http://www.dslfin.org/

0 голосов
/ 02 августа 2015

Я думаю, что работа Саймона Пейтона Джонса и Жана Марка Эбера наиболее впечатляющая из-за «Составления контрактов: приключение в финансовой инженерии» и всего, что вытекает из этого: « LexiFi и MLFi ».

Найдено Шахбаз Чаудхари Реализация Scala наиболее привлекательна, учитывая, что MLFi обычно недоступен (и поскольку Scala как функциональный язык более доступен, чем Haskell).

См. «Приключения в финансовой и программной инженерии» и другие материалы, на которые есть ссылки.

Я позволю себе воспроизвести фрагмент кода, чтобы понять, на что способна эта реализация.

  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)
  }

}

Отличная работа Томаса Петричека на F # очень стоит изучить.

Помимо парадигмы «DSL», я полагаю, что нам потребуется вклад ряда других мощных парадигм, чтобы иметь полный способ представить сложную семантику финансовых инструментов и финансовых контрактов при одновременном соблюдении реалий «больших данных».

Стоит ознакомиться с некоторыми языками, упомянутыми здесь: http://www.dslfin.org/resources.html

0 голосов
/ 05 января 2013

Мы работали над идеей создания DSL для финансовой оценки с помощью Fairmat (http://www.fairmat.com)

- он предоставляет DSL, который может использоваться для выражения выплат и зависимостей платежей - содержит модель расширения для создания новых типов аналитики и реализации теоретической динамики с использованием .NET / C # с нашей базовой математической библиотекой (см. некоторые примеры с открытым исходным кодом по адресу https://github.com/fairmat

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...