我该如何构建融资DSL?

时间:2009-11-18 04:41:00

标签: database-design programming-languages finance dsl

我决定建立一个跟踪我收到的信用卡优惠的数据库,一个令人困惑的因素是如何代表优惠。凭借最低的融资费用和可变利率以及最低可变利率,它比“10.99%”更复杂一些。如果我有机会比较或推广这些优惠,我已经决定构建一种代表这些东西的语言。

问题是,我该如何表示?这些公式太复杂了,无法通过创建字段进行建模,因此我只需将公式存储在数据库中即可。是的,这意味着模糊了数据和执行之间的界限,但由于这是一个个人项目,我并不那么担心。

  1. 嵌入式python。将公式表示为Python,只需绑定相关变量并调用公式。
  2. 使用领域特定语言。我不能成为第一个想到以这种方式表达事物的人,事实上我知道我不是。有没有可以代表这种语言的免费公共语言?
  3. 有人可以就哪种方法更好提出建议吗?

3 个答案:

答案 0 :(得分:3)

这听起来与Simon Peyton Jones等人的作品有些相似。在representing financial contracts using combinator libraries上,包括implementation in Haskell,包括在给定某些模型的情况下对它们运行评估函数以计算合同价值的能力。我对金融的了解不足以告诉你这是否正是你正在寻找的,但听起来就像是在正确的球场。

至于你的具体问题,我通常更喜欢嵌入式领域特定语言(即嵌入在宿主语言中的类似DSL的结构,例如带有面向对象元编程的Ruby,带有宏的Scheme或Haskell组合器库),因为它免费为您提供主语的全部功能;通常在使用自己的语法,执行模型,运行时等编写特定于域的语言时,如果您有现有的语言,那么您会遇到很容易做的事情,但是因为你没有“在你的DSL中实现了一些东西。

答案 1 :(得分:2)

如果您认为必须将公式存储在数据库中,我的投票适用于嵌入式Python。

DSL似乎有点矫枉过正;你已经有了一个非常好的语言来评估公式。

答案 2 :(得分:1)

另一种选择是使用R。它有一个很好的公式表示;您将其存储为字符串,然后使用eval()函数对其进行评估。还有广泛的财务库(请参阅the CRAN finance view),包括Rmetrics

R还可以与其他语言进行非常好的交互,包括python,java和C ++。你提到了Python:如果你想编写一个包装器脚本,你可以使用RPy。