Сведения о вопросе

1234123213

15:31, 4th August, 2020

Теги

dsl   finance    

Предметно-ориентированных языков (конкретные языки домен) в финансы

Просмотров: 387   Ответов: 5

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

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



  Сведения об ответе

pumpa

23:36, 22nd August, 2020

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


  Сведения об ответе

FAriza

23:06, 25th August, 2020

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

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


  Сведения об ответе

SSESION

09:12, 3rd August, 2020

Доменные языки (DSLs) наиболее часто используются для представления финансовых инструментов. Каноническая статья-это сочинение Саймона Пейтона Джонса "контракты: приключение в финансовой инженерии ", которое представляет контракты с использованием библиотеки комбинаторов в Haskell. Наиболее заметным использованием комбинаторного подхода является язык LexiFi MLFi, который построен поверх OCaml (их CEO, Жан-Марк Эбер, является соавтором статьи о составлении контрактов). Компания barclay's в какой-то момент скопировала этот подход и описала некоторые дополнительные преимущества, такие как возможность генерировать удобочитаемые математические формулы ценообразования ( коммерческое использование: переход к функционалу на экзотических сделках ).

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

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

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

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


  Сведения об ответе

darknet

05:42, 29th August, 2020

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

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


  Сведения об ответе

davran

04:05, 23rd August, 2020

Я думаю, что работа Саймона Пейтона Джонса и Жан-Марка Эбера является самой впечатляющей из-за "Composing Contracts: an Adventure in Financial Engineering" и всего, что вытекает из этого: "LexiFi и MLFi ".

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

Смотрите "Adventures in financial and software engineering" и другие материалы, на которые ссылаются оттуда.

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

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

}

Отличную работу Томаша Petricek в F# очень стоит посетить.

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться