如何设计适合金融工具的编程语言?

时间:2009-12-11 17:09:47

标签: finance computational-finance quantitative-finance quantitative

我在一家专门从事金融业的精品店工作。

我们考虑设计一种语言来描述与金融市场相关的金融实体。

这主要用作某种脚本语言来替换电子表格和VBA宏中的许多进程。

它必须简单,事实上它在幕后调用各种C ++和C#库。它必须让用户处理抽象的对象,这些对象可以表示时间序列(日内和日常)。

它必须是完全可调试的,当用户遇到问题时,我们必须能够介入C ++ / C#代码并重现错误。理想情况下,它必须能够通过Excel中的某种机制启动并在Excel中返回结果。 (不幸的是,几乎所有在财务部门工作的人都使用Excel)

如果你不得不做这个任务,你会怎么做呢?

你会选择功能语法吗?

你会开发一些可以解释的脚本语言吗?或者你会用另一种语言编译它(比如用C ++或C#转换脚本)?

我没有找到任何开源项目进行此类开发,但有没有使用这种语法的商业产品?

编辑:我读了你所有的答案,但我会等待更多时间才能找到答案。虽然它们都是非常有用的意见!

EDIT2:我将High-Performance Mark标记为解决方案。您的所有回复都非常有用,我已将其全部修改完毕。他是第一个答案之一,他的答复对我们非常有见地。

9 个答案:

答案 0 :(得分:10)

我建议您专注于使用您首选的OO语言(C#或C ++)开发一组丰富的类,但我怀疑您可能会发现将前者与Excel集成更容易。这将为您提供语言来描述与金融市场相关的金融实体。完成后,您应该考虑是否继续使用某种特定于域的语言包装这些类,或者只是将它们公开给您的用户社区。

我怀疑你的域有一些不可复制的复杂性,并且中间DSL必须(几乎)像你的类集一样复杂,因此,你创建它时几乎没有什么好处。

另一种方法是将Excel与Mathematica集成,Wolfram为其生成某种工具箱。我没有这方面的经验,但Mathematica当然适合你必须做的任何计算。

此致

答案 1 :(得分:5)

我会用Python包装C ++库。

我会定义一个流畅的类包,实际上是我的域特定语言。

我会基于这两个基础直接使用Python语言。我不会发明自己的新语法。世界不需要另一种语法;我们有足够的语法和语法来解析,足以持续到时间结束。

你会选择功能语法吗? Python具有功能。如果你对Python类设计很小心,你可以实现一个干净的功能风格。

理想情况下,必须能够通过Excel中的某种机制启动并在Excel中返回结果。

由于Python解释器可以嵌入到C ++(或C#)应用程序中,因此您可以轻松创建Excel API。从Excel到您的新语言,在C ++ API中尽可能少地启动Python功能。

顺便说一下,你的竞争对手是Resolver One。这就是他们所做的。

答案 2 :(得分:3)

ResolverOne(http://www.resolversystems.com/products/resolver-one/)是Excel和Python的组合。你有没有考虑过使用它?

答案 3 :(得分:3)

我建议使用R

答案 4 :(得分:3)

利用c#的另一种观点。

由于您已经拥有一个功能强大的通用功能编程工具,您的用户熟悉并以Excel的形式购买,我希望能够构建一个解决方案。你仍然可以选择使用其他第三方附加组件和集成选项(例如R和Mathematica)

我会研究用户定义函数的托管自动化加载项。这些本质上是使用System.Runtime.InteropServices的c#库项目,如本文link text中所述。对于用户,使用函数向导以正常方式在单元级别添加这些函数,并且可以或多或少地按照您希望的那样。这就是你的DSL。用户可以选择轻松地将功能集成到现有模型中。对原型进行原型设计以测试其可行性也很快。这些是完全可调试的。

此外,使用Visual Studio Tools for Office,您可以访问完整的Excel对象层次结构,甚至可以添加操作窗格,可以通过拖放控件来布置更复杂的数据输入要求。我相信如果您需要添加专门的可视化,甚至可以以这种方式使用WPF和Excel。如果您需要将数据保留回来说出Sql Server,您可以使用这种方法构建一个转向验证表单。

我听起来像M $ shill! (只是为了记录,我不适合他们)。

你需要评估这个的表现,我不确定它会如何扩展。

答案 5 :(得分:3)

Haskell成名的Simon Peyton-Jones撰写了一篇论文'Composing contracts: an adventure in financial engineering',讨论了函数式语言如何使自己编写金融衍生合约的可执行描述。这种方法应该可以用F#。

我相信LexiFi的产品旨在将这项研究商业化。

答案 6 :(得分:2)

Jane Street Capital使用OCaml,并写下他们的经历here。如果广泛阅读,这是非常有趣的。

对于您的环境,如果您遵循他们的模型,您可以使用F#,它开始以OCaml方言为生,但当然在.NET世界中运行。

答案 7 :(得分:1)

如果你的底层库使用Java,你应该看看在Groovy中做DSL。有很多关于此的播客和文章,请尝试Googling“DSL Groovy”。

答案 8 :(得分:1)

大多数数字运算的金融机构(或其中的部门)已经获得了Matlab许可证。我建议你看一下Matlab提供的面向对象设施(实际上,在他们的Financial Toolbox)。

预先我认为你获得了三件事:

1)访问高级环境,用户可以专注于问题,而不是实施 2)高质量图形的可用性 3)与Excel和其他生产力软件包无缝集成

我知道你的意思是开发一种语言(而不是应用程序),但考虑将你的语义捎带到一个熟知的语言 - 这样你就可以避免用户的学习曲线。