有没有人在金融领域使用DSL(域特定语言) 我打算在我正在开发的应用程序中引入某种DSL支持,并希望分享一些想法。

我正处于识别哪些是最稳定的域元素并选择可以通过DSL更好地实现的功能的阶段。 我还没有定义第一个功能的语法。

===============>>#1 票数:13

Simon Peyton Jones和Jean-Marc-Erby将金融合约优雅地模仿为DSL。 嵌入在Haskell中的DSL在“ 如何编写金融合同”一文中有所介绍。

===============>>#2 票数:8 已采纳

Jay Fields和Obie Fernandez就这个问题进行了广泛的撰写和讨论。

您还可以在Martin Fowler的着作中找到有关实施DSL的一般内容(但不是专门针对财务)。

===============>>#3 票数:5

域特定语言(DSL)最常用于表示金融工具。 规范性论文是Simon Peyton Jones的“ 撰写合同:金融工程中的冒险”,它代表了在Haskell中使用组合器库的合同。 组合方法最突出的用途是LexiFi的MLFi语言 ,它建立在OCaml之上(他们的首席执行官Jean-Marc Eber是撰写合同文件的共同作者)。 Barclay一度抄袭了这种方法并描述了一些额外的好处,例如生成人类可读数学定价公式的能力( 商业用途:在异国交易中实现功能 )。

用于金融合同的DSL通常使用诸如Haskell,Scala或OCaml之类的功能语言嵌入来构建。 在金融行业中使用函数式编程语言将继续使这种方法具有吸引力。

除代表金融工具外,DSL还用于以下方面的融资:

我在http://www.dslfin.org/resources.html上保留了完整的金融DSL论文,讲座和其他资源清单。

如果你想见到专门为金融系统工作的专业人士和研究人员,10月1日即将在佛罗里达州迈阿密举行的MODELS 2013会议上举办研讨会: http//www.dslfin.org/

===============>>#4 票数:0

我们致力于利用Fairmat创建财务评估DSL( http://www.fairmat.com

- 暴露可用于表达支付和支付依赖关系的DSL - 包含一个扩展模型,用于使用.NET / C#和我们的基础数学库创建新类型的分析和理论动态实现(参见一些开源示例)在https://github.com/fairmat

===============>>#5 票数:0

我认为Simon Peyton Jones和Jean Marc Eber的作品是最令人印象深刻的,因为“撰写合同:金融工程中的冒险”以及从中获得的一切:“ LexiFi和MLFi ”。

发现Shahbaz Chaudhary的 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)
  }

}

Tomas Petricek在F#的出色工作非常值得探索。

除了“DSL”范式之外,我建议我们需要来自其他一些强有力范例的贡献,以便在满足“大数据”现实的同时,有一种完整的方式来表示金融工具和金融合约的复杂语义。

值得回顾一下这里提到的一些语言: http//www.dslfin.org/resources.html

  ask by Gustavo translate from so

未解决问题?本站智能推荐:

3回复

我应该如何构建金融DSL?

我决定建立一个数据库,以跟踪通过邮件收到的信用卡优惠,而一个令人困惑的因素是如何表示优惠。 用最低的财务费用和浮动利率以及最小浮动利率,它变得比“ 10.99%”复杂。 我决定如果要比较或趋势化这些报价,就需要构建一种语言来表示这些东西。 问题是,我怎么代表这个? 公式太复杂了,无法
9回复

领域特定语言(DSL)和域驱动设计(DDD)

域特定语言(DSL)和域驱动设计(DDD)之间的差异和相似之处是什么?
5回复

领域特定语言(DSL)对Common Programmer有害吗? [关闭]

我最近一直在钻研F#和新的DSL内容,就像在Microsoft SQL Server建模CTP中那样,并且有一些顾虑。 对于熟练的程序员来说,这个新想法是否会变坏? 代码会变得愚蠢吗? 我知道我听起来像一个luddite,但这确实让我担心,经过多年的时间练习我的手艺,现在可能会
2回复

在.NET中执行一种简单的领域特定语言

我有一个非常简单的领域特定语言,由以下BNF定义组成 我需要一个简单的指南来在.NET框架中编写DSL解析器/执行器。 我看过Irony ,但它似乎生成代码而不是使用值执行代码。 一个例子是: 它基本上只需要评估语句(将NAme,Address和Birth的值替换为实际值
1回复

软件重用中的领域特定语言

我想问一下在软件重用研究中使用领域特定语言与软件库相比的优势。 我阅读过一些论文,指出使用DSL比在软件重用领域使用软件库更好,但没有提及许多原因。 我读到的原因之一是DSL从编译器获得直接支持,而软件库则没有,我也无法理解这个问题。 问候
2回复

领域特定语言与领域特定建模语言

参考论文“特定于域的语言:系统的映射研究”,困扰我的一个基本问题以及简单的Google搜索似乎无济于事,我想弄清楚特定于域的语言(DSL)与“域”之间的区别特定的建模语言(DSML)。 看起来边界有点太模糊了,但是正如所引用的论文进一步提到的那样,建模社区在使用这些术语时也要小心。
4回复

代表我的领域特定语言

我设计了一种非常简单的域特定语言(DSL),用于指定和执行设备上的全屏交互行为。 它是基于事件的动作语言,以XML作为载体语法。 它的示例在这里: <state no="15000" > <timeout>30</timeout> <
3回复

从头开始理解领域特定语言(DSL)的好教程,以开始调查论文

我的论文主题一般是关于领域特定的语言,我想专注于外部或内部DSL的设计或实现,但我甚至无法思考或开始因为我在理解DSL的概念时面临问题。 我已经阅读并收集了很多关于这个问题的论文和调查,但我认为所有这些都是高级的。我需要一个很好的教程(对于初学者)从头开始理解DSL的整个概念和阶段。
6回复

UML是域特定语言(DSL)吗?

将UML视为DSL是否合适? 我知道每个人都认为UML是绘制图片的一种方式,但是UML图的“视图”底层有一个模型......而UML中的“L”代表语言。 另一个问题 - SysML是DSL吗?
6回复

Ruby DSL(域特定语言)存储库,示例

我正在寻找Ruby DSLs(领域特定语言)的优秀示例。 您知道哪些存储库,项目值得一读? 它为什么(或者是它们)是很好的例子? 我对经过深思熟虑和设计的更复杂的例子特别感兴趣。